Sha256: af9aa807c61716f1235414d166bea5d301d4d833b0fe282a108def1f3b8e8db1

Contents?: true

Size: 1.2 KB

Versions: 4

Compression:

Stored size: 1.2 KB

Contents

module Paraduct
  class VariableConverter
    # @param variables [Hash{String => Array<String>}] Key: variable name, Value: values_pattern which you want to product
    # @return [Array<Hash{String => String}>]
    def self.product(variables)
      return [] if variables.empty?

      values_patterns = product_array(variables.values)

      product_variables = []
      values_patterns.each do |values_pattern|
        entry  = {}
        keys   = variables.keys.to_enum
        values = values_pattern.to_enum

        loop do
          key   = keys.next
          value = values.next
          entry[key] = value
        end

        product_variables << entry
      end
      product_variables
    end

    def self.reject(product_variables, exclude_variables)
      product_variables.inject([]) do |rejected_product_variables, variables|
        rejected_product_variables << variables unless exclude_variables.include?(variables)
        rejected_product_variables
      end
    end

    def self.product_array(array)
      first_values = array.shift
      if array.empty?
        first_values.product
      else
        first_values.product(*array)
      end
    end
    private_class_method :product_array
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
paraduct-0.0.2 lib/paraduct/variable_converter.rb
paraduct-0.0.1 lib/paraduct/variable_converter.rb
paraduct-0.0.1.beta17 lib/paraduct/variable_converter.rb
paraduct-0.0.1.beta16 lib/paraduct/variable_converter.rb