lib/storyblok/client.rb in storyblok-2.0.8 vs lib/storyblok/client.rb in storyblok-2.1.0
- old
+ new
@@ -15,15 +15,15 @@
api_version: 1,
logger: false,
log_level: Logger::INFO,
version: 'draft',
component_resolver: ->(component, data) { '' },
- cache_version: Time.now.to_i,
cache: nil
}
attr_reader :configuration, :logger
+ attr_accessor :cache_version
# @param [Hash] given_configuration
# @option given_configuration [String] :token Required if oauth_token is not set
# @option given_configuration [String] :oauth_token Required if token is not set
# @option given_configuration [String] :api_url
@@ -31,10 +31,11 @@
# @option given_configuration [Number] :api_version
# @option given_configuration [false, ::Logger] :logger
# @option given_configuration [::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR] :log_level
def initialize(given_configuration = {})
@configuration = default_configuration.merge(given_configuration)
+ @cache_version = '0'
validate_configuration!
if configuration[:oauth_token]
@rest_client = RestClient::Resource.new(base_url, :headers => {
:authorization => configuration[:oauth_token]
@@ -60,11 +61,11 @@
#
# @param [Hash] query
#
# @return [Hash]
def space(query = {})
- Request.new(self, '/cdn/spaces/me', query).get
+ Request.new(self, '/cdn/spaces/me', query, nil, true).get
end
# Gets a collection of stories
#
# @param [Hash] query
@@ -167,36 +168,31 @@
end
parse_result(res)
end
- def cached_get(request)
+ def cached_get(request, bypass_cache = false)
endpoint = base_url + request.url
+ query = request_query(request.query)
+ query_string = build_nested_query(query)
- if cache.nil?
- query = request_query(request.query)
- query_string = build_nested_query(query)
+ if cache.nil? || bypass_cache || query[:version] == 'draft'
result = run_request(endpoint, query_string)
else
- version = cache.get('storyblok:' + configuration[:token] + ':version') || '0'
+ cache_key = 'storyblok:' + configuration[:token] + ':v:' + query[:cv] + ':' + request.url + ':' + Base64.encode64(query_string)
- query = query = request_query({ cache_version: version }.merge(request.query))
- query_string = build_nested_query(query)
-
- cache_key = 'storyblok:' + configuration[:token] + ':v:' + version + ':' + request.url + ':' + Base64.encode64(query_string)
-
result = cache.cache(cache_key) do
run_request(endpoint, query_string)
end
end
JSON.parse(result)
end
def flush
unless cache.nil?
- cache.set('storyblok:' + configuration[:token] + ':version', Time.now.to_i.to_s)
+ cache.set('storyblok:' + configuration[:token] + ':version', space['data']['space']['version'])
end
end
# Returns html from richtext field data
#
@@ -238,17 +234,30 @@
end
raise
end
- {'headers' => res.headers, 'data' => JSON.parse(res.body)}.to_json
+ body = JSON.parse(res.body)
+ self.cache_version = body['cv'] if body['cv']
+
+ unless cache.nil?
+ cache.set('storyblok:' + configuration[:token] + ':version', cache_version)
+ end
+
+ {'headers' => res.headers, 'data' => body}.to_json
end
# Patches a query hash with the client configurations for queries
def request_query(query)
query[:token] = configuration[:token] if query[:token].nil?
query[:version] = configuration[:version] if query[:version].nil?
- query[:cv] = configuration[:cache_version] if query[:cache_version].nil?
+
+ unless cache.nil?
+ query[:cv] = (cache.get('storyblok:' + configuration[:token] + ':version') or cache_version) if query[:cv].nil?
+ else
+ query[:cv] = cache_version if query[:cv].nil?
+ end
+
query
end
# Returns the base url for all of the client's requests
def base_url