Module: Scopes::Dynamic
- Included in:
- ProductScope
- Defined in:
- lib/scopes/dynamic.rb
Overview
This module is extended by ProductScope
Class Method Summary collapse
-
.price_scopes_for(products, scope_limit = 5) ⇒ Object
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).
Class Method Details
.price_scopes_for(products, scope_limit = 5) ⇒ Object
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)
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/scopes/dynamic.rb', line 8 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 |