class MtgSearchParser::ParseExecutor
Attributes
parser[R]
Public Class Methods
new()
click to toggle source
# File lib/mtg_search_parser.rb, line 48 def initialize @parser = MtgSearchParser::Parser.new end
Public Instance Methods
parse(tokens, max_count = Float::INFINITY)
click to toggle source
# File lib/mtg_search_parser.rb, line 52 def parse(tokens, max_count = Float::INFINITY) token_count = 0 parsed = [] while token = tokens.shift token_count += 1 case token when MtgSearchParser::Nodes::RightParen break when MtgSearchParser::Nodes::LeftParen parsed << parse(tokens) when MtgSearchParser::Nodes::Query parsed << parser.parse(token.contents) when MtgSearchParser::Nodes::Or parsed << MtgSearchParser::OrGroup.new([parsed.pop] + parse(tokens, 1)) when MtgSearchParser::Nodes::Not parsed << MtgSearchParser::NotGroup.new(parse(tokens, 1)) else parsed << token end if token_count == max_count break end end smart_flatten(parsed) end
Private Instance Methods
smart_flatten(array)
click to toggle source
# File lib/mtg_search_parser.rb, line 84 def smart_flatten(array) if array.length == 1 && array.first.is_a?(Array) array.first else array end end