Sha256: bd9aa3dc6405a7ee7035fac419e1f8215047faca2e90814b246f3a281f030b79

Contents?: true

Size: 1.35 KB

Versions: 10

Compression:

Stored size: 1.35 KB

Contents

Dir[File.join(File.dirname(__FILE__), 'argument_mapper', '*.rb')].each do |path|
  require path
end

module Rake
  module Funnel
    module Support
      class Mapper
        include ArgumentMapper
        include InstantiateSymbol
        instantiate Styles

        def initialize(style = :Default)
          raise "You cannot use the 'nil' mapper style. Available mappers are: #{available.inspect}" if style.nil?

          @style = create(style)
        end

        def map(args = {})
          model = (args || {}).map { |switch, value|
            value = [value] unless value.is_a?(Array)

            values = value.map do |val|
              get_values(val)
            end

            Switch.new(switch, values)
          }.flatten

          @style
            .generate_from(model)
            .map { |args| args.map { |arg| camel_case_symbols(arg) } }
            .map(&:join)
        end

        private
        def get_values(value)
          if value.is_a?(Enumerable)
            pairs = value.map { |k, v|
              KeyValuePair.new(k, v)
            }

            return Array.new(pairs) if value.is_a?(Array)
            pairs
          else
            Value.new(value)
          end
        end

        def camel_case_symbols(value)
          return value unless value.is_a?(Symbol)
          value.camelize
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rake-funnel-0.11.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.10.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.9.1.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.9.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.8.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.7.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.6.1.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.6.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.5.0.pre lib/rake/funnel/support/mapper.rb
rake-funnel-0.4.0.pre lib/rake/funnel/support/mapper.rb