Class: Leadlight::LinkTemplate

Inherits:
Link
  • Object
show all
Defined in:
lib/leadlight/link_template.rb

Constant Summary

Constants inherited from Link

Leadlight::Link::HTTP_METHODS

Instance Attribute Summary

Attributes inherited from Link

#aliases, #href, #rel, #rev, #service, #title

Instance Method Summary collapse

Methods inherited from Link

#follow, #initialize

Constructor Details

This class inherits a constructor from Leadlight::Link

Instance Method Details

#expand(args) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/leadlight/link_template.rb', line 18

def expand(args)
  mapping = args.last.is_a?(Hash) ? args.pop : {}
  mapping = mapping.inject({}) { |result, (k,v)| result.merge!(k.to_s => v) }
  mapping = href_template.variables.inject(mapping) do |mapping, var|
    mapping.merge!(var => args.shift) unless args.empty?
    mapping
  end
  extra_keys = (mapping.keys.map(&:to_s) - href_template.variables)
  extra_params = extra_keys.inject({}) do |params, key|
    params[key] = mapping.delete(key)
    params
  end
  assert_all_variables_mapped(href_template, mapping)
  args.push extra_params unless extra_params.empty?
  href_template.expand(mapping).to_s
end

#href_templateObject



7
8
9
# File 'lib/leadlight/link_template.rb', line 7

def href_template
  @href_template ||= Addressable::Template.new(href.to_s)
end