Module: HalApi::Representer::Embeds::ClassMethods

Defined in:
lib/hal_api/representer/embeds.rb

Overview

Possible values for zoom option in the embed representer definition

  • false - will be zoomed only if in the root doc and in the zoom param

  • true - zoomed in root doc if no zoom_param, or if included in zoom_param

  • always - zoomed no matter what is in zoom param, and even if in embed

Instance Method Summary collapse

Instance Method Details

#embed(name, options = {}) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/hal_api/representer/embeds.rb', line 54

def embed(name, options={})
  options[:embedded] = true
  options[:writeable] = false
  options[:if] ||= ->(_a) { id } unless options[:zoom] == :always

  if options[:paged]
    opts = {
      no_curies: true,
      item_class: options.delete(:item_class),
      url: options.delete(:url),
      item_decorator: options.delete(:item_decorator),
      per: options.delete(:per) || Kaminari.config.default_per_page
    }
    options[:getter] ||= ->(*) do
      # set # per page based on default, option value integer, or special :all
      per = opts.delete(:per)
      per = self.send(name).count if per == :all
      PagedCollection.new(self.send(name).page(1).per(per), nil, opts.merge({parent: self}))
    end
    options[:decorator] = Api::PagedCollectionRepresenter
  end

  property(name, options)
end

#embeds(name, options = {}) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/hal_api/representer/embeds.rb', line 79

def embeds(name, options={})
  options[:embedded] = true
  options[:writeable] = false
  options[:if] ||= ->(_a) { id } unless options[:zoom] == :always

  collection(name, options)
end