mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-13 23:37:47 +00:00
Inspecting 1481 files
...........................................................................................................................................................................................................................................................C..C.CC........................................................................C...C..........C..C..................CC........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Offenses:
app/models/customer.rb:32:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before before_destroy.
before_validation :downcase_email
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/customer.rb:33:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before before_destroy.
before_validation :empty_code
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/customer.rb:34:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/customer.rb:49:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/customer.rb:49:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_create is supposed to appear before before_destroy.
before_create :associate_user
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:129:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_touch.
after_create :set_default_contact
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:130:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_touch.
after_create :relate_to_owners_enterprises
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:133:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_rollback is supposed to appear before after_touch.
after_rollback :restore_permalink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:134:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/enterprise_group.rb:18:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_save is supposed to appear before after_find.
after_save :unset_undefined_address_fields
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:18:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_save.
before_validation :sanitize_permalink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:19:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_find.
before_validation :sanitize_permalink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:23:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_save.
before_validation :sanitize_permalink
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:15:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_destroy is supposed to appear before after_save.
before_destroy :revoke_all_child_variant_overrides
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:16:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_destroy is supposed to appear before after_save.
before_destroy :destroy_related_exchanges
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:108:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
before_save :update_shipping_fees!, if: :complete?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:109:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
before_save :update_payment_fees!, if: :complete?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:30:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before before_create.
after_initialize :build_source
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:32:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_create.
after_initialize :build_source
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:33:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
after_create :invalidate_old_payments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:34:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_save.
after_initialize :build_source
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:35:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
after_create :invalidate_old_payments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:36:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_save.
after_initialize :build_source
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:46:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_create.
after_initialize :build_source
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:47:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/product.rb:87:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
after_create :ensure_standard_variant
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/return_authorization.rb:12:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
before_save :force_positive_amount
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/user.rb:49:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before before_destroy.
after_create :associate_customers, :associate_orders
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/user.rb:50:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:88:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
after_create :create_stock_items
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:89:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
after_create :set_position
^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:90:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:91:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:91:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: around_destroy is supposed to appear before after_save.
around_destroy :destruction
^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:92:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
1481 files inspected, 35 offenses detected, 35 offenses corrected
115 lines
4.0 KiB
Ruby
115 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 :parent, :child, presence: true
|
|
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('name NOT IN (?)', 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
|