Module: Flexirest::Caching::ClassMethods
- Defined in:
- lib/flexirest/caching.rb
Constant Summary collapse
- @@perform_caching =
true
Instance Method Summary collapse
- #_reset_caching! ⇒ Object
- #cache_store ⇒ Object
- #cache_store=(value) ⇒ Object
- #perform_caching(value = nil) ⇒ Object
- #perform_caching=(value) ⇒ Object
- #read_cached_response(request, quiet) ⇒ Object
- #write_cached_response(request, response, result, quiet) ⇒ Object
Instance Method Details
#_reset_caching! ⇒ Object
45 46 47 48 49 |
# File 'lib/flexirest/caching.rb', line 45 def _reset_caching! @@perform_caching = nil @perform_caching = nil @@cache_store = nil end |
#cache_store ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/flexirest/caching.rb', line 36 def cache_store rails_cache_store = if Object.const_defined?(:Rails) ::Rails.try(:cache) else nil end (@@cache_store rescue nil) || rails_cache_store end |
#cache_store=(value) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/flexirest/caching.rb', line 28 def cache_store=(value) @@cache_store = nil if value.nil? and return raise InvalidCacheStoreException.new("Cache store does not implement #read") unless value.respond_to?(:read) raise InvalidCacheStoreException.new("Cache store does not implement #write") unless value.respond_to?(:write) raise InvalidCacheStoreException.new("Cache store does not implement #fetch") unless value.respond_to?(:fetch) @@cache_store = value end |
#perform_caching(value = nil) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/flexirest/caching.rb', line 6 def perform_caching(value = nil) @perform_caching = nil unless instance_variable_defined?(:@perform_caching) if value.nil? value = if @perform_caching.nil? @@perform_caching else @perform_caching end if value.nil? && superclass.respond_to?(:perform_caching) value = superclass.perform_caching end value else @perform_caching = value end end |
#perform_caching=(value) ⇒ Object
23 24 25 26 |
# File 'lib/flexirest/caching.rb', line 23 def perform_caching=(value) @@perform_caching = value @perform_caching = value end |
#read_cached_response(request, quiet) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/flexirest/caching.rb', line 51 def read_cached_response(request, quiet) if cache_store && perform_caching && request.method[:method] == :get key = "#{request.class_name}:#{request.original_url}" Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Trying to read from cache" unless quiet value = cache_store.read(key) value = Marshal.load(value) rescue value end end |
#write_cached_response(request, response, result, quiet) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/flexirest/caching.rb', line 60 def write_cached_response(request, response, result, quiet) return if result.is_a? Symbol return unless perform_caching return unless !result.respond_to?(:_status) || [200, 304].include?(result._status) headers = response.response_headers headers.keys.select{|h| h.is_a? String}.each do |key| headers[key.downcase.to_sym] = headers[key] end if cache_store && (headers[:etag] || headers[:expires]) class_name = request.class_name key = "#{class_name}:#{request.original_url}" Flexirest::Logger.debug " \033[1;4;32m#{Flexirest.name}\033[0m #{key} - Writing to cache" unless quiet cached_response = CachedResponse.new(status:response.status, result:result, response_headers: headers, class_name:class_name) cached_response.etag = "#{headers[:etag]}" if headers[:etag] cached_response.expires = Time.parse(headers[:expires]) rescue nil if headers[:expires] if cached_response.etag.present? || cached_response.expires = {} if cached_response.expires.present? exp_in_seconds = cached_response.expires.utc - Time.now.utc return unless exp_in_seconds.positive? [:expires_in] = exp_in_seconds end cache_store.write(key, Marshal.dump(cached_response), ) end end end |