Sha256: 3f0789caea3641069726ce3797bfd1b4d68a7ff2cba954a10c7f0977b2701420

Contents?: true

Size: 1.35 KB

Versions: 4

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

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

        private

        def build_hash(then_processor, pat)
          ::Leftovers::Processors::KeywordArgument.new(
            ::Leftovers::MatcherBuilders::NodePairKey.build(
              ::Leftovers::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.11.1 lib/leftovers/processor_builders/argument.rb
leftovers-0.11.0 lib/leftovers/processor_builders/argument.rb
leftovers-0.10.0 lib/leftovers/processor_builders/argument.rb
leftovers-0.9.0 lib/leftovers/processor_builders/argument.rb