Sha256: b87d30d2b1a1148f39166d2918466d8b7244e96efc414164c72c40a063f15300

Contents?: true

Size: 1.36 KB

Versions: 5

Compression:

Stored size: 1.36 KB

Contents

# frozen-string-literal: true

module Leftovers
  module MatcherBuilders
    module NodeHasPositionalArgument
      class << self
        def build(positions, value_matcher)
          if positions && !all_positions?(positions) && value_matcher
            build_has_positional_value_matcher(positions, value_matcher)
          elsif positions && !value_matcher
            build_has_position_matcher(positions)
          elsif value_matcher
            build_has_any_positional_value_matcher(value_matcher)
          end
        end

        private

        def all_positions?(positions)
          ::Leftovers.each_or_self(positions).include?('*')
        end

        def build_has_position_matcher(positions)
          position = 0 if all_positions?(positions)
          position ||= ::Leftovers.each_or_self(positions).min

          ::Leftovers::Matchers::NodeHasPositionalArgument.new(position)
        end

        def build_has_any_positional_value_matcher(value_matcher)
          ::Leftovers::Matchers::NodeHasAnyPositionalArgumentWithValue.new(value_matcher)
        end

        def build_has_positional_value_matcher(positions, value_matcher)
          ::Leftovers::MatcherBuilders::Or.each_or_self(positions) do |position|
            ::Leftovers::Matchers::NodeHasPositionalArgumentWithValue.new(position, value_matcher)
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
leftovers-0.11.1 lib/leftovers/matcher_builders/node_has_positional_argument.rb
leftovers-0.11.0 lib/leftovers/matcher_builders/node_has_positional_argument.rb
leftovers-0.10.0 lib/leftovers/matcher_builders/node_has_positional_argument.rb
leftovers-0.9.0 lib/leftovers/matcher_builders/node_has_positional_argument.rb
leftovers-0.8.0 lib/leftovers/matcher_builders/node_has_positional_argument.rb