Class: LinkHeader::Link
- Inherits:
-
Object
- Object
- LinkHeader::Link
- 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
-
#attr_pairs ⇒ Object
readonly
The link’s attributes, an array of key-value pairs.
-
#href ⇒ Object
readonly
The link’s URI string.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Access #attrs by key.
-
#attrs ⇒ Object
Lazily convert the attribute list to a Hash.
-
#initialize(href, attr_pairs) ⇒ Link
constructor
Initialize a Link from an href and attribute list.
-
#to_a ⇒ Object
Convert to a JSON-friendly Array.
-
#to_html ⇒ Object
Bonus! Render as an HTML link element.
-
#to_s ⇒ Object
Convert to string representation as per the link header spec.
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_pairs ⇒ Object (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 |
#href ⇒ Object (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 |
#attrs ⇒ Object
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_a ⇒ Object
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_html ⇒ Object
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_s ⇒ Object
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 |