# in extension lib/ranged_hash.rb class RangedHash def initialize(hash) @ranges = hash end def [](key) @ranges.each do |range, value| return value if range.include?(key) end nil end end # in config/environment.rb SHIPPING_RATES = RangedHash.new( (0.00..14.99) => {'std' => 9.95, 'pry' => 15.90, 'sat' => 19.95}, (15.00..33.99) => {'std' => 12.95, 'pry' => 18.90, 'sat' => 22.95}, (34.00..38.99) => {'std' => 13.95, 'pry' => 19.90, 'sat' => 23.95}, (39.00..45.99) => {'std' => 14.95, 'pry' => 20.90, 'sat' => 24.95}, (46.00..55.99) => {'std' => 15.95, 'pry' => 21.90, 'sat' => 25.95}, (56.00..58.99) => {'std' => 16.95, 'pry' => 22.90, 'sat' => 26.95}, (59.00..68.99) => {'std' => 18.95, 'pry' => 24.90, 'sat' => 28.95}, (69.00..84.99) => {'std' => 20.95, 'pry' => 26.90, 'sat' => 30.95}, (85.00..10000) => {'std' => 37.95, 'pry' => 43.90, 'sat' => 47.95} ) #Use like this ship_method = 'std' price = 12.15 shipping_rate = SHIPPING_RATE[price][ship_method] # returns 9.95 ship_method = 'pry' price = 47.32 shipping_rate = SHIPPING_RATE[price][ship_method] # returns 21.90