Module: Leadlight::Hyperlinkable

Defined in:
lib/leadlight/hyperlinkable.rb

Defined Under Namespace

Classes: LinkSet

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(representation) ⇒ Object



11
12
13
14
15
16
# File 'lib/leadlight/hyperlinkable.rb', line 11

def self.extended(representation)
  super(representation)
  representation.add_link(representation.__location__,
                          'self', 'self', rev: 'self')
  representation.add_links_from_headers
end

Instance Method Details



30
31
32
33
34
# File 'lib/leadlight/hyperlinkable.rb', line 30

def add_link(url, rel=nil, title=rel, options={})
  link = Link.new(__service__, url, rel, title, options)
  define_link_helper(rel) if rel
  links << link
end


42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/leadlight/hyperlinkable.rb', line 42

def add_link_set(rel=nil, helper_name=rel)
  default_link_attributes = {
    rel: rel
  }
  yield.each do |link_attributes|
    attributes = default_link_attributes.merge(link_attributes)
    define_link_set_helper(rel, helper_name) if helper_name
    links << Link.new(__service__, 
                      attributes[:href], 
                      attributes[:rel], 
                      attributes[:title], 
                      attributes)
  end
end


36
37
38
39
40
# File 'lib/leadlight/hyperlinkable.rb', line 36

def add_link_template(template, rel=nil, title=rel, options={})
  link = LinkTemplate.new(__service__, template, rel, title, options)
  define_link_helper(rel) if rel
  links << link
end


57
58
59
60
61
62
63
# File 'lib/leadlight/hyperlinkable.rb', line 57

def add_links_from_headers
  raw_link_header = __response__.env[:response_headers]['Link']
  link_header = LinkHeader.parse(raw_link_header.to_s)
  link_header.links.each do |link|
    add_link(link.href, link['rel'], link['rel'])
  end
end


26
27
28
# File 'lib/leadlight/hyperlinkable.rb', line 26

def link(key, &fallback)
  result = links.at(key, &fallback)
end


18
19
20
21
22
23
24
# File 'lib/leadlight/hyperlinkable.rb', line 18

def links(key=:none)
  if :none == key
    @__links__ ||= LinkSet.new
  else
    links[key]
  end
end