storyblok 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9876a3898f429335e6252d7d52962dbf2ff6af96
4
- data.tar.gz: 1795aeb2880895aa2f05d244513af07ad41f16bf
2
+ SHA256:
3
+ metadata.gz: ba3b3cbf9eb1bf234d0d093ad0d8e608b60408a1c62d650ab26d292114a45588
4
+ data.tar.gz: fd55258a2032f6aa3befad526afb5bd3191f6eb9a2c8bbe5220098f484224a12
5
5
  SHA512:
6
- metadata.gz: 2191647a2248d3e851dbc9157a521b2223a9ba5d40123e4682f5d90b7b93c9e1a7057b81ebf8d28afc16534f6faa10f1221005fb7db6b818817d919f577d70b4
7
- data.tar.gz: e4a111074b5ae3019c1ff9df0a7de5f97cc2ec3d27ea105b1a7cef9a4fce8bc3b36518439511035e79e9f38904f13738bfcd7639542728e4da5618459fb82c29
6
+ metadata.gz: 489b55d03fa510f6aecbd1da080e173f707e34bc45168a0d14644efc77ba798090e5667a820b85999a65f97c94f46828c43f9dcb9cc1984ed0054aaf573555f5
7
+ data.tar.gz: d96a28a42e2e0cf7517fbfa44d37db9138c1e9939aa37539d04932dd562545ebdf5e00bdbb3d1c964a0517e57bcfe21dfd173b6be22799ef19b9be8ac52e99f2
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.1
data/Gemfile.lock ADDED
@@ -0,0 +1,51 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ storyblok (2.0.1)
5
+ rest-client (>= 1.8.0, < 3)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.3)
11
+ domain_name (0.5.20180417)
12
+ unf (>= 0.0.5, < 1.0.0)
13
+ http-cookie (1.0.3)
14
+ domain_name (~> 0.5)
15
+ mime-types (3.2.2)
16
+ mime-types-data (~> 3.2015)
17
+ mime-types-data (3.2018.0812)
18
+ netrc (0.11.0)
19
+ redis (4.1.0)
20
+ rest-client (2.0.2)
21
+ http-cookie (>= 1.0.2, < 2.0)
22
+ mime-types (>= 1.16, < 4.0)
23
+ netrc (~> 0.8)
24
+ rspec (3.8.0)
25
+ rspec-core (~> 3.8.0)
26
+ rspec-expectations (~> 3.8.0)
27
+ rspec-mocks (~> 3.8.0)
28
+ rspec-core (3.8.0)
29
+ rspec-support (~> 3.8.0)
30
+ rspec-expectations (3.8.2)
31
+ diff-lcs (>= 1.2.0, < 2.0)
32
+ rspec-support (~> 3.8.0)
33
+ rspec-mocks (3.8.0)
34
+ diff-lcs (>= 1.2.0, < 2.0)
35
+ rspec-support (~> 3.8.0)
36
+ rspec-support (3.8.0)
37
+ unf (0.1.4)
38
+ unf_ext
39
+ unf_ext (0.0.7.5)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ bundler (~> 1.5)
46
+ redis
47
+ rspec (~> 3)
48
+ storyblok!
49
+
50
+ BUNDLED WITH
51
+ 1.16.6
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # About
2
- This is the Storyblok ruby client for easy access of the content delivery api.
2
+ This is the Storyblok ruby client for easy access of the management and content delivery api.
3
3
 
4
4
  ## Install
5
5
 
@@ -7,15 +7,28 @@ This is the Storyblok ruby client for easy access of the content delivery api.
7
7
  gem 'storyblok'
8
8
  ```
9
9
 
10
- ## Usage
10
+ ## Usage for the content delivery api
11
+
12
+ By default the client loads the "draft" version of the Story. Be sure to set the version to "published" to get the published content only.
13
+
14
+ ```ruby
15
+ # The draft mode is required for the preview
16
+ Storyblok::Client.new(version: 'draft')
17
+
18
+ # Requests only published stories
19
+ Storyblok::Client.new(version: 'published')
20
+ ```
11
21
 
12
22
  ### Load a Story
13
23
 
14
24
  ```ruby
25
+ # Without cache
15
26
  client = Storyblok::Client.new(token: 'YOUR_TOKEN')
16
27
 
17
28
  # Optionally set a cache client
18
- Storyblok::Cache.client = Redis.new(:url => 'redis://localhost:6379')
29
+ redis = Redis.new(url: 'redis://localhost:6379')
30
+ cache = Storyblok::Cache::Redis.new(redis: Redis.current)
31
+ client = Storyblok::Client.new(cache: cache, token: 'YOUR_TOKEN')
19
32
 
20
33
  # Get a story
21
34
  client.story('home')
@@ -72,6 +85,51 @@ end
72
85
  puts '</ul>'
