Sha256: c6d393ce7bce1dc169e850c6625562aeb6b5f07a7e264a68af33f6d1bd3e621c

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

# frozen-string-literal: true

module Leftovers
  module MatcherBuilders
    module NodeValue
      class << self
        def build(pattern) # rubocop:disable Metrics/MethodLength
          ::Leftovers::MatcherBuilders::Or.each_or_self(pattern) do |pat|
            case pat
            when ::Integer, ::Float, true, false, nil
              ::Leftovers::Matchers::NodeScalarValue.new(pat)
            when ::String
              ::Leftovers::MatcherBuilders::NodeName.build(pat)
            when ::Hash
              build_from_hash(**pat)
            # :nocov:
            else raise
              # :nocov:
            end
          end
        end

        private

        def build_from_hash( # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
          at: nil, has_value: nil,
          match: nil, has_prefix: nil, has_suffix: nil,
          type: nil,
          has_receiver: nil,
          unless_arg: nil
        )
          matcher = ::Leftovers::MatcherBuilders::And.build([
            ::Leftovers::MatcherBuilders::NodeHasArgument.build(
              at: at, has_value: has_value
            ),
            ::Leftovers::MatcherBuilders::NodeName.build(
              match: match, has_prefix: has_prefix, has_suffix: has_suffix
            ),
            ::Leftovers::MatcherBuilders::NodeType.build(type),
            ::Leftovers::MatcherBuilders::NodeHasReceiver.build(has_receiver)
          ])

          ::Leftovers::MatcherBuilders::AndNot.build(
            matcher, ::Leftovers::MatcherBuilders::NodeValue.build(unless_arg)
          )
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
leftovers-0.7.0 lib/leftovers/matcher_builders/node_value.rb