Sha256: 42e3609eabfac31d5cdb7028612a803bff09ffdabc026106b267d6cf6e1b945a

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

module Leftovers
  module ProcessorBuilders
    module Argument
      class << self
        def build(patterns, processor) # rubocop:disable Metrics/MethodLength
          Each.each_or_self(patterns) do |pat|
            case pat
            when ::Integer then Processors::PositionalArgument.new(pat, processor)
            when '*' then Processors::EachPositionalArgument.new(processor)
            when '**' then Processors::EachKeywordArgument.new(processor)
            when /\A(\d+)\+\z/ then Processors::EachPositionalArgumentFrom.new(pat.to_i, processor)
            when ::String then KeywordArgument.build(pat, processor)
            when ::Hash then build_hash(processor, pat)
              # :nocov:
            else raise UnexpectedCase, "Unhandled value #{pat.inspect}"
              # :nocov:
            end
          end
        end

        private

        def build_hash(then_processor, pat)
          Processors::KeywordArgument.new(
            MatcherBuilders::NodePairKey.build(MatcherBuilders::Node.build_from_hash(**pat)),
            then_processor
          )
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
leftovers-0.12.2 lib/leftovers/processor_builders/argument.rb
leftovers-0.12.1 lib/leftovers/processor_builders/argument.rb
leftovers-0.12.0 lib/leftovers/processor_builders/argument.rb
leftovers-0.11.2 lib/leftovers/processor_builders/argument.rb