class ERLE::Enum
Attributes
delimeter[RW]
terms[RW]
Public Class Methods
delimeter_regex()
click to toggle source
# File lib/erle/elements/enum.rb, line 20 def self.delimeter_regex @delimeter_regex ||= Regexp.new(Regexp.escape(delimeter)) end
new(elements)
click to toggle source
# File lib/erle/elements/enum.rb, line 12 def initialize(elements) @terms = elements.flatten(1) end
parse(parser)
click to toggle source
# File lib/erle/elements/enum.rb, line 28 def self.parse(parser) result = [] delim = false # fake it into looking for the first value closed = false parser.until_done do case when parser.scan(close) closed = true parser.raise_unexpected_token("unexpected '#{delimeter}' before '#{close.source}'") if delim break when parser.scan(delimeter_regex) parser.raise_unexpected_token("expected '#{delimeter}' or '#{close.source}'") if parser.match?(close) parser.raise_unexpected_token if delim delim = true when !Parser::UNPARSED.equal?(value = parser.parse_value) delim = false result << value else parser.raise_unexpected_token end end parser.raise_unexpected_token("expected '#{close.source}'") unless closed new(result) end
until_delimeter()
click to toggle source
# File lib/erle/elements/enum.rb, line 24 def self.until_delimeter @until_delimeter ||= Regexp.new("[^#{Regexp.escape(delimeter)}]*") end
Public Instance Methods
to_ruby()
click to toggle source
# File lib/erle/elements/enum.rb, line 16 def to_ruby @output ||= terms_to_ruby end
Protected Instance Methods
one_or_all(array)
click to toggle source
# File lib/erle/elements/enum.rb, line 64 def one_or_all(array) array.length > 1 ? array : array[0] end
terms_to_ruby()
click to toggle source
# File lib/erle/elements/enum.rb, line 58 def terms_to_ruby @terms_to_ruby ||= @terms.collect do |term| term.is_a?(Term) ? term.to_ruby : term end end