Module: CacheCrispies::Controller

Extended by:
ActiveSupport::Concern
Defined in:
lib/cache_crispies/controller.rb

Overview

A Rails concern designed to be used in Rails controllers to provide access to the #cache_render method

Constant Summary collapse

OJ_MODE =

The serialization mode that should be used with the oj gem

:rails

Instance Method Summary collapse

Instance Method Details

#cache_render(serializer, cacheable, options = {}) ⇒ void

This method returns an undefined value.

Renders the provided cacheable object to JSON using the provided serializer

Parameters:

  • serializer (CacheCrispies::Base)

    a class inheriting from CacheCrispies::Base

  • cacheable (Object)

    can be any object. But is typically a Rails model inheriting from ActiveRecord::Base

  • options (Hash) (defaults to: {})

    any optional values from the serializer instance

Options Hash (options):



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cache_crispies/controller.rb', line 28

def cache_render(serializer, cacheable, options = {})
  plan = CacheCrispies::Plan.new(serializer, cacheable, options)

  if CacheCrispies.config.etags?
    response.weak_etag = plan.etag
  end

  serializer_json =
    if plan.collection?
      plan.cache do
        CacheCrispies::Collection.new(
          cacheable, serializer, options
        ).as_json
      end
    else
      plan.cache { serializer.new(cacheable, options).as_json }
    end

  render_hash = { json: Oj.dump(plan.wrap(serializer_json), mode: OJ_MODE) }
  render_hash[:status] = options[:status] if options.key?(:status)

  render render_hash
end