# File lib/money/money/allocation.rb, line 15
    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