Sha256: 218d3f3c754fc9253a6a43e74270a55d0c05f26fa8fd7501ae726dd13a293433

Contents?: true

Size: 917 Bytes

Versions: 22

Compression:

Stored size: 917 Bytes

Contents

# frozen_string_literal: true

module Mutant
  class Expression
    class Parser
      include Concord.new(:types)

      # Apply expression parsing
      #
      # @param [String] input
      #
      # @return [Either<String, Expression>]
      #   if expression is valid
      #
      # @return [nil]
      #   otherwise
      def apply(input)
        expressions = expressions(input)
        case expressions.length
        when 0
          Either::Left.new("Expression: #{input.inspect} is invalid")
        when 1
          Either::Right.new(expressions.first)
        else
          Either::Left.new("Expression: #{input.inspect} is ambiguous")
        end
      end

    private

      def expressions(input)
        types.each_with_object([]) do |type, aggregate|
          expression = type.try_parse(input) and aggregate << expression
        end
      end

    end # Parser
  end # Expression
end # Mutant

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
mutant-0.10.17 lib/mutant/expression/parser.rb
mutant-0.10.16 lib/mutant/expression/parser.rb
mutant-0.10.15 lib/mutant/expression/parser.rb
mutant-0.10.14 lib/mutant/expression/parser.rb
mutant-0.10.13 lib/mutant/expression/parser.rb
mutant-0.10.12 lib/mutant/expression/parser.rb
mutant-0.10.11 lib/mutant/expression/parser.rb
mutant-0.10.10 lib/mutant/expression/parser.rb
mutant-0.10.9 lib/mutant/expression/parser.rb
mutant-0.10.8 lib/mutant/expression/parser.rb
mutant-0.10.7 lib/mutant/expression/parser.rb
mutant-0.10.6 lib/mutant/expression/parser.rb
mutant-0.10.5 lib/mutant/expression/parser.rb
mutant-0.10.4 lib/mutant/expression/parser.rb
mutant-0.10.1 lib/mutant/expression/parser.rb
mutant-0.10.0 lib/mutant/expression/parser.rb
mutant-0.9.14 lib/mutant/expression/parser.rb
mutant-0.9.13 lib/mutant/expression/parser.rb
mutant-0.9.12 lib/mutant/expression/parser.rb
mutant-0.9.11 lib/mutant/expression/parser.rb