class Shamu::JsonApi::Presenter
Presenters are responsible for projecting an {Entities::Entity} or PORO to a well-formatted JSON API {ResourceBuilder builder} response.
{Presenter} delegates all of the {ResourceBuilder} methods for convenient syntax.
“` class UserPresenter < ApplicationPresenter
def present identifier :user, resource.id attributes name: resource.name, email: resource.email relationship( :address ) do |rel| rel.identifier :address, resource.address_id rel.link :related, user_address_url( resource, resource.address_id ) end end
end “`
Attributes
builder[R]
resource[R]
Public Class Methods
new( resource, builder )
click to toggle source
@param [Object] resource to presenter. @param [ResourceBuilder] builder used to build the JSON API response.
# File lib/shamu/json_api/presenter.rb, line 29 def initialize( resource, builder ) @resource = resource @builder = builder end
Public Instance Methods
present()
click to toggle source
Serialize the `resource` to the `builder`.
@return [void]
# File lib/shamu/json_api/presenter.rb, line 37 def present fail NotImplementedError end
Private Instance Methods
attribute_value( value )
click to toggle source
Get a JSON API safe version of the value. @param [Object] value the value to be coerced. @return [Object]
# File lib/shamu/json_api/presenter.rb, line 60 def attribute_value( value ) case value when Date, DateTime then value.to_date.iso8601 when Time, ActiveSupport::TimeWithZone then value.iso8601 else value end end
resource_attributes( *names )
click to toggle source
Present all the named attributes of the {#resource}. @param [Array<Symbol>] names of the resource to present.
# File lib/shamu/json_api/presenter.rb, line 51 def resource_attributes( *names ) names.map do |name| attribute name, attribute_value( resource.send( name ) ) end end