def self.generate(amount, parts, whole_amounts = true)
parts = parts.is_a?(Numeric) ? Array.new(parts, 1) : parts.dup
raise ArgumentError, 'need at least one party' if parts.empty?
result = []
remaining_amount = amount
until parts.empty? do
parts_sum = parts.inject(0, :+)
part = parts.pop
current_split = 0
if parts_sum > 0
current_split = remaining_amount * part / parts_sum
current_split = current_split.truncate if whole_amounts
end
result.unshift current_split
remaining_amount -= current_split
end
result
end