Class: Allocate
Instance Attribute Summary collapse
-
#amount ⇒ Object
Returns the value of attribute amount.
-
#ratios ⇒ Object
Returns the value of attribute ratios.
Class Method Summary collapse
Instance Method Summary collapse
- #compensate_last_slice(rates) ⇒ Object
- #divided ⇒ Object
-
#initialize(amount = 0, ratios = []) ⇒ Allocate
constructor
A new instance of Allocate.
Constructor Details
#initialize(amount = 0, ratios = []) ⇒ Allocate
Returns a new instance of Allocate.
5 6 7 8 |
# File 'lib/guerrilla_patch/allocate.rb', line 5 def initialize(amount = 0 , ratios = []) @amount = amount @ratios = ratios end |
Instance Attribute Details
#amount ⇒ Object
Returns the value of attribute amount.
2 3 4 |
# File 'lib/guerrilla_patch/allocate.rb', line 2 def amount @amount end |
#ratios ⇒ Object
Returns the value of attribute ratios.
3 4 5 |
# File 'lib/guerrilla_patch/allocate.rb', line 3 def ratios @ratios end |
Class Method Details
Instance Method Details
#compensate_last_slice(rates) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/guerrilla_patch/allocate.rb', line 16 def compensate_last_slice(rates) rates.tap do |rates| max_rate = rates.max.abs rates[-1] = (rates[-1] + (amount - rates.sum_me)).round(2) if rates[-1].abs > (2 * max_rate.abs ) raise "Number is too small to be allocated on that number of slices(#@amount on #{@ratios.size} slices)." end end end |
#divided ⇒ Object
10 11 12 13 14 |
# File 'lib/guerrilla_patch/allocate.rb', line 10 def divided divided_ratios = @ratios.map { |ratio| ratio.to_d/ratios.sum_me.to_d } rates = divided_ratios.map { |ratio| ((@amount * ratio).round(2)) } compensate_last_slice(rates) end |