diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 162031889b..56581c88a1 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -84,9 +84,9 @@ class Enterprise < ActiveRecord::Base after_rollback :restore_permalink - scope :by_name, order('name') - scope :visible, where(visible: true) - scope :activated, where("sells != 'unspecified'") + scope :by_name, -> { order('name') } + scope :visible, -> { where(visible: true) } + scope :activated, -> { where("sells != 'unspecified'") } scope :ready_for_checkout, lambda { joins(:shipping_methods). joins(:payment_methods). @@ -103,9 +103,9 @@ class Enterprise < ActiveRecord::Base where("TRUE") end } - scope :is_primary_producer, where(is_primary_producer: true) - scope :is_distributor, where('sells != ?', 'none') - scope :is_hub, where(sells: 'any') + scope :is_primary_producer, -> { where(is_primary_producer: true) } + scope :is_distributor, -> { where('sells != ?', 'none') } + scope :is_hub, -> { where(sells: 'any') } scope :supplying_variant_in, lambda { |variants| joins(supplied_products: :variants_including_master). where('spree_variants.id IN (?)', variants). @@ -113,21 +113,21 @@ class Enterprise < ActiveRecord::Base } scope :with_order_cycles_as_supplier_outer, - joins("LEFT OUTER JOIN exchanges ON (exchanges.sender_id = enterprises.id AND exchanges.incoming = 't')"). - joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') + -> { joins("LEFT OUTER JOIN exchanges ON (exchanges.sender_id = enterprises.id AND exchanges.incoming = 't')"). + joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') } scope :with_order_cycles_as_distributor_outer, - joins("LEFT OUTER JOIN exchanges ON (exchanges.receiver_id = enterprises.id AND exchanges.incoming = 'f')"). - joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') + -> { joins("LEFT OUTER JOIN exchanges ON (exchanges.receiver_id = enterprises.id AND exchanges.incoming = 'f')"). + joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') } scope :with_order_cycles_outer, - joins("LEFT OUTER JOIN exchanges ON (exchanges.receiver_id = enterprises.id OR exchanges.sender_id = enterprises.id)"). - joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') + -> { joins("LEFT OUTER JOIN exchanges ON (exchanges.receiver_id = enterprises.id OR exchanges.sender_id = enterprises.id)"). + joins('LEFT OUTER JOIN order_cycles ON (order_cycles.id = exchanges.order_cycle_id)') } scope :with_order_cycles_and_exchange_variants_outer, - with_order_cycles_as_distributor_outer. + -> { with_order_cycles_as_distributor_outer. joins('LEFT OUTER JOIN exchange_variants ON (exchange_variants.exchange_id = exchanges.id)'). - joins('LEFT OUTER JOIN spree_variants ON (spree_variants.id = exchange_variants.variant_id)') + joins('LEFT OUTER JOIN spree_variants ON (spree_variants.id = exchange_variants.variant_id)') } scope :distributors_with_active_order_cycles, lambda { with_order_cycles_as_distributor_outer. diff --git a/app/models/enterprise_group.rb b/app/models/enterprise_group.rb index f3f70a2a6c..75478f8c84 100644 --- a/app/models/enterprise_group.rb +++ b/app/models/enterprise_group.rb @@ -47,8 +47,8 @@ class EnterpriseGroup < ActiveRecord::Base supports_s3 :logo supports_s3 :promo_image - scope :by_position, order('position ASC') - scope :on_front_page, where(on_front_page: true) + scope :by_position, -> { order('position ASC') } + scope :on_front_page, -> { where(on_front_page: true) } scope :managed_by, lambda { |user| if user.has_spree_role?('admin') scoped diff --git a/app/models/enterprise_relationship.rb b/app/models/enterprise_relationship.rb index f64acfe7ae..f018a84e29 100644 --- a/app/models/enterprise_relationship.rb +++ b/app/models/enterprise_relationship.rb @@ -9,9 +9,10 @@ class EnterpriseRelationship < ActiveRecord::Base after_save :update_permissions_of_child_variant_overrides before_destroy :revoke_all_child_variant_overrides - scope :with_enterprises, - joins('LEFT JOIN enterprises AS parent_enterprises ON parent_enterprises.id = enterprise_relationships.parent_id'). + 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, enterprises) @@ -25,7 +26,7 @@ class EnterpriseRelationship < ActiveRecord::Base where('enterprise_relationship_permissions.name = ?', permission) } - scope :by_name, with_enterprises.order('child_enterprises.name, parent_enterprises.name') + 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: diff --git a/app/models/enterprise_role.rb b/app/models/enterprise_role.rb index 6f8c6c6ef5..3709f7e004 100644 --- a/app/models/enterprise_role.rb +++ b/app/models/enterprise_role.rb @@ -5,5 +5,5 @@ class EnterpriseRole < ActiveRecord::Base validates :user_id, :enterprise_id, presence: true validates :enterprise_id, uniqueness: { scope: :user_id, message: I18n.t(:enterprise_role_uniqueness_error) } - scope :by_user_email, joins(:user).order('spree_users.email ASC') + scope :by_user_email, -> { joins(:user).order('spree_users.email ASC') } end diff --git a/app/models/exchange.rb b/app/models/exchange.rb index fec02642e3..bfba731ef5 100644 --- a/app/models/exchange.rb +++ b/app/models/exchange.rb @@ -20,8 +20,8 @@ class Exchange < ActiveRecord::Base accepts_nested_attributes_for :variants scope :in_order_cycle, lambda { |order_cycle| where(order_cycle_id: order_cycle) } - scope :incoming, where(incoming: true) - scope :outgoing, where(incoming: false) + scope :incoming, -> { where(incoming: true) } + scope :outgoing, -> { where(incoming: false) } scope :from_enterprise, lambda { |enterprise| where(sender_id: enterprise) } scope :to_enterprise, lambda { |enterprise| where(receiver_id: enterprise) } scope :from_enterprises, lambda { |enterprises| where('exchanges.sender_id IN (?)', enterprises) } @@ -31,15 +31,17 @@ class Exchange < ActiveRecord::Base scope :with_variant, lambda { |variant| joins(:exchange_variants).where('exchange_variants.variant_id = ?', variant) } scope :with_any_variant, lambda { |variants| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', variants).select('DISTINCT exchanges.*') } scope :with_product, lambda { |product| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', product.variants_including_master) } - scope :by_enterprise_name, joins('INNER JOIN enterprises AS sender ON (sender.id = exchanges.sender_id)'). + scope :by_enterprise_name, -> { joins('INNER JOIN enterprises AS sender ON (sender.id = exchanges.sender_id)'). joins('INNER JOIN enterprises AS receiver ON (receiver.id = exchanges.receiver_id)'). - order("CASE WHEN exchanges.incoming='t' THEN sender.name ELSE receiver.name END") + order("CASE WHEN exchanges.incoming='t' THEN sender.name ELSE receiver.name END") } # Exchanges on order cycles that are dated and are upcoming or open are cached - scope :cachable, outgoing. + scope :cachable, -> { + outgoing. joins(:order_cycle). merge(OrderCycle.dated). merge(OrderCycle.not_closed) + } scope :managed_by, lambda { |user| if user.has_spree_role?('admin') diff --git a/app/models/inventory_item.rb b/app/models/inventory_item.rb index 8479f6a1a9..e7aa9dccc0 100644 --- a/app/models/inventory_item.rb +++ b/app/models/inventory_item.rb @@ -11,8 +11,8 @@ class InventoryItem < ActiveRecord::Base validates :variant_id, presence: true validates :visible, inclusion: { in: [true, false], message: I18n.t(:inventory_item_visibility_error) } - scope :visible, where(visible: true) - scope :hidden, where(visible: false) + scope :visible, -> { where(visible: true) } + scope :hidden, -> { where(visible: false) } after_save :refresh_products_cache diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index 3f665b86fd..707bdae56a 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -33,8 +33,8 @@ class OrderCycle < ActiveRecord::Base scope :upcoming, lambda { where('order_cycles.orders_open_at > ?', Time.zone.now) } scope :not_closed, lambda { where('order_cycles.orders_close_at > ? OR order_cycles.orders_close_at IS NULL', Time.zone.now) } scope :closed, lambda { where('order_cycles.orders_close_at < ?', Time.zone.now).order("order_cycles.orders_close_at DESC") } - scope :undated, where('order_cycles.orders_open_at IS NULL OR orders_close_at IS NULL') - scope :dated, where('orders_open_at IS NOT NULL AND orders_close_at IS NOT NULL') + scope :undated, -> { where('order_cycles.orders_open_at IS NULL OR orders_close_at IS NULL') } + scope :dated, -> { where('orders_open_at IS NOT NULL AND orders_close_at IS NOT NULL') } scope :soonest_closing, lambda { active.order('order_cycles.orders_close_at ASC') } # TODO This method returns all the closed orders. So maybe we can replace it with :recently_closed. @@ -42,7 +42,7 @@ class OrderCycle < ActiveRecord::Base scope :soonest_opening, lambda { upcoming.order('order_cycles.orders_open_at ASC') } - scope :by_name, order('name') + scope :by_name, -> { order('name') } scope :with_distributor, lambda { |distributor| joins(:exchanges).merge(Exchange.outgoing).merge(Exchange.to_enterprise(distributor)) diff --git a/app/models/spree/adjustment_decorator.rb b/app/models/spree/adjustment_decorator.rb index 23790219e9..862eef84ef 100644 --- a/app/models/spree/adjustment_decorator.rb +++ b/app/models/spree/adjustment_decorator.rb @@ -10,13 +10,13 @@ module Spree has_one :metadata, class_name: 'AdjustmentMetadata' belongs_to :tax_rate, foreign_key: 'originator_id', conditions: "spree_adjustments.originator_type = 'Spree::TaxRate'" - scope :enterprise_fee, where(originator_type: 'EnterpriseFee') - scope :admin, where(source_type: nil, originator_type: nil) - scope :included_tax, where(originator_type: 'Spree::TaxRate', adjustable_type: 'Spree::LineItem') + scope :enterprise_fee, -> { where(originator_type: 'EnterpriseFee') } + scope :admin, -> { where(source_type: nil, originator_type: nil) } + scope :included_tax, -> { where(originator_type: 'Spree::TaxRate', adjustable_type: 'Spree::LineItem') } - scope :with_tax, where('spree_adjustments.included_tax > 0') - scope :without_tax, where('spree_adjustments.included_tax = 0') - scope :payment_fee, where(originator_type: 'Spree::PaymentMethod') + scope :with_tax, -> { where('spree_adjustments.included_tax > 0') } + scope :without_tax, -> { where('spree_adjustments.included_tax = 0') } + scope :payment_fee, -> { where(originator_type: 'Spree::PaymentMethod') } attr_accessible :included_tax diff --git a/app/models/spree/line_item_decorator.rb b/app/models/spree/line_item_decorator.rb index c0eb6b7d36..19c6bf0e15 100644 --- a/app/models/spree/line_item_decorator.rb +++ b/app/models/spree/line_item_decorator.rb @@ -36,8 +36,10 @@ Spree::LineItem.class_eval do } # Find line items that are from order sorted by variant name and unit value - scope :sorted_by_name_and_unit_value, joins(variant: :product). + scope :sorted_by_name_and_unit_value, -> { + joins(variant: :product). reorder('lower(spree_products.name) asc, lower(spree_variants.display_name) asc, spree_variants.unit_value asc') + } scope :from_order_cycle, lambda { |order_cycle| joins(order: :order_cycle). @@ -53,13 +55,17 @@ Spree::LineItem.class_eval do where('spree_products.supplier_id IN (?)', enterprises) } - scope :with_tax, joins(:adjustments). + scope :with_tax, -> { + joins(:adjustments). where('spree_adjustments.originator_type = ?', 'Spree::TaxRate'). select('DISTINCT spree_line_items.*') + } # Line items without a Spree::TaxRate-originated adjustment - scope :without_tax, joins("LEFT OUTER JOIN spree_adjustments ON (spree_adjustments.adjustable_id=spree_line_items.id AND spree_adjustments.adjustable_type = 'Spree::LineItem' AND spree_adjustments.originator_type='Spree::TaxRate')"). + scope :without_tax, -> { + joins("LEFT OUTER JOIN spree_adjustments ON (spree_adjustments.adjustable_id=spree_line_items.id AND spree_adjustments.adjustable_type = 'Spree::LineItem' AND spree_adjustments.originator_type='Spree::TaxRate')"). where('spree_adjustments.id IS NULL') + } def cap_quantity_at_stock! scoper.scope(variant) diff --git a/app/models/spree/payment_method_decorator.rb b/app/models/spree/payment_method_decorator.rb index 69fa1e1f88..f32944fdcb 100644 --- a/app/models/spree/payment_method_decorator.rb +++ b/app/models/spree/payment_method_decorator.rb @@ -35,9 +35,9 @@ Spree::PaymentMethod.class_eval do where('enterprises.id = ?', distributor) } - scope :for_subscriptions, where(type: Subscription::ALLOWED_PAYMENT_METHOD_TYPES) + scope :for_subscriptions, -> { where(type: Subscription::ALLOWED_PAYMENT_METHOD_TYPES) } - scope :by_name, order('spree_payment_methods.name ASC') + scope :by_name, -> { order('spree_payment_methods.name ASC') } # Rewrite Spree's ruby-land class method as a scope scope :available, lambda { |display_on = 'both'| diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index c7a41e5698..5f6014fee6 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -41,12 +41,16 @@ Spree::Product.class_eval do after_save :refresh_products_cache # -- Joins - scope :with_order_cycles_outer, joins('LEFT OUTER JOIN spree_variants AS o_spree_variants ON (o_spree_variants.product_id = spree_products.id)'). + scope :with_order_cycles_outer, -> { + joins('LEFT OUTER JOIN spree_variants AS o_spree_variants ON (o_spree_variants.product_id = spree_products.id)'). joins('LEFT OUTER JOIN exchange_variants AS o_exchange_variants ON (o_exchange_variants.variant_id = o_spree_variants.id)'). joins('LEFT OUTER JOIN exchanges AS o_exchanges ON (o_exchanges.id = o_exchange_variants.exchange_id)'). joins('LEFT OUTER JOIN order_cycles AS o_order_cycles ON (o_order_cycles.id = o_exchanges.order_cycle_id)') + } - scope :with_order_cycles_inner, joins(variants_including_master: { exchanges: :order_cycle }) + scope :with_order_cycles_inner, -> { + joins(variants_including_master: { exchanges: :order_cycle }) + } scope :visible_for, lambda { |enterprise| joins('LEFT OUTER JOIN spree_variants AS o_spree_variants ON (o_spree_variants.product_id = spree_products.id)'). @@ -93,8 +97,8 @@ Spree::Product.class_eval do where('order_cycles.id IS NOT NULL') } - scope :by_producer, joins(:supplier).order('enterprises.name') - scope :by_name, order('name') + scope :by_producer, -> { joins(:supplier).order('enterprises.name') } + scope :by_name, -> { order('name') } scope :managed_by, lambda { |user| if user.has_spree_role?('admin') diff --git a/app/models/spree/shipping_method_decorator.rb b/app/models/spree/shipping_method_decorator.rb index c16e784daf..555e1e24c1 100644 --- a/app/models/spree/shipping_method_decorator.rb +++ b/app/models/spree/shipping_method_decorator.rb @@ -29,7 +29,7 @@ Spree::ShippingMethod.class_eval do where('enterprises.id = ?', distributor) } - scope :by_name, order('spree_shipping_methods.name ASC') + scope :by_name, -> { order('spree_shipping_methods.name ASC') } # Return the services (pickup, delivery) that different distributors provide, in the format: # {distributor_id => {pickup: true, delivery: false}, ...} diff --git a/app/models/spree/variant_decorator.rb b/app/models/spree/variant_decorator.rb index 44fcea1277..4c6691b65f 100644 --- a/app/models/spree/variant_decorator.rb +++ b/app/models/spree/variant_decorator.rb @@ -33,9 +33,9 @@ Spree::Variant.class_eval do after_save :refresh_products_cache around_destroy :destruction - scope :with_order_cycles_inner, joins(exchanges: :order_cycle) + scope :with_order_cycles_inner, -> { joins(exchanges: :order_cycle) } - scope :not_master, where(is_master: false) + scope :not_master, -> { where(is_master: false) } scope :in_order_cycle, lambda { |order_cycle| with_order_cycles_inner. merge(Exchange.outgoing). diff --git a/db/migrate/20130919010513_ensure_shipping_methods_have_distributors.rb b/db/migrate/20130919010513_ensure_shipping_methods_have_distributors.rb index e233227242..09017609eb 100644 --- a/db/migrate/20130919010513_ensure_shipping_methods_have_distributors.rb +++ b/db/migrate/20130919010513_ensure_shipping_methods_have_distributors.rb @@ -1,6 +1,6 @@ class EnsureShippingMethodsHaveDistributors < ActiveRecord::Migration class Enterprise < ActiveRecord::Base - scope :is_distributor, where(is_distributor: true) + scope :is_distributor, -> { where(is_distributor: true) } end def up