47colborne/cloud-sesame

View on GitHub
lib/cloud_sesame/domain/client_module/caching/rails_cache.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'ostruct'
require 'digest'

module CloudSesame
  module Domain
    module ClientModule
      module Caching
        class RailsCache < Base

          def initialize(client, searchable)
            ensure_environment_exists
            super
          end

          def fetch(params)
            Rails.cache.fetch(hexdigest(params)) do
              results = search params
              OpenStruct.new(
                status: results.status,
                hits: results.hits,
                facets: results.facets
              )
            end
          end

          private

          def hexdigest(params)
            searchable_params = params.merge(searchable: @searchable)
            Digest::MD5.hexdigest Marshal.dump(searchable_params)
          end

          def ensure_environment_exists
            unless RailsCache.const_defined?(:Rails)
              raise Error::Caching, "Rails environment cannot be found"
            end
          end

        end
      end
    end
  end
end