73
86
  ```
74
87
 
88
+ ## How to flush the cache
89
+
90
+ Following an example of how to flush the client cache:
91
+
92
+ ```ruby
93
+ cache = Storyblok::Cache::Redis.new(redis: Redis.current)
94
+ client = Storyblok::Client.new(cache: cache, token: 'YOUR_TOKEN')
95
+
96
+ # Get a story and cache it
97
+ client.story('home')
98
+
99
+ # Flush the cache
100
+ client.flush
101
+ ```
102
+
103
+ ## Usage for the management api
104
+
105
+ ### Initialize the client and load spaces
106
+
107
+ ```ruby
108
+ client = Storyblok::Client.new(oauth_token: 'YOUR_OAUTH_TOKEN')
109
+
110
+ # Get your spaces
111
+ client.get('spaces')
112
+ ```
113
+
114
+ ### Create a story
115
+
116
+ ```ruby
117
+ client.post("spaces/{space_id}/stories", {story: {name: 'new', slug: "new"}})
118
+ ```
119
+
120
+ ### Update a story
121
+
122
+ ```ruby
123
+ client.put("spaces/{space_id}/stories/{story_id}", {story: {name: 'new', slug: "new"}})
124
+ ```
125
+
126
+ ### Delete a story
127
+
128
+ ```ruby
129
+ client.delete("spaces/{space_id}/stories/{story_id}")
130
+ ```
131
+
132
+
75
133
  ### License
76
134
 
77
135
  This project is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)
@@ -0,0 +1,33 @@
1
+ # bundle exec ruby examples/management_api.rb
2
+
3
+ require 'storyblok'
4
+
5
+ logger = Logger.new(STDOUT)
6
+
7
+ client = Storyblok::Client.new(
8
+ token: 'A5uTnm0GXLBLhwaGrhHdQwtt',
9
+ oauth_token: 'OAUTH_TOKEN',
10
+ logger: logger
11
+ )
12
+
13
+ spaces = client.get('spaces')['data']['spaces']
14
+ space = spaces.first
15
+
16
+ p client.get("spaces/#{space['id']}")['data']['space']
17
+ story_res = client.post("spaces/#{space['id']}/stories", {story: {name: 'new', slug: "new"}})['data']
18
+
19
+ 10.times do |index|
20
+ client.get("spaces/#{space['id']}/stories/#{story_res['story']['id']}")
21
+ puts index
22
+ end
23
+
24
+ p client.put("spaces/#{space['id']}/stories/#{story_res['story']['id']}", {story: {name: 'new123'}})['data']
25
+
26
+ 10.times do |index|
27
+ client.story('new')
28
+ puts index
29
+ end
30
+
31
+ p client.delete("spaces/#{space['id']}/stories/#{story_res['story']['id']}")
32
+
33
+
@@ -22,7 +22,8 @@ module Storyblok
22
22
  attr_reader :configuration, :logger
23
23
 
24
24
  # @param [Hash] given_configuration
25
- # @option given_configuration [String] :token Required
25
+ # @option given_configuration [String] :token Required if oauth_token is not set
26
+ # @option given_configuration [String] :oauth_token Required if token is not set
26
27
  # @option given_configuration [String] :api_url
27
28
  # @option given_configuration [Number] :api_version
28
29
  # @option given_configuration [false, ::Logger] :logger
@@ -30,6 +31,13 @@ module Storyblok
30
31
  def initialize(given_configuration = {})
31
32
  @configuration = default_configuration.merge(given_configuration)
32
33
  validate_configuration!
34
+
35
+ if configuration[:oauth_token]
36
+ @rest_client = RestClient::Resource.new(base_url, :headers => {
37
+ :authorization => configuration[:oauth_token]
38
+ })
39
+ end
40
+
33
41
  setup_logger
34
42
  end
35
43
 
@@ -88,7 +96,47 @@ module Storyblok
88
96
  Links.new(Request.new(self, '/cdn/links', query).get).as_tree
89
97
  end
90
98
 
91
- def get(request)
99
+ def post(path, payload, additional_headers = {})
100
+ run_management_request(:post, path, payload, additional_headers)
101
+ end
102
+
103
+ def put(path, payload, additional_headers = {})
104
+ run_management_request(:put, path, payload, additional_headers)
105
+ end
106
+
107
+ def delete(path, additional_headers = {})
108
+ run_management_request(:delete, path, nil, additional_headers)
109
+ end
110
+
111
+ def get(path, additional_headers = {})
112
+ run_management_request(:get, path, nil, additional_headers)
113
+ end
114
+
115
+ def run_management_request(action, path, payload = {}, additional_headers = {})
116
+ logger.info(request: { path: path, action: action }) if logger
117
+ retries_left = 3
118
+
119
+ begin
120
+ if [:post, :put].include?(action)
121
+ res = @rest_client[path].send(action, payload, additional_headers)
122
+ else
123
+ res = @rest_client[path].send(action, additional_headers)
124
+ end
125
+ rescue RestClient::TooManyRequests
126
+ if retries_left != 0
127
+ retries_left -= 1
128
+ logger.info("Too many requests. Retry nr. #{(3 - retries_left).to_s} of max. 3 times.") if logger
129
+ sleep(0.5)
130
+ retry
131
+ end
132
+
133
+ raise
134
+ end
135
+
136
+ parse_result(res)
137
+ end
138
+
139
+ def cached_get(request)
92
140
  endpoint = base_url + request.url
93
141
  query = request_query(request.query)
94
142
  query_string = build_nested_query(query)
@@ -115,11 +163,29 @@ module Storyblok
115
163
 
116
164
  private
117
165
 
166
+ def parse_result(res)
167
+ {'headers' => res.headers, 'data' => JSON.parse(res.body)}
168
+ end
169
+
118
170
  def run_request(endpoint, query_string)
119
171
  logger.info(request: { endpoint: endpoint, query: query_string }) if logger
120
- res = RestClient.get "#{endpoint}?#{query_string}"
121
172
 
122
- {headers: res.headers, data: JSON.parse(res.body)}.to_json
173
+ retries_left = 3
174
+
175
+ begin
176
+ res = RestClient.get "#{endpoint}?#{query_string}"
177
+ rescue RestClient::TooManyRequests
178
+ if retries_left != 0
179
+ retries_left -= 1
180
+ logger.info("Too many requests. Retry nr. #{(3 - retries_left).to_s} of max. 3 times.") if logger
181
+ sleep(0.5)
182
+ retry
183
+ end
184
+
185
+ raise
186
+ end
187
+
188
+ {'headers' => res.headers, 'data' => JSON.parse(res.body)}.to_json
123
189
  end
124
190
 
125
191
  # Patches a query hash with the client configurations for queries
@@ -149,7 +215,7 @@ module Storyblok
149
215
  end
150
216
 
151
217
  def validate_configuration!
152
- fail ArgumentError, 'You will need to initialize a client with an :token' if configuration[:token].empty?
218
+ fail ArgumentError, 'You will need to initialize a client with an :token or :oauth_token' if !configuration[:token] and !configuration[:oauth_token]
153
219
  fail ArgumentError, 'The client configuration needs to contain an :api_url' if configuration[:api_url].empty?
154
220
  fail ArgumentError, 'The :api_version must be a positive number' unless configuration[:api_version].to_i >= 0
155
221
  end
@@ -26,7 +26,7 @@ module Storyblok
26
26
 
27
27
  # Delegates the actual HTTP work to the client
28
28
  def get
29
- client.get(self)
29
+ client.cached_get(self)
30
30
  end
31
31
 
32
32
  # Returns a new Request object with the same data
@@ -1,4 +1,4 @@
1
1
  module Storyblok
2
2
  # Gem Version
3
- VERSION = '2.0.0'
3
+ VERSION = '2.0.1'
4
4
  end
data/storyblok.gemspec CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |gem|
4
4
  gem.name = 'storyblok'
5
5
  gem.version = Storyblok::VERSION
6
6
  gem.summary = 'storyblok'
7
- gem.description = 'Ruby client for the https://www.storyblok.com Content Delivery API'
7
+ gem.description = 'Ruby client for the https://www.storyblok.com management and content delivery API'
8
8
  gem.license = 'MIT'
9
9
  gem.authors = ['Storyblok (Alexander Feiglstorfer)']
10
10
  gem.email = 'it@storyblok.com'
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.0
4
+ version: 2.0.1
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: 2018-10-16 00:00:00.000000000 Z
11
+ date: 2019-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -58,7 +58,8 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '3'
61
- description: Ruby client for the https://www.storyblok.com Content Delivery API
61
+ description: Ruby client for the https://www.storyblok.com management and content
62
+ delivery API
62
63
  email: it@storyblok.com
63
64
  executables: []
64
65
  extensions: []
@@ -66,10 +67,13 @@ extra_rdoc_files: []
66
67
  files:
67
68
  - ".editorconfig"
68
69
  - ".gitignore"
70
+ - ".ruby-version"
69
71
  - Gemfile
72
+ - Gemfile.lock
70
73
  - README.md
71
74
  - examples/cache.rb
72
75
  - examples/example_queries.rb
76
+ - examples/management_api.rb
73
77
  - examples/tree.rb
74
78
  - lib/storyblok.rb
75
79
  - lib/storyblok/cache/redis.rb
@@ -77,7 +81,6 @@ files:
77
81
  - lib/storyblok/links.rb
78
82
  - lib/storyblok/request.rb
79
83
  - lib/storyblok/version.rb
80
- - storyblok-1.0.4.gem
81
84
  - storyblok.gemspec
82
85
  homepage: https://github.com/storyblok/storyblok-ruby
83
86
  licenses:
@@ -99,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
102
  version: '0'
100
103
  requirements: []
101
104
  rubyforge_project:
102
- rubygems_version: 2.5.2.3
105
+ rubygems_version: 2.7.6
103
106
  signing_key:
104
107
  specification_version: 4
105
108
  summary: storyblok
data/storyblok-1.0.4.gem DELETED
Binary file