Sha256: 2ec64090bd0a7e20ee2c0116a94eb6d144efb583c6262a6e5f25686f1a062139

Contents?: true

Size: 1023 Bytes

Versions: 18

Compression:

Stored size: 1023 Bytes

Contents

module Scopes::Dynamic
  module_function

  # Sample dynamic scope generating from set of products
  # generates 0 or (2..scope_limit) scopes for prices, based
  # on number of products (uses Math.log, to guess number of scopes)
  def price_scopes_for(products, scope_limit=5)
    scopes = []

    # Price based scopes
    all_prices = products.map(&:price).sort
    ranges = [Math.log(products.length).floor, scope_limit].max
    if ranges >= 2
      l = all_prices.length / ranges
      scopes << ProductScope.new({
          :name => "master_price_lte",
          :arguments => [all_prices[l]]
        })
      (ranges - 2).times do |x|
        scopes << ProductScope.new({
            :name => "price_between",
            :arguments => [
              all_prices[l*(x+1)+1],
              all_prices[l*(x+2)]
            ]
          })
      end
      scopes << ProductScope.new({
          :name => "master_price_gte",
          :arguments => [all_prices[l*(ranges-1)+1]]
        })
    end

    scopes
  end

  
end

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
spree-0.11.4 lib/scopes/dynamic.rb
spree-0.11.3 lib/scopes/dynamic.rb
spree_core-0.30.2 lib/scopes/dynamic.rb
spree_core-0.40.4 lib/scopes/dynamic.rb
spree_core-0.40.3 lib/scopes/dynamic.rb
spree_core-0.40.2 lib/scopes/dynamic.rb
spree_core-0.40.1 lib/scopes/dynamic.rb
spree_core-0.40.0 lib/scopes/dynamic.rb
spree_core-0.30.1 lib/scopes/dynamic.rb
spree_core-0.30.0 lib/scopes/dynamic.rb
spree-0.11.2 lib/scopes/dynamic.rb
spree-0.11.1 lib/scopes/dynamic.rb
spree_core-0.30.0.beta1 lib/scopes/dynamic.rb
spree-0.11.0 lib/scopes/dynamic.rb
spree-0.10.2 lib/scopes/dynamic.rb
spree-0.10.1 lib/scopes/dynamic.rb
spree-0.10.0 lib/scopes/dynamic.rb
spree-0.10.0.beta lib/scopes/dynamic.rb