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



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 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 = {}) ⇒ Object



103
104
105
106
107
108
109
# 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