contentful 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +43 -24
- data/README.md +22 -0
- data/RELEASE.md +8 -0
- data/Rakefile +4 -6
- data/contentful.gemspec +7 -9
- data/examples/custom_classes.rb +1 -2
- data/examples/dynamic_entries.rb +2 -4
- data/examples/example_queries.rb +2 -3
- data/examples/raise_errors.rb +3 -5
- data/examples/raw_mode.rb +2 -3
- data/examples/resource_mapping.rb +3 -4
- data/lib/contentful/array.rb +0 -1
- data/lib/contentful/asset.rb +1 -1
- data/lib/contentful/client.rb +47 -38
- data/lib/contentful/deleted_entry.rb +1 -1
- data/lib/contentful/request.rb +1 -2
- data/lib/contentful/resource.rb +1 -1
- data/lib/contentful/resource/array_like.rb +2 -3
- data/lib/contentful/resource/asset_fields.rb +1 -1
- data/lib/contentful/resource/fields.rb +2 -3
- data/lib/contentful/resource/system_properties.rb +1 -1
- data/lib/contentful/resource_builder.rb +14 -23
- data/lib/contentful/response.rb +40 -35
- data/lib/contentful/sync.rb +1 -3
- data/lib/contentful/sync_page.rb +2 -3
- data/lib/contentful/version.rb +1 -1
- data/spec/array_spec.rb +20 -20
- data/spec/asset_spec.rb +14 -14
- data/spec/auto_includes_spec.rb +4 -4
- data/spec/client_class_spec.rb +22 -24
- data/spec/client_configuration_spec.rb +48 -49
- data/spec/coercions_spec.rb +4 -4
- data/spec/content_type_spec.rb +12 -12
- data/spec/deleted_asset_spec.rb +10 -11
- data/spec/deleted_entry_spec.rb +9 -10
- data/spec/dynamic_entry_spec.rb +11 -11
- data/spec/entry_spec.rb +14 -14
- data/spec/error_class_spec.rb +15 -18
- data/spec/error_requests_spec.rb +6 -7
- data/spec/field_spec.rb +9 -9
- data/spec/file_spec.rb +7 -7
- data/spec/link_spec.rb +14 -14
- data/spec/locale_spec.rb +6 -6
- data/spec/location_spec.rb +10 -10
- data/spec/request_spec.rb +13 -13
- data/spec/resource_building_spec.rb +7 -8
- data/spec/resource_spec.rb +14 -14
- data/spec/response_spec.rb +25 -24
- data/spec/space_spec.rb +10 -10
- data/spec/spec_helper.rb +1 -2
- data/spec/support/json_responses.rb +2 -2
- data/spec/support/vcr.rb +3 -3
- data/spec/sync_page_spec.rb +26 -27
- data/spec/sync_spec.rb +22 -24
- metadata +41 -66
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 457f3ffcb4578d1cabdc27b4fca30123f4f55168
|
4
|
+
data.tar.gz: 7fda79c6a4f4a72cd741f98a60d12cbb176f69ae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 12180232bf6cf60187fc190c0ea0a31d87fd96fbe6358710dd892c19f0625ae9c485e196c201c95b9ae70a07bc22a5b34a1ecd4db1c83528912edbbe08dc2a4e
|
7
|
+
data.tar.gz: cac25970176537ea082e5747d63740d8a70ae24cc3f637c7b0dce225b38a47b5be6ac5e87ce5e12a34147eae8a0300aa39d20f1eb64b6f0ed9c0f8ebf49a7c72
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,45 +1,64 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Change Log
|
2
|
+
## 0.3.5
|
3
|
+
### Added
|
4
|
+
* Logging of requests
|
3
5
|
|
4
|
-
###
|
5
|
-
*
|
6
|
+
### Fixed
|
7
|
+
* Cleaner and better error handling
|
6
8
|
|
7
|
-
###
|
8
|
-
*
|
9
|
+
### Other
|
10
|
+
* Code cleanup
|
11
|
+
* Remove encoding strings from the source code files
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
*
|
13
|
-
* remove CGI dependency for http gem
|
13
|
+
## 0.3.4
|
14
|
+
### Added
|
15
|
+
* Optional gzip compression
|
14
16
|
|
15
|
-
|
17
|
+
## 0.3.3
|
18
|
+
### Fixed
|
19
|
+
* Fix: handle 503 errors from the API
|
16
20
|
|
17
|
-
|
21
|
+
## 0.3.2
|
22
|
+
### Added
|
23
|
+
* Default property to locale, #23
|
24
|
+
|
25
|
+
## 0.3.1
|
26
|
+
### Fixed
|
27
|
+
* Return nil when a value is not supplied, fixes #18
|
28
|
+
* Do not parse empty responses
|
18
29
|
|
30
|
+
### Other
|
31
|
+
* Remove CGI dependency for http Gem
|
19
32
|
|
20
|
-
|
33
|
+
## 0.3.0
|
34
|
+
### Added
|
35
|
+
* Support Synchronization
|
21
36
|
|
37
|
+
## 0.2.0
|
38
|
+
### Added
|
22
39
|
* Introduce new :entry_mapping configuration to enable custom Entry classes based on ContentTypes
|
40
|
+
|
41
|
+
### Other
|
23
42
|
* Update HTTP gem dependency to 0.6
|
24
43
|
* Convert arrays in query values to strings, separated by comma
|
25
44
|
|
26
45
|
|
27
|
-
|
46
|
+
## 0.1.3
|
47
|
+
### Fixed
|
48
|
+
* Better link inclusion processing, prevents "stack level to deep" errors
|
28
49
|
|
29
|
-
* Better link inclusion processing, prevent "stack level to deep" errors
|
30
50
|
|
51
|
+
## 0.1.2
|
52
|
+
### Fixed
|
53
|
+
* The way all content types are retrieved
|
31
54
|
|
32
|
-
### 0.1.2
|
33
55
|
|
34
|
-
|
56
|
+
## 0.1.1
|
57
|
+
### Fixed
|
58
|
+
* Bug that prevented fields with multiple resources to be parsed correctly
|
35
59
|
|
36
|
-
|
37
|
-
### 0.1.1
|
38
|
-
|
39
|
-
* Fix a bug that prevented fields with multiple resources to be parsed correctly
|
60
|
+
### Other
|
40
61
|
* Restrict HTTP gem dependency to < 0.6
|
41
62
|
|
42
|
-
|
43
|
-
### 0.1.0
|
44
|
-
|
63
|
+
## 0.1.0
|
45
64
|
* Initial release.
|
data/README.md
CHANGED
@@ -172,6 +172,28 @@ See next paragraph for explanation
|
|
172
172
|
|
173
173
|
Enables gzip response content encoding, default to: true
|
174
174
|
|
175
|
+
### :logger
|
176
|
+
|
177
|
+
Logging is disabled by default, it can be enabled by setting a logger instance and a logging severity.
|
178
|
+
```ruby
|
179
|
+
client = Contentful::Client.new(
|
180
|
+
access_token: 'b4c0n73n7fu1',
|
181
|
+
space: 'cfexampleapi',
|
182
|
+
logger: logger_instance,
|
183
|
+
log_level: Logger::DEBUG
|
184
|
+
)
|
185
|
+
```
|
186
|
+
Example loggers:
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
Rails.logger
|
190
|
+
Logger.new('logfile.log')
|
191
|
+
```
|
192
|
+
|
193
|
+
### :log_level
|
194
|
+
The default severity is set to INFO and logs only the request attributes (headers, parameters and url). Setting it to DEBUG will also log the raw JSON response.
|
195
|
+
|
196
|
+
|
175
197
|
## Advanced Usage
|
176
198
|
### Custom Resource Classes
|
177
199
|
|
data/RELEASE.md
ADDED
data/Rakefile
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
|
5
3
|
begin
|
6
4
|
require 'bundler'
|
7
5
|
rescue LoadError => e
|
8
6
|
warn e.message
|
9
|
-
warn
|
7
|
+
warn 'Run `gem install bundler` to install Bundler.'
|
10
8
|
exit -1
|
11
9
|
end
|
12
10
|
|
@@ -14,7 +12,7 @@ begin
|
|
14
12
|
Bundler.setup(:development)
|
15
13
|
rescue Bundler::BundlerError => e
|
16
14
|
warn e.message
|
17
|
-
warn
|
15
|
+
warn 'Run `bundle install` to install missing gems.'
|
18
16
|
exit e.status_code
|
19
17
|
end
|
20
18
|
|
@@ -26,5 +24,5 @@ Gem::Tasks.new
|
|
26
24
|
require 'rspec/core/rake_task'
|
27
25
|
RSpec::Core::RakeTask.new
|
28
26
|
|
29
|
-
task :
|
30
|
-
task :
|
27
|
+
task test: :spec
|
28
|
+
task default: :spec
|
data/contentful.gemspec
CHANGED
@@ -1,19 +1,17 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
require File.expand_path('../lib/contentful/version', __FILE__)
|
4
2
|
|
5
3
|
Gem::Specification.new do |gem|
|
6
|
-
gem.name =
|
4
|
+
gem.name = 'contentful'
|
7
5
|
gem.version = Contentful::VERSION
|
8
6
|
gem.summary = 'contentful'
|
9
7
|
gem.description = 'Ruby client for the https://www.contentful.com Content Delivery API'
|
10
|
-
gem.license =
|
11
|
-
gem.authors = [
|
12
|
-
gem.email =
|
13
|
-
gem.homepage =
|
8
|
+
gem.license = 'MIT'
|
9
|
+
gem.authors = ['Contentful GmbH (Jan Lelis)', 'Contentful GmbH (Andreas Tiefenthaler)']
|
10
|
+
gem.email = 'rubygems@contentful.com'
|
11
|
+
gem.homepage = 'https://github.com/contentful/contentful.rb'
|
14
12
|
|
15
|
-
gem.files = Dir['{**/}{.*,*}'].select { |path| File.file?(path) && !path.start_with?(
|
16
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.files = Dir['{**/}{.*,*}'].select { |path| File.file?(path) && !path.start_with?('pkg') }
|
14
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
17
15
|
gem.test_files = gem.files.grep(%r{^spec/})
|
18
16
|
gem.require_paths = ['lib']
|
19
17
|
|
data/examples/custom_classes.rb
CHANGED
@@ -20,7 +20,7 @@ end
|
|
20
20
|
res = MyResource.new(
|
21
21
|
'some' => 'value',
|
22
22
|
'age' => '25',
|
23
|
-
'country' => {'code' => 'de', 'name' => 'Deutschland'},
|
23
|
+
'country' => { 'code' => 'de', 'name' => 'Deutschland' },
|
24
24
|
'unknown_property' => 'ignored'
|
25
25
|
)
|
26
26
|
|
@@ -29,7 +29,6 @@ p res.age # => 25
|
|
29
29
|
p res.country # #<Contentful::Locale: ...
|
30
30
|
p res.unknown_property # NoMethodError
|
31
31
|
|
32
|
-
|
33
32
|
# Another possibility to create customized resources is to just inherit from an
|
34
33
|
# existing one:
|
35
34
|
|
data/examples/dynamic_entries.rb
CHANGED
@@ -6,7 +6,7 @@ require 'contentful'
|
|
6
6
|
|
7
7
|
client = Contentful::Client.new(
|
8
8
|
space: 'cfexampleapi',
|
9
|
-
access_token:
|
9
|
+
access_token: 'b4c0n73n7fu1',
|
10
10
|
dynamic_entries: :manual,
|
11
11
|
)
|
12
12
|
|
@@ -22,7 +22,6 @@ p nyancat.is_a? CatEntry # => true
|
|
22
22
|
p nyancat.fields[:name] # => "Nyan Cat" # This would also be possible with a non-dynamic entry
|
23
23
|
p nyancat.name # => "Nyan Cat"
|
24
24
|
|
25
|
-
|
26
25
|
# You don't need to initialize a ContentType resource to create a DynamicEntry
|
27
26
|
# You could also pass the content type's JSON representation:
|
28
27
|
|
@@ -112,12 +111,11 @@ SuperCatEntry = Contentful::DynamicEntry.create <<JSON
|
|
112
111
|
}
|
113
112
|
JSON
|
114
113
|
|
115
|
-
|
116
114
|
# AUTO MODE - All entries will be converted to dynamic entries
|
117
115
|
|
118
116
|
client = Contentful::Client.new(
|
119
117
|
space: 'cfexampleapi',
|
120
|
-
access_token:
|
118
|
+
access_token: 'b4c0n73n7fu1',
|
121
119
|
dynamic_entries: :auto,
|
122
120
|
)
|
123
121
|
|
data/examples/example_queries.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'contentful'
|
2
2
|
|
3
|
-
|
4
3
|
client = Contentful::Client.new(
|
5
4
|
space: 'cfexampleapi',
|
6
|
-
access_token:
|
5
|
+
access_token: 'b4c0n73n7fu1',
|
7
6
|
)
|
8
7
|
|
9
8
|
p client.space
|
@@ -24,4 +23,4 @@ p client.entries(
|
|
24
23
|
p client.content_types(
|
25
24
|
order: '-sys.updatedAt',
|
26
25
|
limit: 3,
|
27
|
-
)
|
26
|
+
)
|
data/examples/raise_errors.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'contentful'
|
2
2
|
|
3
|
-
|
4
3
|
client = Contentful::Client.new(
|
5
4
|
space: 'cfexampleapi',
|
6
|
-
access_token:
|
5
|
+
access_token: 'b4c0n73n7fu1',
|
7
6
|
)
|
8
7
|
|
9
8
|
begin
|
@@ -12,11 +11,10 @@ rescue => error
|
|
12
11
|
p error
|
13
12
|
end
|
14
13
|
|
15
|
-
|
16
14
|
client2 = Contentful::Client.new(
|
17
15
|
space: 'cfexampleapi',
|
18
|
-
access_token:
|
16
|
+
access_token: 'b4c0n73n7fu1',
|
19
17
|
raise_errors: false,
|
20
18
|
)
|
21
19
|
|
22
|
-
p client2.entry 'not found'
|
20
|
+
p client2.entry 'not found'
|
data/examples/raw_mode.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'contentful'
|
2
2
|
|
3
|
-
|
4
3
|
client = Contentful::Client.new(
|
5
4
|
space: 'cfexampleapi',
|
6
|
-
access_token:
|
5
|
+
access_token: 'b4c0n73n7fu1',
|
7
6
|
raw_mode: true,
|
8
7
|
)
|
9
8
|
|
@@ -12,4 +11,4 @@ p entry.is_a? Contentful::Resource # false
|
|
12
11
|
p entry.is_a? Contentful::Response # true
|
13
12
|
p entry.status
|
14
13
|
p entry
|
15
|
-
puts entry.raw
|
14
|
+
puts entry.raw
|
@@ -6,7 +6,6 @@
|
|
6
6
|
# - a Proc, that returns the Class to use
|
7
7
|
# - a Symbol for a method of the ResourceBuilder object
|
8
8
|
|
9
|
-
|
10
9
|
require 'contentful'
|
11
10
|
|
12
11
|
class MyBetterArray < Contentful::Array
|
@@ -18,13 +17,13 @@ end
|
|
18
17
|
|
19
18
|
client = Contentful::Client.new(
|
20
19
|
space: 'cfexampleapi',
|
21
|
-
access_token:
|
20
|
+
access_token: 'b4c0n73n7fu1',
|
22
21
|
resource_mapping: {
|
23
22
|
'Array' => MyBetterArray,
|
24
|
-
'Asset' => ->(
|
23
|
+
'Asset' => ->(_json_object)do
|
25
24
|
# might return different class if some criteria is matched
|
26
25
|
Contentful::Asset
|
27
|
-
|
26
|
+
end,
|
28
27
|
}
|
29
28
|
)
|
30
29
|
|
data/lib/contentful/array.rb
CHANGED
data/lib/contentful/asset.rb
CHANGED
data/lib/contentful/client.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'resource_builder'
|
|
4
4
|
require_relative 'sync'
|
5
5
|
|
6
6
|
require 'http'
|
7
|
+
require 'logger'
|
7
8
|
|
8
9
|
module Contentful
|
9
10
|
# The client object is initialized with a space and a key and then used
|
@@ -11,21 +12,23 @@ module Contentful
|
|
11
12
|
# See README for details
|
12
13
|
class Client
|
13
14
|
DEFAULT_CONFIGURATION = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
secure: true,
|
16
|
+
raise_errors: true,
|
17
|
+
dynamic_entries: :manual,
|
18
|
+
api_url: 'cdn.contentful.com',
|
19
|
+
api_version: 1,
|
20
|
+
authentication_mechanism: :header,
|
21
|
+
resource_builder: ResourceBuilder,
|
22
|
+
resource_mapping: {},
|
23
|
+
entry_mapping: {},
|
24
|
+
default_locale: 'en-US',
|
25
|
+
raw_mode: false,
|
26
|
+
gzip_encoded: false,
|
27
|
+
logger: false,
|
28
|
+
log_level: Logger::INFO
|
26
29
|
}
|
27
30
|
|
28
|
-
attr_reader :configuration, :dynamic_entry_cache
|
31
|
+
attr_reader :configuration, :dynamic_entry_cache, :logger
|
29
32
|
|
30
33
|
# Wraps the actual HTTP request
|
31
34
|
def self.get_http(url, query, headers = {})
|
@@ -36,6 +39,7 @@ module Contentful
|
|
36
39
|
@configuration = default_configuration.merge(given_configuration)
|
37
40
|
normalize_configuration!
|
38
41
|
validate_configuration!
|
42
|
+
setup_logger
|
39
43
|
|
40
44
|
if configuration[:dynamic_entries] == :auto
|
41
45
|
update_dynamic_entry_cache!
|
@@ -44,6 +48,11 @@ module Contentful
|
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
51
|
+
def setup_logger
|
52
|
+
@logger = configuration[:logger]
|
53
|
+
logger.level = configuration[:log_level] if logger
|
54
|
+
end
|
55
|
+
|
47
56
|
# Returns the default configuration
|
48
57
|
def default_configuration
|
49
58
|
DEFAULT_CONFIGURATION.dup
|
@@ -105,9 +114,9 @@ module Contentful
|
|
105
114
|
|
106
115
|
# Returns the headers used for the HTTP requests
|
107
116
|
def request_headers
|
108
|
-
headers = {
|
117
|
+
headers = {'User-Agent' => "RubyContentfulGem/#{Contentful::VERSION}"}
|
109
118
|
headers['Authorization'] = "Bearer #{configuration[:access_token]}" if configuration[:authentication_mechanism] == :header
|
110
|
-
headers['Content-Type']
|
119
|
+
headers['Content-Type'] = "application/vnd.contentful.delivery.v#{configuration[:api_version].to_i}+json" if configuration[:api_version]
|
111
120
|
headers['Accept-Encoding'] = 'gzip' if configuration[:gzip_encoded]
|
112
121
|
headers
|
113
122
|
end
|
@@ -115,7 +124,7 @@ module Contentful
|
|
115
124
|
# Patches a query hash with the client configurations for queries
|
116
125
|
def request_query(query)
|
117
126
|
if configuration[:authentication_mechanism] == :query_string
|
118
|
-
query[
|
127
|
+
query['access_token'] = configuration[:access_token]
|
119
128
|
end
|
120
129
|
|
121
130
|
query
|
@@ -126,16 +135,17 @@ module Contentful
|
|
126
135
|
# return Response objects instead
|
127
136
|
def get(request, build_resource = true)
|
128
137
|
url = request.absolute? ? request.url : base_url + request.url
|
138
|
+
logger.info(request: {url: url, query: request.query, header: request_headers}) if logger
|
129
139
|
response = Response.new(
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
140
|
+
self.class.get_http(
|
141
|
+
url,
|
142
|
+
request_query(request.query),
|
143
|
+
request_headers
|
144
|
+
), request
|
135
145
|
)
|
136
146
|
|
137
147
|
return response if !build_resource || configuration[:raw_mode]
|
138
|
-
|
148
|
+
logger.debug(response: response) if logger
|
139
149
|
result = configuration[:resource_builder].new(
|
140
150
|
self,
|
141
151
|
response,
|
@@ -144,7 +154,7 @@ module Contentful
|
|
144
154
|
configuration[:default_locale]
|
145
155
|
).run
|
146
156
|
|
147
|
-
|
157
|
+
fail result if result.is_a?(Error) && configuration[:raise_errors]
|
148
158
|
result
|
149
159
|
end
|
150
160
|
|
@@ -152,12 +162,12 @@ module Contentful
|
|
152
162
|
# See README for details.
|
153
163
|
def update_dynamic_entry_cache!
|
154
164
|
@dynamic_entry_cache = Hash[
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
165
|
+
content_types(limit: 1000).map do |ct|
|
166
|
+
[
|
167
|
+
ct.id.to_sym,
|
168
|
+
DynamicEntry.create(ct)
|
169
|
+
]
|
170
|
+
end
|
161
171
|
]
|
162
172
|
end
|
163
173
|
|
@@ -170,11 +180,10 @@ module Contentful
|
|
170
180
|
# Create a new synchronisation object
|
171
181
|
# Takes sync options or a sync_url
|
172
182
|
# You will need to call #each_page or #first_page on it
|
173
|
-
def sync(options = {
|
183
|
+
def sync(options = {initial: true})
|
174
184
|
Sync.new(self, options)
|
175
185
|
end
|
176
186
|
|
177
|
-
|
178
187
|
private
|
179
188
|
|
180
189
|
def normalize_configuration!
|
@@ -184,31 +193,31 @@ module Contentful
|
|
184
193
|
|
185
194
|
def validate_configuration!
|
186
195
|
if configuration[:space].empty?
|
187
|
-
|
196
|
+
fail ArgumentError, 'You will need to initialize a client with a :space'
|
188
197
|
end
|
189
198
|
|
190
199
|
if configuration[:access_token].empty?
|
191
|
-
|
200
|
+
fail ArgumentError, 'You will need to initialize a client with an :access_token'
|
192
201
|
end
|
193
202
|
|
194
203
|
if configuration[:api_url].empty?
|
195
|
-
|
204
|
+
fail ArgumentError, 'The client configuration needs to contain an :api_url'
|
196
205
|
end
|
197
206
|
|
198
207
|
if configuration[:default_locale].empty?
|
199
|
-
|
208
|
+
fail ArgumentError, 'The client configuration needs to contain a :default_locale'
|
200
209
|
end
|
201
210
|
|
202
211
|
unless configuration[:api_version].to_i >= 0
|
203
|
-
|
212
|
+
fail ArgumentError, 'The :api_version must be a positive number or nil'
|
204
213
|
end
|
205
214
|
|
206
215
|
unless [:header, :query_string].include? configuration[:authentication_mechanism]
|
207
|
-
|
216
|
+
fail ArgumentError, 'The authentication mechanism must be :header or :query_string'
|
208
217
|
end
|
209
218
|
|
210
219
|
unless [:auto, :manual].include? configuration[:dynamic_entries]
|
211
|
-
|
220
|
+
fail ArgumentError, 'The :dynamic_entries mode must be :auto or :manual'
|
212
221
|
end
|
213
222
|
end
|
214
223
|
end
|