Sha256: 761d83e6ef390dd0fbbb7ad05e84f0574187618d135434d5e184b4eeaa968501

Contents?: true

Size: 917 Bytes

Versions: 4

Compression:

Stored size: 917 Bytes

Contents

# frozen_string_literal: true

module Leftovers
  module MatcherBuilders
    module And
      class << self
        def build(matchers)
          matchers = flatten(matchers).compact
          case matchers.length
          when 0 then nil
          when 1 then matchers.first
          when 2 then ::Leftovers::Matchers::And.new(matchers.first, matchers[1])
          else ::Leftovers::Matchers::All.new(matchers.dup)
          end
        end

        private

        def flatten(value)
          case value
          when ::Leftovers::Matchers::And
            [*flatten(value.lhs), *flatten(value.rhs)]
          # :nocov: # not sure how to make this happen
          when ::Leftovers::Matchers::All
            flatten(value.matchers)
          # :nocov:
          when Array
            value.flat_map { |v| flatten(v) }
          else
            [value]
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

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