class URITemplate::RFC6570::Expression::Named

Public Instance Methods

expand_partial( vars ) click to toggle source
# File lib/uri_template/rfc6570/expression/named.rb, line 64
def expand_partial( vars )
  result = []
  rest   = []
  defined = false
  @variable_specs.each do | var, expand , max_length |
    if vars.key? var
      if Utils.def? vars[var]
        if result.any? && !self.class::SEPARATOR.empty?
          result.push( Literal.new(self.class::SEPARATOR) )
        end
        one = expand_one(var, vars[var], expand, max_length)
        result.push( Literal.new(Array(one).join(self.class::SEPARATOR)) )
      end
      if expand
        rest << [var, expand, max_length]
      else
        result.push( self.class::FOLLOW_UP.new([[var,expand,max_length]]) )
      end
    else
      rest.push( [var,expand,max_length] )
    end
  end
  if result.any?
    unless self.class::PREFIX.empty? || empty_literals?( result )
      result.unshift( Literal.new(self.class::PREFIX) )
    end
    result.push( self.class::BULK_FOLLOW_UP.new(rest) ) if rest.size != 0
    return result
  else
    return [ self ]
  end
end
to_r_source() click to toggle source
# File lib/uri_template/rfc6570/expression/named.rb, line 31
def to_r_source
  source = regex_builder
  source.group do
    source.escaped_prefix
    first = true
    @variable_specs.each do | var, expand , max_length |
      if expand
        source.capture do
          source.separated_list(first) do
            source.character_class('+')\
              .escaped_pair_connector\
              .character_class_with_comma(max_length)
          end
        end
      else
        source.group do
          source.escaped_separator unless first
          source << Regexp.escape(var)
          source.group do
            source.escaped_pair_connector
            source.capture do
              source.character_class_with_comma(max_length)
            end
            source << '|' unless self.class::PAIR_IF_EMPTY
          end
        end.length('?')
      end
      first = false
    end
  end.length('?')
  return source.join
end

Private Instance Methods

after_expand(name, splitted) click to toggle source
# File lib/uri_template/rfc6570/expression/named.rb, line 103
def after_expand(name, splitted)
  result = URITemplate::Utils.pair_array_to_hash2( splitted )
  if result.size == 1 && result[0][0] == name
    return result
  else
    return [ [ name , result ] ]
  end
end
extracted_nil() click to toggle source
# File lib/uri_template/rfc6570/expression/named.rb, line 99
def extracted_nil
  self.class::PAIR_IF_EMPTY ? nil : ""
end