Sha256: b57ec7d36374cafdf7934c937dadaf35a9eb2d28b852590d6b870b1118b5f4d9

Contents?: true

Size: 492 Bytes

Versions: 2

Compression:

Stored size: 492 Bytes

Contents

# frozen_string_literal: true

module Farseer
  class Or
    include MapFactory

    def initialize(*parsers)
      @parsers = parsers.flatten
      freeze
    end

    def parse(input)
      case @parsers.length
      when 0 then Maybe.none
      when 1 then @parsers.first.parse(input)
      else parse_helper(input)
      end
    end

    def parse_helper(input)
      @parsers.reduce do |acc, parser|
        acc.parse(input).bind_none { parser.parse(input) }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
farseer-0.9.0 lib/farseer/or.rb
farseer-0.8.0 lib/farseer/or.rb