class ContentfulMiddleman::Tools::PreviewProxy
Constants
- CACHE_MAPPINGS
Public Class Methods
days(amount)
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 19 def self.days(amount) amount end
hours(amount)
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 23 def self.hours(amount) amount / 24.0 end
instance(space: '', access_token: '', api_url: 'preview.contentful.com', tries: 3, expires_in: hours(2))
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 7 def self.instance(space: '', access_token: '', api_url: 'preview.contentful.com', tries: 3, expires_in: hours(2)) possible_instance = @@instances.detect { |i| i[:space] == space && i[:access_token] == access_token } if possible_instance.nil? preview_client = PreviewProxy.new(space: space, access_token: access_token, api_url: api_url, tries: tries, expires_in: expires_in) @@instances << {space: space, access_token: access_token, instance: preview_client} else preview_client = possible_instance[:instance] end preview_client end
minutes(amount)
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 27 def self.minutes(amount) hours(amount) / 60.0 end
new(space: '', access_token: '', api_url: 'preview.contentful.com', tries: 3, expires_in: self.class.hours(2))
click to toggle source
Calls superclass method
# File lib/contentful_middleman/tools/preview_proxy.rb, line 50 def initialize(space: '', access_token: '', api_url: 'preview.contentful.com', tries: 3, expires_in: self.class.hours(2)) super( space: space, access_token: access_token, dynamic_entries: :auto, preview: true, api_url: api_url ) @cache_tries = tries @expires_in = expires_in clear_cache end
seconds(amount)
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 31 def self.seconds(amount) minutes(amount) / 60.0 end
Public Instance Methods
asset(id, query = {})
click to toggle source
Calls superclass method
# File lib/contentful_middleman/tools/preview_proxy.rb, line 77 def asset(id, query = {}) cache(:asset, ->(q, a_id) { super(a_id, q) }, query, id) end
assets(query = {})
click to toggle source
Calls superclass method
# File lib/contentful_middleman/tools/preview_proxy.rb, line 73 def assets(query = {}) cache(:assets, ->(q, _) { super(q) }, query) end
clear_cache()
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 81 def clear_cache @cached_entry_collection = {} @cached_asset_collection = {} @cached_entries = {} @cached_assets = {} end
entries(query = {})
click to toggle source
Calls superclass method
# File lib/contentful_middleman/tools/preview_proxy.rb, line 65 def entries(query = {}) cache(:entries, ->(q, _) { super(q) }, query) end
entry(id, query = {})
click to toggle source
Calls superclass method
# File lib/contentful_middleman/tools/preview_proxy.rb, line 69 def entry(id, query = {}) cache(:entry, ->(q, e_id) { super(e_id, q) }, query, id) end
Private Instance Methods
cache(name, super_call, query = {}, id = '')
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 91 def cache(name, super_call, query = {}, id = '') mapping = CACHE_MAPPINGS[name] query_copy = Marshal.load(Marshal.dump(query)) if should_fetch_from_api?(name, query: query_copy, id: id) new_resources = super_call.call(query, id) instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)] ||= {} instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)][:tries] = 0 instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)][:expires] = DateTime.now + @expires_in instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)][:data] = new_resources return new_resources end instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)][:tries] += 1 instance_variable_get("@#{mapping[:cache]}")[cache_key(name, query_copy, id)][:data] end
cache_key(name, query = {}, id = '')
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 109 def cache_key(name, query = {}, id = '') Marshal.dump(collection?(name) ? query : query.merge(cache_id: id)) end
collection?(name)
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 113 def collection?(name) name.to_s.end_with?('s') end
should_fetch_from_api?(name, query: {}, id: '')
click to toggle source
# File lib/contentful_middleman/tools/preview_proxy.rb, line 117 def should_fetch_from_api?(name, query: {}, id: '') mapping = CACHE_MAPPINGS[name] cache = instance_variable_get("@#{mapping[:cache]}") key = cache_key(name, query, id) return true unless cache.key?(key) return true if cache[key][:tries] >= @cache_tries return true if cache[key][:expires] <= DateTime.now false end