storyblok 2.0.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/renderer.rb +16 -8
- data/lib/storyblok/client.rb +24 -15
- data/lib/storyblok/request.rb +4 -3
- data/lib/storyblok/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7788a31d2120b18b1048f242d05f5d9f2c984344bf36e44bc9519e244dd15a3
|
4
|
+
data.tar.gz: b1858aa45ffad79e7088da5ff78cbc0fd7523f8b30e7525e91da72f6e8609e41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d91bbcdc949b788375f0409560c843050c8166606d73b9ed6e59d6422d33c01c5dfbde90143268cc4fe5b6605cefba1a8f1ba494c0b06e68a493c07d5d0ab39
|
7
|
+
data.tar.gz: 0164c14e04e352a1f51f598592a25e6c9266a4a3eeb646cfaafdb51c1ea7ae4244c7774e4ae349f49ea7afac261dee007871cb788fa36978be2b9f2a5c27aec0
|
data/examples/renderer.rb
CHANGED
@@ -1,23 +1,31 @@
|
|
1
1
|
# bundle exec ruby examples/renderer.rb
|
2
2
|
|
3
3
|
require_relative '../lib/storyblok'
|
4
|
+
require 'redis'
|
4
5
|
|
5
6
|
logger = Logger.new(STDOUT)
|
6
7
|
|
8
|
+
redis = Redis.new(url: 'redis://localhost:6379')
|
9
|
+
cache = Storyblok::Cache::Redis.new(redis: redis)
|
10
|
+
|
7
11
|
client = Storyblok::Client.new(
|
8
12
|
token: '6HMYdAjBoONyuS6GIf5PdAtt',
|
9
13
|
logger: logger,
|
10
14
|
component_resolver: ->(component, data) {
|
11
15
|
"Placeholder for #{component}: #{data['text']}"
|
12
|
-
}
|
16
|
+
},
|
17
|
+
api_url: 'api-testing.storyblok.com',
|
18
|
+
api_version: 2,
|
19
|
+
cache: cache
|
13
20
|
)
|
14
21
|
|
15
|
-
puts client.render({'type' => 'doc', 'content' => [
|
16
|
-
{'type' => 'paragraph', 'content' => [{'text' => 'Good', 'type' => 'text'}]},
|
17
|
-
{'type' => 'blok', 'attrs' => {'body' => [{'component' => 'button', 'text' => 'Click me'}]}}
|
18
|
-
]})
|
19
22
|
|
20
|
-
res = client.
|
23
|
+
res = client.flush
|
24
|
+
res = client.story('authors/page', {version: 'published'})
|
25
|
+
puts client.cache_version
|
26
|
+
res = client.story('authors/page', {version: 'published'})
|
27
|
+
res = client.story('authors/page', {version: 'published'})
|
28
|
+
res = client.story('authors/page', {version: 'published'})
|
21
29
|
|
22
|
-
puts res['data']
|
23
|
-
puts client.render(res['data']['story']['content']['intro'])
|
30
|
+
puts res['data']
|
31
|
+
#puts client.render(res['data']['story']['content']['intro'])
|
data/lib/storyblok/client.rb
CHANGED
@@ -17,11 +17,11 @@ module Storyblok
|
|
17
17
|
log_level: Logger::INFO,
|
18
18
|
version: 'draft',
|
19
19
|
component_resolver: ->(component, data) { '' },
|
20
|
-
cache_version: Time.now.to_i,
|
21
20
|
cache: nil
|
22
21
|
}
|
23
22
|
|
24
23
|
attr_reader :configuration, :logger
|
24
|
+
attr_accessor :cache_version
|
25
25
|
|
26
26
|
# @param [Hash] given_configuration
|
27
27
|
# @option given_configuration [String] :token Required if oauth_token is not set
|
@@ -33,6 +33,7 @@ module Storyblok
|
|
33
33
|
# @option given_configuration [::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR] :log_level
|
34
34
|
def initialize(given_configuration = {})
|
35
35
|
@configuration = default_configuration.merge(given_configuration)
|
36
|
+
@cache_version = '0'
|
36
37
|
validate_configuration!
|
37
38
|
|
38
39
|
if configuration[:oauth_token]
|
@@ -62,7 +63,7 @@ module Storyblok
|
|
62
63
|
#
|
63
64
|
# @return [Hash]
|
64
65
|
def space(query = {})
|
65
|
-
Request.new(self, '/cdn/spaces/me', query).get
|
66
|
+
Request.new(self, '/cdn/spaces/me', query, nil, true).get
|
66
67
|
end
|
67
68
|
|
68
69
|
# Gets a collection of stories
|
@@ -169,20 +170,15 @@ module Storyblok
|
|
169
170
|
parse_result(res)
|
170
171
|
end
|
171
172
|
|
172
|
-
def cached_get(request)
|
173
|
+
def cached_get(request, bypass_cache = false)
|
173
174
|
endpoint = base_url + request.url
|
175
|
+
query = request_query(request.query)
|
176
|
+
query_string = build_nested_query(query)
|
174
177
|
|
175
|
-
if cache.nil?
|
176
|
-
query = request_query(request.query)
|
177
|
-
query_string = build_nested_query(query)
|
178
|
+
if cache.nil? || bypass_cache || query[:version] == 'draft'
|
178
179
|
result = run_request(endpoint, query_string)
|
179
180
|
else
|
180
|
-
|
181
|
-
|
182
|
-
query = query = request_query({ cache_version: version }.merge(request.query))
|
183
|
-
query_string = build_nested_query(query)
|
184
|
-
|
185
|
-
cache_key = 'storyblok:' + configuration[:token] + ':v:' + version + ':' + request.url + ':' + Base64.encode64(query_string)
|
181
|
+
cache_key = 'storyblok:' + configuration[:token] + ':v:' + query[:cv] + ':' + request.url + ':' + Base64.encode64(query_string)
|
186
182
|
|
187
183
|
result = cache.cache(cache_key) do
|
188
184
|
run_request(endpoint, query_string)
|
@@ -194,7 +190,7 @@ module Storyblok
|
|
194
190
|
|
195
191
|
def flush
|
196
192
|
unless cache.nil?
|
197
|
-
cache.set('storyblok:' + configuration[:token] + ':version',
|
193
|
+
cache.set('storyblok:' + configuration[:token] + ':version', space['data']['space']['version'])
|
198
194
|
end
|
199
195
|
end
|
200
196
|
|
@@ -240,14 +236,27 @@ module Storyblok
|
|
240
236
|
raise
|
241
237
|
end
|
242
238
|
|
243
|
-
|
239
|
+
body = JSON.parse(res.body)
|
240
|
+
self.cache_version = body['cv'] if body['cv']
|
241
|
+
|
242
|
+
unless cache.nil?
|
243
|
+
cache.set('storyblok:' + configuration[:token] + ':version', cache_version)
|
244
|
+
end
|
245
|
+
|
246
|
+
{'headers' => res.headers, 'data' => body}.to_json
|
244
247
|
end
|
245
248
|
|
246
249
|
# Patches a query hash with the client configurations for queries
|
247
250
|
def request_query(query)
|
248
251
|
query[:token] = configuration[:token] if query[:token].nil?
|
249
252
|
query[:version] = configuration[:version] if query[:version].nil?
|
250
|
-
|
253
|
+
|
254
|
+
unless cache.nil?
|
255
|
+
query[:cv] = (cache.get('storyblok:' + configuration[:token] + ':version') or cache_version) if query[:cv].nil?
|
256
|
+
else
|
257
|
+
query[:cv] = cache_version if query[:cv].nil?
|
258
|
+
end
|
259
|
+
|
251
260
|
query
|
252
261
|
end
|
253
262
|
|
data/lib/storyblok/request.rb
CHANGED
@@ -5,14 +5,15 @@ module Storyblok
|
|
5
5
|
class Request
|
6
6
|
attr_reader :client, :type, :query, :id, :endpoint
|
7
7
|
|
8
|
-
def initialize(client, endpoint, query = {}, id = nil)
|
8
|
+
def initialize(client, endpoint, query = {}, id = nil, bypass_cache = false)
|
9
9
|
@client = client
|
10
10
|
@endpoint = endpoint
|
11
11
|
@query = query
|
12
|
+
@bypass_cache = bypass_cache
|
12
13
|
|
13
14
|
if id
|
14
15
|
@type = :single
|
15
|
-
@id = URI.
|
16
|
+
@id = URI.encode_www_form_component(id)
|
16
17
|
else
|
17
18
|
@type = :multi
|
18
19
|
@id = nil
|
@@ -26,7 +27,7 @@ module Storyblok
|
|
26
27
|
|
27
28
|
# Delegates the actual HTTP work to the client
|
28
29
|
def get
|
29
|
-
client.cached_get(self)
|
30
|
+
client.cached_get(self, @bypass_cache)
|
30
31
|
end
|
31
32
|
|
32
33
|
# Returns a new Request object with the same data
|
data/lib/storyblok/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: storyblok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Storyblok (Alexander Feiglstorfer)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|