diff --git a/app/models/exchange.rb b/app/models/exchange.rb index ce698c1cd0..90db51c36f 100644 --- a/app/models/exchange.rb +++ b/app/models/exchange.rb @@ -20,6 +20,7 @@ class Exchange < ActiveRecord::Base scope :from_enterprises, lambda { |enterprises| where('exchanges.sender_id IN (?)', enterprises) } scope :to_enterprises, lambda { |enterprises| where('exchanges.receiver_id IN (?)', enterprises) } scope :with_variant, lambda { |variant| joins(:exchange_variants).where('exchange_variants.variant_id = ?', variant) } + scope :any_variant, lambda { |variants| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', variants) } scope :with_product, lambda { |product| joins(:exchange_variants).where('exchange_variants.variant_id IN (?)', product.variants_including_master) } def clone!(new_order_cycle) diff --git a/spec/models/exchange_spec.rb b/spec/models/exchange_spec.rb index df26d20ac0..7095dd03f9 100644 --- a/spec/models/exchange_spec.rb +++ b/spec/models/exchange_spec.rb @@ -111,6 +111,15 @@ describe Exchange do Exchange.with_variant(v).should == [ex] end + it "finds exchanges with any of a number of variants" do + v1 = create(:variant) + v2 = create(:variant) + ex = create(:exchange) + ex.variants << v1 + + Exchange.any_variant([v1, v2]).should == [ex] + end + it "finds exchanges with a particular product's master variant" do p = create(:simple_product) ex = create(:exchange)