Module: HalApi::Representer::CollectionPaging

Extended by:
ActiveSupport::Concern
Included in:
PagedCollectionRepresenter
Defined in:
lib/hal_api/representer/collection_paging.rb

Instance Method Summary collapse

Instance Method Details

#href_url_helper(options = {}) ⇒ Object

refactor to use single property, :url, that can be a method name, a string, or a lambda if it is a method name, execute against self - the representer - which has local url helpers methods if it is a sym/string, but self does not respond to it, then just use that string if it is a lambda, execute in the context against the represented.parent (if there is one) or represented



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

def href_url_helper(options={})
  if represented_url.nil?
    options = options.except(:format)
    result = url_for(options.merge(only_path: true)) rescue nil
    if represented.parent
      result ||= polymorphic_path([:api, represented.parent, represented.item_class], options) rescue nil
    end
    result ||= polymorphic_path([:api, represented.item_class], options) rescue nil
    return result
  end

  if represented_url.respond_to?(:call, true)
    instance_exec(options, &represented_url)
  elsif respond_to?(represented_url, true)
    send(represented_url, options)
  else
    represented_url.to_s
  end
end

#paramsObject



32
33
34
# File 'lib/hal_api/representer/collection_paging.rb', line 32

def params
  represented.params
end

#profile_url(represented) ⇒ Object



48
49
50
# File 'lib/hal_api/representer/collection_paging.rb', line 48

def profile_url(represented)
  model_uri(:collection, represented.item_class)
end

#represented_urlObject



76
77
78
# File 'lib/hal_api/representer/collection_paging.rb', line 76

def represented_url
  @represented_url ||= represented.try(:url)
end

#self_url(represented) ⇒ Object



36
37
38
# File 'lib/hal_api/representer/collection_paging.rb', line 36

def self_url(represented)
  href_url_helper(represented.params)
end

#vary_paramsObject



44
45
46
# File 'lib/hal_api/representer/collection_paging.rb', line 44

def vary_params
  %w(page per zoom filters sorts)
end

#vary_url(represented) ⇒ Object



40
41
42
# File 'lib/hal_api/representer/collection_paging.rb', line 40

def vary_url(represented)
  href_url_helper(represented.params.except(*vary_params))
end