module HalApi::Representer::Embeds::ClassMethods

Possible values for zoom option in the embed representer definition

Public Instance Methods

embed(name, options={}) click to toggle source
# File lib/hal_api/representer/embeds.rb, line 72
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)
    }
    getter_per = options.delete(:per) || Kaminari.config.default_per_page
    options[:getter] ||= ->(*) do
      cnt = send(name).count
      per = getter_per == :all ? cnt : getter_per
      if cnt == 0
        items = send(name).page(1).per(Kaminari.config.default_per_page)
      elsif cnt <= per
        items = Kaminari.paginate_array(send(name)).page(1).per(per)
      else
        items = send(name).page(1).per(per)
      end
      HalApi::PagedCollection.new(items, nil, opts.merge(parent: self))
    end
    options[:decorator] = HalApi::PagedCollection.representer
  end

  property(name, options)
end
embeds(name, options={}) click to toggle source
# File lib/hal_api/representer/embeds.rb, line 103
def embeds(name, options={})
  options[:embedded] = true
  options[:writeable] = false
  options[:if] ||= ->(_a) { id } unless options[:zoom] == :always

  collection(name, options)
end