Class: LinkHeader::Link

Inherits:
Object
  • Object
show all
Defined in:
lib/govdelivery/tms/link_header.rb

Overview

Represents a link - an href and a list of attributes (key value pairs)

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"]]).to_s
=> '<http://example.com/foo>; rel="self"'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(href, attr_pairs) ⇒ Link

Initialize a Link from an href and attribute list

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"]]).to_s
=> '<http://example.com/foo>; rel="self"'


167
168
169
# File 'lib/govdelivery/tms/link_header.rb', line 167

def initialize(href, attr_pairs)
  @href, @attr_pairs = href, attr_pairs
end

Instance Attribute Details

#attr_pairsObject (readonly)

The link’s attributes, an array of key-value pairs

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"], ["rel", "canonical"]]).attr_pairs
=> [["rel", "self"], ["rel", "canonical"]]


159
160
161
# File 'lib/govdelivery/tms/link_header.rb', line 159

def attr_pairs
  @attr_pairs
end

#hrefObject (readonly)

The link’s URI string

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"]]).href
=> 'http://example.com/foo>'


151
152
153
# File 'lib/govdelivery/tms/link_header.rb', line 151

def href
  @href
end

Instance Method Details

#[](key) ⇒ Object

Access #attrs by key



186
187
188
# File 'lib/govdelivery/tms/link_header.rb', line 186

def [](key)
  attrs[key]
end

#attrsObject

Lazily convert the attribute list to a Hash

Beware repeated attribute names (it’s safer to use #attr_pairs if this is risk):

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"], ["rel", "canonical"]]).attrs
=> {"rel" =>"canonical"}


179
180
181
# File 'lib/govdelivery/tms/link_header.rb', line 179

def attrs
  @attrs ||= Hash[*attr_pairs.flatten]
end

#to_aObject

Convert to a JSON-friendly Array

LinkHeader::Link.new("http://example.com/foo", [["rel", "self"], ["rel", "canonical"]]).to_a
=> ["http://example.com/foo", [["rel", "self"], ["rel", "canonical"]]]


196
197
198
# File 'lib/govdelivery/tms/link_header.rb', line 196

def to_a
  [href, attr_pairs]
end

#to_htmlObject

Bonus! Render as an HTML link element

LinkHeader::Link.new(["http://example.com/foo", [["rel", "self"]]]).to_html
#=> '<link href="http://example.com/foo" rel="self">'


218
219
220
# File 'lib/govdelivery/tms/link_header.rb', line 218

def to_html
  ([%(<link href="#{href}")] + attr_pairs.map { |k, v| "#{k}=\"#{v.gsub(/"/, '\"')}\"" }).join(' ')
end

#to_sObject

Convert to string representation as per the link header spec. This includes backspace-escaping doublequote characters in quoted attribute values.

Convert to string representation as per the link header spec

LinkHeader::Link.new(["http://example.com/foo", [["rel", "self"]]]).to_s
#=> '<http://example.com/foo>; rel="self"'


209
210
211
# File 'lib/govdelivery/tms/link_header.rb', line 209

def to_s
  (["<#{href}>"] + attr_pairs.map { |k, v| "#{k}=\"#{v.gsub(/"/, '\"')}\"" }).join('; ')
end