Sha256: 4149ca4675349026d59cb5e094a90a4995604e2336e599d9d7b68b0857cf5540

Contents?: true

Size: 1.07 KB

Versions: 4

Compression:

Stored size: 1.07 KB

Contents

module Spree
  module Scopes
    # This module is extended by ProductScope
    module 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.pluck(: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
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
spree_core-1.3.5 lib/spree/scopes/dynamic.rb
spree_core-1.3.4 lib/spree/scopes/dynamic.rb
spree_core-1.3.3 lib/spree/scopes/dynamic.rb
spree_core-1.3.2 lib/spree/scopes/dynamic.rb