mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +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
145 lines
4.0 KiB
Ruby
145 lines
4.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Spree
|
|
class Zone < ApplicationRecord
|
|
has_many :zone_members, dependent: :destroy, class_name: "Spree::ZoneMember", inverse_of: :zone
|
|
has_many :tax_rates, dependent: :destroy, inverse_of: :zone
|
|
has_and_belongs_to_many :shipping_methods, join_table: 'spree_shipping_methods_zones'
|
|
|
|
validates :name, presence: true, uniqueness: true
|
|
after_save :remove_defunct_members
|
|
after_save :remove_previous_default
|
|
|
|
alias :members :zone_members
|
|
accepts_nested_attributes_for :zone_members, allow_destroy: true,
|
|
reject_if: proc { |a| a['zoneable_id'].blank? }
|
|
|
|
def kind
|
|
return unless members.any? && members.none? { |member| member.try(:zoneable_type).nil? }
|
|
|
|
members.last.zoneable_type.demodulize.underscore
|
|
end
|
|
|
|
def kind=(value)
|
|
# do nothing - just here to satisfy the form
|
|
end
|
|
|
|
def contains_address?(address)
|
|
return false unless address
|
|
|
|
members.any? do |zone_member|
|
|
case zone_member.zoneable_type
|
|
when 'Spree::Country'
|
|
zone_member.zoneable_id == address.country_id
|
|
when 'Spree::State'
|
|
zone_member.zoneable_id == address.state_id
|
|
else
|
|
false
|
|
end
|
|
end
|
|
end
|
|
|
|
# Returns the matching zone with the highest priority zone type (State, Country, Zone.)
|
|
# Returns nil in the case of no matches.
|
|
def self.match(address)
|
|
return unless matches = includes(:zone_members).
|
|
order('zone_members_count', 'created_at').
|
|
select { |zone| zone.contains_address? address }
|
|
|
|
['state', 'country'].each do |zone_kind|
|
|
if match = matches.detect { |zone| zone_kind == zone.kind }
|
|
return match
|
|
end
|
|
end
|
|
matches.first
|
|
end
|
|
|
|
# convenience method for returning the countries contained within a zone
|
|
def countries
|
|
@countries ||= case kind
|
|
when 'country' then zoneables
|
|
when 'state' then zoneables.collect(&:country)
|
|
end.flatten.compact.uniq
|
|
end
|
|
|
|
def <=>(other)
|
|
name <=> other.name
|
|
end
|
|
|
|
# All zoneables belonging to the zone members. Will be a collection of either
|
|
# countries or states depending on the zone type.
|
|
def zoneables
|
|
members.collect(&:zoneable)
|
|
end
|
|
|
|
def country_ids
|
|
if kind == 'country'
|
|
members.collect(&:zoneable_id)
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
def state_ids
|
|
if kind == 'state'
|
|
members.collect(&:zoneable_id)
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
def country_ids=(ids)
|
|
zone_members.destroy_all
|
|
ids.compact_blank.map do |id|
|
|
member = ZoneMember.new
|
|
member.zoneable_type = 'Spree::Country'
|
|
member.zoneable_id = id
|
|
members << member
|
|
end
|
|
end
|
|
|
|
def state_ids=(ids)
|
|
zone_members.destroy_all
|
|
ids.compact_blank.map do |id|
|
|
member = ZoneMember.new
|
|
member.zoneable_type = 'Spree::State'
|
|
member.zoneable_id = id
|
|
members << member
|
|
end
|
|
end
|
|
|
|
def self.default_tax
|
|
find_by(default_tax: true)
|
|
end
|
|
|
|
# Indicates whether the specified zone falls entirely within the zone performing
|
|
# the check.
|
|
def contains?(target)
|
|
return false if kind == 'state' && target.kind == 'country'
|
|
return false if zone_members.empty? || target.zone_members.empty?
|
|
|
|
if kind == target.kind
|
|
if target.zoneables.any? { |target_zoneable| zoneables.exclude?(target_zoneable) }
|
|
return false
|
|
end
|
|
elsif target.zoneables.any? { |target_state| zoneables.exclude?(target_state.country) }
|
|
return false
|
|
end
|
|
true
|
|
end
|
|
|
|
private
|
|
|
|
def remove_defunct_members
|
|
return unless zone_members.any?
|
|
|
|
zone_members.where('zoneable_id IS NULL OR zoneable_type != ?',
|
|
"Spree::#{kind.capitalize}").destroy_all
|
|
end
|
|
|
|
def remove_previous_default
|
|
Spree::Zone.where.not(id:).update_all(default_tax: false) if default_tax
|
|
end
|
|
end
|
|
end
|