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