class URITemplate::RFC6570::Tokenizer

@private

Attributes

source[R]

Public Class Methods

new(source, ops) click to toggle source
# File lib/uri_template/rfc6570.rb, line 210
def initialize(source, ops)
  @source = source
  @operators = ops
end

Public Instance Methods

each() { |operators[scanner| ... } click to toggle source
# File lib/uri_template/rfc6570.rb, line 215
def each
  scanner = StringScanner.new(@source)
  until scanner.eos?
    expression = scanner.scan(EXPRESSION)
    if expression
      vars = scanner[2].split(',').map{|name|
        match = VAR.match(name)
        # 1 = varname
        # 2 = explode
        # 3 = length
        [ match[1], match[2] == '*', match[3].to_i ]
      }
      yield @operators[scanner[1]].new(vars)
    else
      literal = scanner.scan(LITERAL)
      if literal
        yield(Literal.new(literal))
      else
        raise Invalid.new(@source,scanner.pos)
      end
    end
  end
end