module Brainstem::ControllerMethods

ControllerMethods are intended to be included into controllers that will be handling requests for presented objects. The present method will pass through params, so that any allowed and requested includes, filters, sort orders will be applied to the presented data.

Public Instance Methods

brainstem_present(name, options = {}, &block) click to toggle source

Return a Ruby hash that contains models requested by the user's params and allowed by the name presenter's configuration.

Pass the returned hash to the render method to convert it into a useful format. For example:

render :json => brainstem_present("post"){ Post.where(:draft => false) }

@param (see PresenterCollection#presenting) @option options [String] :namespace (“none”) the namespace to be presented from @yield (see PresenterCollection#presenting) @return (see PresenterCollection#presenting)

# File lib/brainstem/controller_methods.rb, line 27
def brainstem_present(name, options = {}, &block)
  Brainstem.presenter_collection(options[:namespace]).presenting(name, options.reverse_merge(:params => params.to_unsafe_h), &block)
end
brainstem_present_object(objects, options = {}) click to toggle source

Similar to ControllerMethods#brainstem_present, but always returns all of the given objects, not just those that match any provided filters. @option options [String] :namespace (“none”) the namespace to be presented from @option options [Hash] :key_map a Hash from Class name to json key name, if desired.

e.g., map 'SystemWidgets' objects to the 'widgets' key in the JSON.  This is
only required if the name cannot be inferred.

@return (see PresenterCollection#presenting)

# File lib/brainstem/controller_methods.rb, line 38
def brainstem_present_object(objects, options = {})
  options.merge!(:params => params.to_unsafe_h, :apply_default_filters => false)

  if objects.is_a?(ActiveRecord::Relation) || objects.is_a?(Array)
    raise ActiveRecord::RecordNotFound if objects.empty?
    klass = objects.first.class
    ids = objects.map(&:id)
  else
    klass = objects.class
    ids = objects.id
    options[:params][:only] = ids.to_s
  end

  if options[:key_map]
    raise "brainstem_present_object no longer accepts a :key_map.  Use brainstem_key annotations on your presenters instead."
  end

  brainstem_present(klass, options) { klass.where(:id => ids) }
end
Also aliased as: brainstem_present_objects
brainstem_present_objects(objects, options = {})