Sha256: 09f2905b53b95f245d4ddda762f30c085b713f9a1a82e862e0304d9f1b090987

Contents?: true

Size: 906 Bytes

Versions: 17

Compression:

Stored size: 906 Bytes

Contents

# frozen_string_literal: true

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

      # Parse expression
      #
      # @param [String] input
      #
      # @return [Either<String, Expression>]
      #   if expression is valid
      #
      # @return [nil]
      #   otherwise
      def call(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

17 entries across 17 versions & 1 rubygems

Version Path
mutant-0.12.0 lib/mutant/expression/parser.rb
mutant-0.11.34 lib/mutant/expression/parser.rb
mutant-0.11.33 lib/mutant/expression/parser.rb
mutant-0.11.32 lib/mutant/expression/parser.rb
mutant-0.11.31 lib/mutant/expression/parser.rb
mutant-0.11.30 lib/mutant/expression/parser.rb
mutant-0.11.29 lib/mutant/expression/parser.rb
mutant-0.11.28 lib/mutant/expression/parser.rb
mutant-0.11.27 lib/mutant/expression/parser.rb
mutant-0.11.26 lib/mutant/expression/parser.rb
mutant-0.11.25 lib/mutant/expression/parser.rb
mutant-0.11.24 lib/mutant/expression/parser.rb
mutant-0.11.23 lib/mutant/expression/parser.rb
mutant-0.11.22 lib/mutant/expression/parser.rb
mutant-0.11.21 lib/mutant/expression/parser.rb
mutant-0.11.20 lib/mutant/expression/parser.rb
mutant-0.11.19 lib/mutant/expression/parser.rb