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
links[R]
An array of Link objects
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
find_link(*attr_pairs)
click to toggle source
Find a member link that has the given attributes
# File lib/link_header.rb, line 108 def find_link(*attr_pairs) links.detect do |link| !attr_pairs.detect do |pair| !link.attr_pairs.include?(pair) end end 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