module HalApi::Representer::Embeds::ClassMethods
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
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