Module: Roar::JSON::HAL

Defined in:
lib/roar/json/hal.rb

Overview

Including the JSON::HAL module in your representer will render and parse documents following the HAL specification: stateless.co/hal_specification.html Links will be embedded using the _links key, nested resources with the _embedded key.

Embedded resources can be specified when calling #property or +collection using the :embedded => true option.

Link arrays can be defined using ::links.

CURIEs are specified with the - surprise - ::curie class method.

Example:

module OrderRepresenter
  include Roar::JSON::HAL

  property :id
  collection :items, :class => Item, :extend => ItemRepresenter, :embedded => true

  link :self do
    "http://orders/#{id}"
  end

  links :self do
    [{:lang => "en", :href => "http://en.hit"},
     {:lang => "de", :href => "http://de.hit"}]
  end

  curies do
    [{:name => :doc,
      :href => "//docs/{rel}",
      :templated => true}
    ]
  end
end

Renders to

"{\"id\":1,\"_embedded\":{\"items\":[{\"value\":\"Beer\",\"_links\":{\"self\":{\"href\":\"http://items/Beer\"}}}]},\"_links\":{\"self\":{\"href\":\"http://orders/1\"}}}"

Defined Under Namespace

Modules: Links, LinksReader, Resources

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object


47
48
49
50
51
52
53
54
# File 'lib/roar/json/hal.rb', line 47

def self.included(base)
  base.class_eval do
    include Roar::JSON
    include Links       # overwrites #links_definition_options.
    include Resources
    include LinksReader # gives us Decorator#links => {self=>< >}
  end
end