storyblok 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4f7ee7dc39a1457adae80294bbe0606e0ee99ea38f5e1c7608ef2f1ef13b8fb
4
- data.tar.gz: 1177742ae270a639988a06cbaca3612d2c7b298a521b7614469f17bbb716e787
3
+ metadata.gz: 0d65c76047177a312640e32e21d9126454177bb974f9808d8a82e944b032e1e0
4
+ data.tar.gz: b8daf749b9072a284153d92e38155c9b202418b684deb7bb708124dca0e168eb
5
5
  SHA512:
6
- metadata.gz: 0a373ba20c6107ee1b2b1a767bcaef8f387c1b734566710d38304bb2585e4860224eeeca6c39d9bd16f2ae2706241236e168d757fabb1d298bd601029cff66f9
7
- data.tar.gz: d6f1bbfe69648f4dd3130caa7fde6542ecfcc27021f118d65c5af3c9a1a8a61111729255c8b2a23c740881efb402b303ffdb77b69351af74c1a7b1c212da0dc3
6
+ metadata.gz: 6255f6a2507ce909b0f8836bc0a7368f981f4264d2e60d602908e4fa4019fee0dc5a57506019519d998d0085c4a4028478ef41b88a15cb710ff2ee88638aabb0
7
+ data.tar.gz: b7f6dfb8c8f070c7b5cd89880d971dadc9cbfb4550db2b48420439c88d90f440f9050b9ad5d6c23ef42fde77354689ef8688ee6f904ae860a97348f6db4cc8de
data/Gemfile CHANGED
@@ -3,3 +3,4 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'redis'
6
+ gem 'storyblok-richtext-renderer'
data/README.md CHANGED
@@ -27,7 +27,7 @@ client = Storyblok::Client.new(token: 'YOUR_TOKEN')
27
27
 
28
28
  # Optionally set a cache client
29
29
  redis = Redis.new(url: 'redis://localhost:6379')
30
- cache = Storyblok::Cache::Redis.new(redis: Redis.current)
30
+ cache = Storyblok::Cache::Redis.new(redis: redis)
31
31
  client = Storyblok::Client.new(cache: cache, token: 'YOUR_TOKEN')
32
32
 
33
33
  # Get a story
