mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-23 01:03:21 +00:00
Inspecting 1483 files
........................................................................................................................C..................................................................................................................C...........CC.C..........................................C......C..........C.........................C......................CC..........C........................................................................................................................C.......................................................................................................C........................................................C...........................................................................................................................................C......................................C.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Offenses:
app/controllers/spree/admin/products_controller.rb:183:11: C: [Corrected] Rails/WhereNot: Use where.not(spree_variants: { import_date: nil }) instead of manually constructing negated SQL in where.
where('spree_variants.import_date IS NOT NULL').
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/concerns/permalink_generator.rb:37:26: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
scope_with_deleted.where('id != ?', id)
^^^^^^^^^^^^^^^^^^^^
app/models/concerns/permalink_generator.rb:37:40: C: [Corrected] Style/HashSyntax: Omit the hash value.
scope_with_deleted.where.not(id: id)
^^
app/models/enterprise.rb:152:7: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: ready_enterprises }) instead of manually constructing negated SQL in where.
where("enterprises.id NOT IN (?)", ready_enterprises)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:158:31: C: [Corrected] Rails/WhereNot: Use where.not(sells: 'none') instead of manually constructing negated SQL in where.
scope :is_distributor, -> { where('sells != ?', 'none') }
^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:479:17: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
dups = dups.where('id != ?', id) unless new_record?
^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:534:43: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: self }) instead of manually constructing negated SQL in where.
enterprises = owner.owned_enterprises.where('enterprises.id != ?', self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:583:7: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: id }) instead of manually constructing negated SQL in where.
where('enterprises.id != ?', id).
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_fee.rb:40:24: C: [Corrected] Rails/WhereNot: Use where.not(spree_calculators: { type: PER_ORDER_CALCULATORS }) instead of manually constructing negated SQL in where.
joins(:calculator).where('spree_calculators.type NOT IN (?)', PER_ORDER_CALCULATORS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:78:19: C: [Corrected] Rails/WhereNot: Use where.not(name: perms) instead of manually constructing negated SQL in where.
permissions.where('name NOT IN (?)', perms).destroy_all
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/product_import/inventory_reset_strategy.rb:27:16: C: [Corrected] Rails/WhereNot: Use where.not(id: excluded_items_ids) instead of manually constructing negated SQL in where.
relation.where('id NOT IN (?)', excluded_items_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/proxy_order.rb:19:25: C: [Corrected] Rails/WhereNot: Use where.not(proxy_orders: { canceled_at: nil }) instead of manually constructing negated SQL in where.
scope :canceled, -> { where('proxy_orders.canceled_at IS NOT NULL') }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/credit_card.rb:26:39: C: [Corrected] Rails/WhereNot: Use where.not(gateway_customer_profile_id: nil) instead of manually constructing negated SQL in where.
scope :with_payment_profile, -> { where('gateway_customer_profile_id IS NOT NULL') }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/product.rb:166:9: C: [Corrected] Rails/WhereNot: Use where.not(order_cycles: { id: nil }) instead of manually constructing negated SQL in where.
where('order_cycles.id IS NOT NULL')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:94:30: C: [Corrected] Rails/WhereNot: Use where.not(deleted_at: nil) instead of manually constructing negated SQL in where.
scope :deleted, lambda { where('deleted_at IS NOT NULL') }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:165:43: C: [Corrected] Rails/WhereNot: Use where.not(spree_prices: { amount: nil }) instead of manually constructing negated SQL in where.
where('spree_prices.amount IS NOT NULL').
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/zone.rb:141:19: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
Spree::Zone.where('id != ?', id).update_all(default_tax: false) if default_tax
^^^^^^^^^^^^^^^^^^^^
app/models/spree/zone.rb:141:33: C: [Corrected] Style/HashSyntax: Omit the hash value.
Spree::Zone.where.not(id: id).update_all(default_tax: false) if default_tax
^^
app/models/variant_override.rb:32:7: C: [Corrected] Rails/WhereNot: Use where.not(variant_overrides: { import_date: nil }) instead of manually constructing negated SQL in where.
where('variant_overrides.import_date IS NOT NULL').
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/cap_quantity.rb:45:22: C: [Corrected] Rails/WhereNot: Use where.not(variant_id: available_variants_for.select(&:id)) instead of manually constructing negated SQL in where.
order.line_items.where('variant_id NOT IN (?)', available_variants_for.select(&:id))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
engines/catalog/app/services/catalog/product_import/products_reset_strategy.rb:32:18: C: [Corrected] Rails/WhereNot: Use where.not(spree_variants: { id: excluded_items_ids }) instead of manually constructing negated SQL in where.
relation.where('spree_variants.id NOT IN (?)', excluded_items_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
engines/order_management/app/services/order_management/subscriptions/proxy_order_syncer.rb:78:18: C: [Corrected] Rails/WhereNot: Use where.not(order_cycle_id: order_cycle_ids) instead of manually constructing negated SQL in where.
orphaned.where('order_cycle_id NOT IN (?)', order_cycle_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:27:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: nil }) instead of manually constructing negated SQL in where.
.where("enterprises.id IS NOT NULL")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:39:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprise_id: nil) instead of manually constructing negated SQL in where.
.where("enterprise_id IS NOT NULL")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:40:14: C: [Corrected] Rails/WhereNot: Use where.not(user_id: nil) instead of manually constructing negated SQL in where.
.where("user_id IS NOT NULL")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/data/anonymize_data.rake:50:16: C: [Corrected] Rails/WhereNot: Use where.not(user_id: nil) instead of manually constructing negated SQL in where.
Customer.where("user_id IS NOT NULL")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1483 files inspected, 26 offenses detected, 26 offenses corrected
114 lines
4.0 KiB
Ruby
114 lines
4.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class EnterpriseRelationship < ApplicationRecord
|
|
belongs_to :parent, class_name: 'Enterprise', touch: true
|
|
belongs_to :child, class_name: 'Enterprise', touch: true
|
|
has_many :permissions, class_name: 'EnterpriseRelationshipPermission', dependent: :destroy
|
|
|
|
validates :child_id, uniqueness: {
|
|
scope: :parent_id,
|
|
message: I18n.t('validation_msg_relationship_already_established')
|
|
}
|
|
|
|
before_destroy :revoke_all_child_variant_overrides
|
|
before_destroy :destroy_related_exchanges
|
|
after_save :update_permissions_of_child_variant_overrides
|
|
|
|
scope :with_enterprises, -> {
|
|
joins("
|
|
LEFT JOIN enterprises AS parent_enterprises
|
|
ON parent_enterprises.id = enterprise_relationships.parent_id").
|
|
joins("
|
|
LEFT JOIN enterprises AS child_enterprises
|
|
ON child_enterprises.id = enterprise_relationships.child_id")
|
|
}
|
|
|
|
scope :involving_enterprises, ->(enterprises) {
|
|
where('parent_id IN (?) OR child_id IN (?)', enterprises.select(&:id), enterprises.select(&:id))
|
|
}
|
|
|
|
scope :permitting, ->(enterprise_ids) { where('child_id IN (?)', enterprise_ids) }
|
|
scope :permitted_by, ->(enterprise_ids) { where('parent_id IN (?)', enterprise_ids) }
|
|
|
|
scope :with_permission, ->(permission) {
|
|
joins(:permissions).
|
|
where('enterprise_relationship_permissions.name = ?', permission)
|
|
}
|
|
|
|
scope :by_name, -> { with_enterprises.order('child_enterprises.name, parent_enterprises.name') }
|
|
|
|
# Load an array of the relatives of each enterprise (ie. any enterprise related to it in
|
|
# either direction). This array is split into distributors and producers, and has the format:
|
|
# {enterprise_id => {distributors: [id, ...], producers: [id, ...]} }
|
|
def self.relatives(activated_only = false)
|
|
relationships = EnterpriseRelationship.includes(:child, :parent)
|
|
relatives = {}
|
|
|
|
Enterprise.is_primary_producer.pluck(:id).each do |enterprise_id|
|
|
relatives[enterprise_id] ||= { distributors: Set.new, producers: Set.new }
|
|
relatives[enterprise_id][:producers] << enterprise_id
|
|
end
|
|
Enterprise.is_distributor.pluck(:id).each do |enterprise_id|
|
|
relatives[enterprise_id] ||= { distributors: Set.new, producers: Set.new }
|
|
relatives[enterprise_id][:distributors] << enterprise_id
|
|
end
|
|
|
|
relationships.each do |r|
|
|
relatives[r.parent_id] ||= { distributors: Set.new, producers: Set.new }
|
|
relatives[r.child_id] ||= { distributors: Set.new, producers: Set.new }
|
|
|
|
if !activated_only || r.child.activated?
|
|
relatives[r.parent_id][:producers] << r.child_id if r.child.is_primary_producer
|
|
relatives[r.parent_id][:distributors] << r.child_id if r.child.is_distributor
|
|
end
|
|
|
|
if !activated_only || r.parent.activated?
|
|
relatives[r.child_id][:producers] << r.parent_id if r.parent.is_primary_producer
|
|
relatives[r.child_id][:distributors] << r.parent_id if r.parent.is_distributor
|
|
end
|
|
end
|
|
|
|
relatives
|
|
end
|
|
|
|
def permissions_list=(perms)
|
|
if perms.nil?
|
|
permissions.destroy_all
|
|
else
|
|
permissions.where.not(name: perms).destroy_all
|
|
perms.map { |name| permissions.find_or_initialize_by name: name }
|
|
end
|
|
end
|
|
|
|
def has_permission?(name)
|
|
permissions.reload.map(&:name).map(&:to_sym).include? name.to_sym
|
|
end
|
|
|
|
private
|
|
|
|
def update_permissions_of_child_variant_overrides
|
|
if has_permission?(:create_variant_overrides)
|
|
allow_all_child_variant_overrides
|
|
else
|
|
revoke_all_child_variant_overrides
|
|
end
|
|
end
|
|
|
|
def allow_all_child_variant_overrides
|
|
child_variant_overrides.update_all(permission_revoked_at: nil)
|
|
end
|
|
|
|
def revoke_all_child_variant_overrides
|
|
child_variant_overrides.update_all(permission_revoked_at: Time.zone.now)
|
|
end
|
|
|
|
def destroy_related_exchanges
|
|
Exchange.where(sender: parent, receiver: child, incoming: true).destroy_all
|
|
end
|
|
|
|
def child_variant_overrides
|
|
VariantOverride.unscoped.for_hubs(child)
|
|
.joins(variant: :product).where("spree_products.supplier_id IN (?)", parent)
|
|
end
|
|
end
|