Sha256: 63e55b92f31cf488701763d0a726b423e42645ae1a0e0de6950d4b718047076e

Contents?: true

Size: 867 Bytes

Versions: 4

Compression:

Stored size: 867 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 Matchers::And.new(matchers.first, matchers[1])
          else Matchers::All.new(matchers.dup)
          end
        end

        private

        def flatten(value)
          case value
          when Matchers::And
            [*flatten(value.lhs), *flatten(value.rhs)]
          # :nocov: # not sure how to make this happen
          when 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.12.2 lib/leftovers/matcher_builders/and.rb
leftovers-0.12.1 lib/leftovers/matcher_builders/and.rb
leftovers-0.12.0 lib/leftovers/matcher_builders/and.rb
leftovers-0.11.2 lib/leftovers/matcher_builders/and.rb