Sha256: 1db9b16e766937651833f194dc1ff27ba9f0a2898017e2948e797ca27725a715

Contents?: true

Size: 969 Bytes

Versions: 29

Compression:

Stored size: 969 Bytes

Contents

# This module is extended by ProductScope
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

29 entries across 29 versions & 6 rubygems

Version Path
spree_core-0.70.7 lib/scopes/dynamic.rb
spree_core-0.70.6 lib/scopes/dynamic.rb
apispree_core-0.0.0 lib/scopes/dynamic.rb
My-Commerce_core-1.1.0 lib/scopes/dynamic.rb
My-Commerce_core-1.0.0 lib/scopes/dynamic.rb
MyCommerceapi-1.0.0 core/lib/scopes/dynamic.rb
MyCommerce-0.0.3 core/lib/scopes/dynamic.rb
rfcommerce_core-0.0.3 lib/scopes/dynamic.rb
spree_core-0.60.6 lib/scopes/dynamic.rb
spree_core-0.70.5 lib/scopes/dynamic.rb
spree_core-0.70.4 lib/scopes/dynamic.rb
spree_core-0.60.5 lib/scopes/dynamic.rb
spree_core-0.70.3 lib/scopes/dynamic.rb
spree_core-0.70.2 lib/scopes/dynamic.rb
spree_core-0.50.4 lib/scopes/dynamic.rb
spree_core-0.60.4 lib/scopes/dynamic.rb
spree_core-0.50.3 lib/scopes/dynamic.rb
spree_core-0.60.3 lib/scopes/dynamic.rb
spree_core-0.70.1 lib/scopes/dynamic.rb
spree_core-0.70.0 lib/scopes/dynamic.rb