Module: HalApi::Representer::Embeds::HalApiRailsRenderPipeline

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

Instance Method Summary collapse

Instance Method Details

#embed_zoomed?(name, zoom_def = nil, zoom_param = nil) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/hal_api/representer/embeds.rb', line 47

def embed_zoomed?(name, zoom_def = nil, zoom_param = nil)
  # if the embed in the representer definition has `zoom: :always` defined
  # always embed it, even if it is in another embed
  # (this is really meant for collections where embedded items must be included)
  return true if zoom_def == :always

  # passing nil explicitly overwrites defaults in signature,
  # so we default to nil and fix in the method body
  zoom_def = true if zoom_def.nil?

  # if there is no zoom specified in the request params (options)
  # then embed based on the zoom option in the representer definition

  # if there is a zoom specified in the request params (options)
  # then do not zoom when this name is not in the request
  zoom_param.nil? ? zoom_def : zoom_param.include?(name)
end

#render_functionsObject



19
20
21
22
23
24
25
26
27
# File 'lib/hal_api/representer/embeds.rb', line 19

def render_functions
  funcs = super
  f = ->(input, options) do
    if suppress_embed?(input, options)
      return Representable::Pipeline::Stop
    end
  end
  [f] + funcs
end

#skip_property?(binding, private_options) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/hal_api/representer/embeds.rb', line 15

def skip_property?(binding, private_options)
  super(binding, private_options) || suppress_embed?(binding, private_options)
end

#suppress_embed?(input, options) ⇒ Boolean

embed if zoomed

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/hal_api/representer/embeds.rb', line 30

def suppress_embed?(input, options)
  binding = options[:binding]

  # guard against non-hal representers
  return false unless binding[:as].present?

  name = binding.evaluate_option(:as, input, options)

  embedded = binding[:embedded]

  return false if !embedded

  ## check if it should be zoomed, suppress if not
  user_zooms = options[:options].try(:[], :user_options).try(:[], :zoom)
  !embed_zoomed?(name, binding[:zoom], user_zooms)
end