@@ -141,6 +141,39 @@ client.put("spaces/{space_id}/stories/{story_id}", {story: {name: 'new', slug: "
141
141
  client.delete("spaces/{space_id}/stories/{story_id}")
142
142
  ```
143
143
 
144
+ ## Rendering of richtext fields
145
+
146
+ This SDK comes with a rendering service for richtext fields of Storyblok to get html output.
147
+
148
+ ### Rendering a richtext field
149
+
150
+ ```ruby
151
+ client.render(data.richtext_field)
152
+ ```
153
+
154
+ ### Define a component renderer
155
+
156
+ Storyblok's richtext field also let's you insert content blocks. To render these blocks you can define a Lambda.
157
+
158
+ ```ruby
159
+ # Option 1: Define the resolver when initializing
160
+ client = Storyblok::Client.new(
161
+ component_resolver: ->(component, data) => {
162
+ case component
163
+ when 'button'
164
+ "<button>#{data['text']}</button>"
165
+ when 'your_custom_component'
166
+ "<div class="welcome">#{data['welcome_text']}</div>"
167
+ end
168
+ }
169
+ )
170
+
171
+ # Option 2: Define the resolver afterwards
172
+ client.set_component_resolver(->(component, data) {
173
+ "#{component}"
174
+ })
175
+ ```
176
+
144
177
 
145
178
  ### License
146
179
 
@@ -0,0 +1,23 @@
1
+ # bundle exec ruby examples/renderer.rb
2
+
3
+ require_relative '../lib/storyblok'
4
+
5
+ logger = Logger.new(STDOUT)
6
+
7
+ client = Storyblok::Client.new(
8
+ token: '6HMYdAjBoONyuS6GIf5PdAtt',
9
+ logger: logger,
10
+ component_resolver: ->(component, data) {
11
+ "Placeholder for #{component}: #{data['text']}"
12
+ }
13
+ )
14
+
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
+
20
+ res = client.story('article/article-1')
21
+
22
+ puts res['data']['story']['content']['intro']
23
+ puts client.render(res['data']['story']['content']['intro'])
@@ -1,6 +1,7 @@
1
1
  require_relative 'request'
2
2
  require_relative 'links'
3
3
 
4
+ require 'storyblok/richtext'
4
5
  require 'rest-client'
5
6
  require 'logger'
6
7
  require 'base64'
@@ -15,8 +16,9 @@ module Storyblok
15
16
  logger: false,
16
17
  log_level: Logger::INFO,
17
18
  version: 'draft',
19
+ component_resolver: ->(component, data) { '' },
18
20
  cache_version: Time.now.to_i,
19
- cache: nil,
21
+ cache: nil
20
22
  }
21
23
 
22
24
  attr_reader :configuration, :logger
@@ -25,6 +27,7 @@ module Storyblok
25
27
  # @option given_configuration [String] :token Required if oauth_token is not set
26
28
  # @option given_configuration [String] :oauth_token Required if token is not set
27
29
  # @option given_configuration [String] :api_url
30
+ # @option given_configuration [Proc] :component_resolver
28
31
  # @option given_configuration [Number] :api_version
29
32
  # @option given_configuration [false, ::Logger] :logger
30
33
  # @option given_configuration [::Logger::DEBUG, ::Logger::INFO, ::Logger::WARN, ::Logger::ERROR] :log_level
@@ -38,6 +41,8 @@ module Storyblok
38
41
  })
39
42
  end
40
43
 
44
+ @renderer = Richtext::HtmlRenderer.new
45
+ @renderer.set_component_resolver(@configuration[:component_resolver])
41
46
  setup_logger
42
47
  end
43
48
 
@@ -189,6 +194,24 @@ module Storyblok
189
194
  end
190
195
  end
191
196
 
197
+ # Returns html from richtext field data
198
+ #
199
+ # @param [Hash] :data
200
+ #
201
+ # @return [String]
202
+ def render data
203
+ @renderer.render(data)
204
+ end
205
+
206
+ # Sets component resolver
207
+ #
208
+ # @param [Proc] :component_resolver
209
+ #
210
+ # @return [nil]
211
+ def set_component_resolver component_resolver
212
+ @renderer.set_component_resolver(component_resolver)
213
+ end
214
+
192
215
  private
193
216
 
194
217
  def parse_result(res)
@@ -1,4 +1,4 @@
1
1
  module Storyblok
2
2
  # Gem Version
3
- VERSION = '2.0.5'
3
+ VERSION = '2.0.6'
4
4
  end
data/storyblok.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ['lib']
17
17
 
18
18
  gem.add_dependency 'rest-client', '>= 1.8.0', '< 3'
19
+ gem.add_dependency 'storyblok-richtext-renderer', '>= 0.0.4', '< 1'
19
20
 
20
21
  gem.add_development_dependency 'bundler', '~> 1.5'
21
22
  gem.add_development_dependency 'rspec', '~> 3'
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.5
4
+ version: 2.0.6
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: 2019-08-02 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: storyblok-richtext-renderer
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.0.4
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.0.4
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '1'
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: bundler
35
55
  requirement: !ruby/object:Gem::Requirement
@@ -75,8 +95,11 @@ files:
75
95
  - examples/cache.rb
76
96
  - examples/example_queries.rb
77
97
  - examples/management_api.rb
98
+ - examples/renderer.rb
78
99
  - examples/tree.rb
100
+ - lib/.DS_Store
79
101
  - lib/storyblok.rb
102
+ - lib/storyblok/.DS_Store
80
103
  - lib/storyblok/cache/redis.rb
81
104
  - lib/storyblok/client.rb
82
105
  - lib/storyblok/links.rb