module Roar::JSON::HAL

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\"}}}"

Public Class Methods

included(base) click to toggle source
# 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