Class: Api::V6::BaseController

Inherits:
ActionController::API
  • Object
show all
Includes:
CustomPagy::ArrayExtra, ElasticApmContext, LogrageCustomLogger, Pagy::Backend, ResponseCacheConcern
Defined in:
app/controllers/api/v6/base_controller.rb

Instance Method Summary collapse

Methods included from LogrageCustomLogger

#append_info_to_payload

Methods included from ResponseCacheConcern

#my_response_cache

Instance Method Details

#identity_cache_memoization(&block) ⇒ Object



22
23
24
# File 'app/controllers/api/v6/base_controller.rb', line 22

def identity_cache_memoization(&block)
  IdentityCache.cache.with_memoization(&block)
end

#pagy_custom(collection, vars = {}) ⇒ Object



28
29
30
31
32
33
34
35
# File 'app/controllers/api/v6/base_controller.rb', line 28

def pagy_custom(collection, vars = {})
  page = params.fetch(:page, {})
  page_size = page.fetch(:size, 10)
  page_number = page.fetch(:number, 1)

  pagy = Pagy.new(count: collection.count(:all), page: page_number, items: page_size, **vars)
  [pagy, collection.offset(pagy.offset).limit(pagy.items)]
end

#set_options(pagy = {}, meta_options = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'app/controllers/api/v6/base_controller.rb', line 37

def set_options(pagy = {}, meta_options = {})
  options = {}
  if pagy.present?
    options[:meta] = {
      total: (pagy).fetch(:count),
      page: (pagy).fetch(:page),
      total_page: (pagy).fetch(:pages),
      default_page: 1,
    }.merge(meta_options)

    options[:links] = {
      self: (pagy).fetch(:page_url),
      first: (pagy).fetch(:first_url),
      next: (pagy).fetch(:next_url),
      prev: (pagy).fetch(:prev_url),
      last: (pagy).fetch(:last_url),
    }
  end
  options[:include] = params.fetch(:include, '').split(',') || []
  options[:fields] = params.fetch(:fields, {}).to_unsafe_hash.map do |rel, fields|
    { rel => fields.split(',').map(&:to_sym) }
  end.reduce({}, :merge) || {}

  fix_include_options(options)
end