Sha256: b442e6c2be61d6b392eb9d2eb1cec120c73937f294ee93e181c21cd7821eab82

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

module Leftovers
  module ProcessorBuilders
    module EachAction
      class << self
        def each_or_self(value, &block)
          case value
          when nil then nil
          when Array then build(value.map(&block))
          else build([yield(value)])
          end
        end

        def build(processors)
          processors = compact(processors)

          case processors.length
          # :nocov:
          when 0 then raise Leftovers::UnexpectedCase, "Unhandled value #{processors.inspect}"
          # :nocov:
          when 1 then processors.first
          else ::Leftovers::ValueProcessors::Each.new(processors)
          end
        end

        private

        def flatten(value)
          case value
          when ::Leftovers::ValueProcessors::Each
            value.processors.flat_map { |v| flatten(v) }
          when Array
            value.flat_map { |v| flatten(v) }
          else
            value
          end
        end

        def compact(processors)
          return processors if processors.length <= 1

          processors = flatten(processors)
          processors.compact!

          processors
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
leftovers-0.8.0 lib/leftovers/processor_builders/each_action.rb