class LinkHeader

Represents an HTTP link header of the form described in the draft spec tools.ietf.org/id/draft-nottingham-http-link-header-06.txt. It is simply a list of LinkHeader::Link objects and some conversion functions.

Constants

VERSION

Attributes

Public Class Methods

new(links=[]) click to toggle source

Initialize from a collection of either LinkHeader::Link objects or data from which Link objects can be created.

From a list of LinkHeader::Link objects:

LinkHeader.new([
  LinkHeader::Link.new("http://example.com/foo", [["rel", "self"]]),
  LinkHeader::Link.new("http://example.com/",    [["rel", "up"]])])

From the equivalent JSON-friendly raw data:

LinkHeader.new([
  ["http://example.com/foo", [["rel", "self"]]],
  ["http://example.com/",    [["rel", "up"]]]]).to_s

See also ::parse

# File lib/link_header.rb, line 29
def initialize(links=[])
  if links
    @links = links.map{|l| l.kind_of?(Link) ? l : Link.new(*l)}
  else
    @links = []
  end
end
parse(link_header) click to toggle source

Parse a link header, returning a new LinkHeader object

LinkHeader.parse('<http://example.com/foo>; rel="self", <http://example.com/>; rel = "up"').to_a
#=> [["http://example.com/foo", [["rel", "self"]]],
     ["http://example.com/", [["rel", "up"]]]]
# File lib/link_header.rb, line 85
def self.parse(link_header)
  return new unless link_header
  
  scanner = StringScanner.new(link_header)
  links = []
  while scanner.scan(HREF)
    href = scanner[1]
    attrs = []
    while scanner.scan(ATTR)
      attr_name, token, quoted = scanner[1], scanner[3], scanner[4]
      attrs.push([attr_name, token || quoted.gsub(/\"/, '"')])
      break unless scanner.scan(SEMI)
    end
    links.push(Link.new(href, attrs))
    break unless scanner.scan(COMMA)
  end

  new(links)
end

Public Instance Methods

<<(link) click to toggle source
# File lib/link_header.rb, line 37
def <<(link)
  link = link.kind_of?(Link) ? link : Link.new(*link)
  @links << link
end
to_a() click to toggle source

Convert to a JSON-friendly array

LinkHeader.parse('<http://example.com/foo>; rel="self", <http://example.com/>; rel = "up"').to_a
#=> [["http://example.com/foo", [["rel", "self"]]],
     ["http://example.com/", [["rel", "up"]]]]
# File lib/link_header.rb, line 49
def to_a
  links.map{|l| l.to_a}
end
to_html(separator="\n") click to toggle source

Render as a list of HTML link elements

# File lib/link_header.rb, line 119
def to_html(separator="\n")
  links.map{|link| link.to_html}.join(separator)
end
to_s() click to toggle source

Convert to string representation as per the link header spec

LinkHeader.new([
  ["http://example.com/foo", [["rel", "self"]]],
  ["http://example.com/",    [["rel", "up"]]]]).to_s
#=> '<http://example.com/foo>; rel="self", <http://example.com/>; rel = "up"'
# File lib/link_header.rb, line 61
def to_s
  links.join(', ')
end