class Hypermicrodata::Serializer::Hal

Public Instance Methods

serialize() click to toggle source
# File lib/hypermicrodata/serializer/hal.rb, line 4
def serialize
  items = @document.items
  if items.length == 1
    hal_resource = item_to_resource(items.first, @location)
  else
    hal_resource = Halibut::Core::Resource.new(@location)
    items.each do |item|
      embedded_resource = item_to_resource(item)
      item.type.each do |type|
        hal_resource.add_embedded_resource(type, embedded_resource)
      end
    end
  end
  hal_resource.add_link('profile', @profile_path) if @profile_path
  hal_resource.to_hash
end

Private Instance Methods

item_to_resource(item, self_url = nil) click to toggle source
# File lib/hypermicrodata/serializer/hal.rb, line 22
def item_to_resource(item, self_url = nil)
  resource = Halibut::Core::Resource.new(self_url)
  item.properties.each do |name, same_name_properties|
    same_name_properties.each do |property|
      if property.item
        subresource = item_to_resource(property.item)
        resource.add_embedded_resource(name, subresource)
      else
        resource.set_property(name, property.value)
      end
    end
  end
  resource.add_link('self', item.id) if item.id
  Array(item.type).each do |type|
    resource.add_link('type', type)
  end
  item.links.each do |rel, same_rel_links|
    same_rel_links.each do |link|
      resource.add_link(rel, link.value)
    end
  end
  resource
end