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