contentful 2.1.3 → 2.2.0
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +24 -26
- data/README.md +5 -0
- data/coverage/.last_run.json +1 -1
- data/coverage/.resultset.json +2399 -460
- data/coverage/assets/{0.10.1 → 0.10.2}/application.css +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/application.js +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/colorbox/border.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/colorbox/controls.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/colorbox/loading.gif +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/colorbox/loading_background.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/favicon_green.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/favicon_red.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/favicon_yellow.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/loading.gif +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/magnify.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/{0.10.1 → 0.10.2}/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +17490 -3213
- data/doc/Contentful.html +3 -3
- data/doc/Contentful/AccessDenied.html +1 -1
- data/doc/Contentful/Array.html +1 -1
- data/doc/Contentful/ArrayCoercion.html +7 -7
- data/doc/Contentful/ArrayLike.html +1 -1
- data/doc/Contentful/Asset.html +1 -1
- data/doc/Contentful/BadGateway.html +159 -0
- data/doc/Contentful/BadRequest.html +1 -1
- data/doc/Contentful/BaseCoercion.html +1 -1
- data/doc/Contentful/BaseResource.html +2 -2
- data/doc/Contentful/BooleanCoercion.html +1 -1
- data/doc/Contentful/Client.html +20 -26
- data/doc/Contentful/ContentType.html +7 -1
- data/doc/Contentful/ContentTypeCache.html +1 -1
- data/doc/Contentful/DateCoercion.html +1 -1
- data/doc/Contentful/DeletedAsset.html +1 -1
- data/doc/Contentful/DeletedEntry.html +1 -1
- data/doc/Contentful/Entry.html +1 -1
- data/doc/Contentful/Error.html +16 -28
- data/doc/Contentful/Field.html +1 -1
- data/doc/Contentful/FieldsResource.html +1 -1
- data/doc/Contentful/File.html +8 -308
- data/doc/Contentful/FloatCoercion.html +1 -1
- data/doc/Contentful/IntegerCoercion.html +1 -1
- data/doc/Contentful/Link.html +1 -1
- data/doc/Contentful/LinkCoercion.html +1 -1
- data/doc/Contentful/Locale.html +1 -1
- data/doc/Contentful/Location.html +1 -1
- data/doc/Contentful/LocationCoercion.html +1 -1
- data/doc/Contentful/NotFound.html +1 -1
- data/doc/Contentful/ObjectCoercion.html +2 -2
- data/doc/Contentful/RateLimitExceeded.html +183 -2
- data/doc/Contentful/Request.html +1 -1
- data/doc/Contentful/ResourceBuilder.html +1 -1
- data/doc/Contentful/Response.html +72 -1
- data/doc/Contentful/ServerError.html +1 -1
- data/doc/Contentful/ServiceUnavailable.html +1 -1
- data/doc/Contentful/Space.html +1 -1
- data/doc/Contentful/StringCoercion.html +1 -1
- data/doc/Contentful/Support.html +49 -27
- data/doc/Contentful/SymbolCoercion.html +1 -1
- data/doc/Contentful/Sync.html +1 -1
- data/doc/Contentful/SyncPage.html +1 -1
- data/doc/Contentful/TextCoercion.html +1 -1
- data/doc/Contentful/Unauthorized.html +1 -1
- data/doc/Contentful/UnparsableJson.html +1 -1
- data/doc/Contentful/UnparsableResource.html +1 -1
- data/doc/_index.html +8 -1
- data/doc/class_list.html +1 -1
- data/doc/file.CHANGELOG.html +15 -1
- data/doc/file.LICENSE.html +1 -1
- data/doc/file.README.html +8 -1
- data/doc/index.html +8 -1
- data/doc/method_list.html +147 -155
- data/doc/top-level-namespace.html +1 -1
- data/lib/contentful/asset.rb +2 -2
- data/lib/contentful/base_resource.rb +3 -3
- data/lib/contentful/client.rb +3 -3
- data/lib/contentful/coercions.rb +1 -20
- data/lib/contentful/content_type.rb +2 -0
- data/lib/contentful/entry.rb +4 -2
- data/lib/contentful/error.rb +168 -29
- data/lib/contentful/fields_resource.rb +8 -5
- data/lib/contentful/file.rb +14 -6
- data/lib/contentful/response.rb +5 -4
- data/lib/contentful/support.rb +4 -1
- data/lib/contentful/version.rb +1 -1
- data/spec/asset_spec.rb +9 -0
- data/spec/content_type_spec.rb +10 -0
- data/spec/deleted_asset_spec.rb +10 -0
- data/spec/deleted_entry_spec.rb +10 -0
- data/spec/entry_spec.rb +11 -0
- data/spec/error_class_spec.rb +244 -3
- data/spec/field_spec.rb +21 -0
- data/spec/file_spec.rb +10 -0
- data/spec/fixtures/json_responses/400_details_errors_object.json +14 -0
- data/spec/fixtures/json_responses/400_details_errors_string.json +12 -0
- data/spec/fixtures/json_responses/400_details_string.json +8 -0
- data/spec/fixtures/json_responses/403_reasons.json +13 -0
- data/spec/fixtures/json_responses/404_id.json +11 -0
- data/spec/fixtures/json_responses/404_type.json +10 -0
- data/spec/fixtures/json_responses/default_400.json +7 -0
- data/spec/fixtures/json_responses/default_401.json +7 -0
- data/spec/fixtures/json_responses/default_403.json +7 -0
- data/spec/fixtures/json_responses/default_404.json +7 -0
- data/spec/fixtures/json_responses/default_429.json +7 -0
- data/spec/fixtures/json_responses/default_500.json +7 -0
- data/spec/fixtures/json_responses/default_502.json +7 -0
- data/spec/fixtures/json_responses/default_503.json +7 -0
- data/spec/fixtures/json_responses/other_error.json +9 -0
- data/spec/fixtures/json_responses/other_error_no_details.json +8 -0
- data/spec/fixtures/json_responses/other_error_no_message.json +8 -0
- data/spec/fixtures/json_responses/other_error_no_request_id.json +8 -0
- data/spec/fixtures/json_responses/other_error_nothing.json +6 -0
- data/spec/link_spec.rb +9 -0
- data/spec/support/json_responses.rb +4 -2
- metadata +66 -27
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
</div>
|
|
101
101
|
|
|
102
102
|
<div id="footer">
|
|
103
|
-
Generated on
|
|
103
|
+
Generated on Tue Oct 24 14:05:58 2017 by
|
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
105
105
|
0.9.9 (ruby-2.4.1).
|
|
106
106
|
</div>
|
data/lib/contentful/asset.rb
CHANGED
|
@@ -73,10 +73,10 @@ module Contentful
|
|
|
73
73
|
is_localized = file_json.keys.none? { |f| %w(fileName contentType details url).include? f }
|
|
74
74
|
if is_localized
|
|
75
75
|
locales.each do |locale|
|
|
76
|
-
@fields[locale][:file] = ::Contentful::File.new(file_json[locale.to_s] || {})
|
|
76
|
+
@fields[locale][:file] = ::Contentful::File.new(file_json[locale.to_s] || {}, @configuration)
|
|
77
77
|
end
|
|
78
78
|
else
|
|
79
|
-
@fields[internal_resource_locale][:file] = ::Contentful::File.new(file_json)
|
|
79
|
+
@fields[internal_resource_locale][:file] = ::Contentful::File.new(file_json, @configuration)
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|
|
@@ -9,8 +9,8 @@ module Contentful
|
|
|
9
9
|
@raw = item
|
|
10
10
|
@default_locale = configuration[:default_locale]
|
|
11
11
|
@depth = depth
|
|
12
|
-
@sys = hydrate_sys
|
|
13
12
|
@configuration = configuration
|
|
13
|
+
@sys = hydrate_sys
|
|
14
14
|
|
|
15
15
|
define_sys_methods!
|
|
16
16
|
end
|
|
@@ -69,7 +69,7 @@ module Contentful
|
|
|
69
69
|
elsif %w(createdAt updatedAt deletedAt).include?(k)
|
|
70
70
|
v = DateTime.parse(v)
|
|
71
71
|
end
|
|
72
|
-
result[Support.snakify(k).to_sym] = v
|
|
72
|
+
result[Support.snakify(k, @configuration[:use_camel_case]).to_sym] = v
|
|
73
73
|
end
|
|
74
74
|
result
|
|
75
75
|
end
|
|
@@ -86,7 +86,7 @@ module Contentful
|
|
|
86
86
|
|
|
87
87
|
def build_link(item)
|
|
88
88
|
require_relative 'link'
|
|
89
|
-
::Contentful::Link.new(item)
|
|
89
|
+
::Contentful::Link.new(item, @configuration)
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
end
|
data/lib/contentful/client.rb
CHANGED
|
@@ -36,13 +36,12 @@ module Contentful
|
|
|
36
36
|
max_rate_limit_retries: 1,
|
|
37
37
|
max_rate_limit_wait: 60,
|
|
38
38
|
max_include_resolution_depth: 20,
|
|
39
|
+
use_camel_case: false,
|
|
39
40
|
application_name: nil,
|
|
40
41
|
application_version: nil,
|
|
41
42
|
integration_name: nil,
|
|
42
43
|
integration_version: nil
|
|
43
44
|
}
|
|
44
|
-
# Rate Limit Reset Header Key
|
|
45
|
-
RATE_LIMIT_RESET_HEADER_KEY = 'x-contentful-ratelimit-reset'
|
|
46
45
|
|
|
47
46
|
attr_reader :configuration, :logger, :proxy
|
|
48
47
|
|
|
@@ -70,6 +69,7 @@ module Contentful
|
|
|
70
69
|
# @option given_configuration [Number] :max_rate_limit_retries
|
|
71
70
|
# @option given_configuration [Number] :max_rate_limit_wait
|
|
72
71
|
# @option given_configuration [Number] :max_include_resolution_depth
|
|
72
|
+
# @option given_configuration [Boolean] :use_camel_case
|
|
73
73
|
# @option given_configuration [Boolean] :gzip_encoded
|
|
74
74
|
# @option given_configuration [Boolean] :raw_mode
|
|
75
75
|
# @option given_configuration [false, ::Logger] :logger
|
|
@@ -294,7 +294,7 @@ module Contentful
|
|
|
294
294
|
raise error if configuration[:raise_errors]
|
|
295
295
|
return error
|
|
296
296
|
rescue Contentful::RateLimitExceeded => rate_limit_error
|
|
297
|
-
reset_time = rate_limit_error.
|
|
297
|
+
reset_time = rate_limit_error.reset_time.to_i
|
|
298
298
|
if should_retry(retries_left, reset_time, configuration[:max_rate_limit_wait])
|
|
299
299
|
retries_left -= 1
|
|
300
300
|
logger.info(retry_message(retries_left, reset_time)) if logger
|
data/lib/contentful/coercions.rb
CHANGED
|
@@ -75,26 +75,7 @@ module Contentful
|
|
|
75
75
|
class ObjectCoercion < BaseCoercion
|
|
76
76
|
# Coerces value to hash, symbolizing each key
|
|
77
77
|
def coerce
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
private
|
|
82
|
-
|
|
83
|
-
def symbolize_recursive(hash)
|
|
84
|
-
{}.tap do |h|
|
|
85
|
-
hash.each { |key, value| h[key.to_sym] = map_value(value) }
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def map_value(thing)
|
|
90
|
-
case thing
|
|
91
|
-
when Hash
|
|
92
|
-
symbolize_recursive(thing)
|
|
93
|
-
when Array
|
|
94
|
-
thing.map { |v| map_value(v) }
|
|
95
|
-
else
|
|
96
|
-
thing
|
|
97
|
-
end
|
|
78
|
+
JSON.parse(JSON.dump(value), symbolize_names: true)
|
|
98
79
|
end
|
|
99
80
|
end
|
|
100
81
|
|
data/lib/contentful/entry.rb
CHANGED
|
@@ -16,7 +16,8 @@ module Contentful
|
|
|
16
16
|
return build_nested_resource(value, includes) if Support.link?(value)
|
|
17
17
|
return coerce_link_array(value, includes) if Support.link_array?(value)
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
content_type_key = Support.snakify('contentType', @configuration[:use_camel_case])
|
|
20
|
+
content_type = ContentTypeCache.cache_get(sys[:space].id, sys[content_type_key.to_sym].id)
|
|
20
21
|
|
|
21
22
|
unless content_type.nil?
|
|
22
23
|
content_type_field = content_type.field_for(field_id)
|
|
@@ -76,7 +77,8 @@ module Contentful
|
|
|
76
77
|
protected
|
|
77
78
|
|
|
78
79
|
def repr_name
|
|
79
|
-
|
|
80
|
+
content_type_key = Support.snakify('contentType', @configuration[:use_camel_case]).to_sym
|
|
81
|
+
"#{super}[#{sys[content_type_key].id}]"
|
|
80
82
|
end
|
|
81
83
|
end
|
|
82
84
|
end
|
data/lib/contentful/error.rb
CHANGED
|
@@ -6,56 +6,195 @@ module Contentful
|
|
|
6
6
|
|
|
7
7
|
def initialize(response)
|
|
8
8
|
@response = response
|
|
9
|
-
super
|
|
9
|
+
super best_available_message
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
# Shortcut for creating specialized error classes
|
|
13
13
|
# USAGE rescue Contentful::Error[404]
|
|
14
14
|
def self.[](error_status_code)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
errors = {
|
|
16
|
+
400 => BadRequest,
|
|
17
|
+
401 => Unauthorized,
|
|
18
|
+
403 => AccessDenied,
|
|
19
|
+
404 => NotFound,
|
|
20
|
+
429 => RateLimitExceeded,
|
|
21
|
+
500 => ServerError,
|
|
22
|
+
502 => BadGateway,
|
|
23
|
+
503 => ServiceUnavailable
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
errors.key?(error_status_code) ? errors[error_status_code] : Error
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
protected
|
|
30
|
+
|
|
31
|
+
def default_error_message
|
|
32
|
+
"The following error was received: #{@response.raw.body}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def handle_details(details)
|
|
36
|
+
details.to_s
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def additional_info?
|
|
40
|
+
false
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def additional_info
|
|
44
|
+
[]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def best_available_message
|
|
48
|
+
error_message = [
|
|
49
|
+
"HTTP status code: #{@response.raw.status}"
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
begin
|
|
53
|
+
response_json = @response.load_json
|
|
54
|
+
message = response_json.fetch('message', default_error_message)
|
|
55
|
+
details = response_json.fetch('details', nil)
|
|
56
|
+
request_id = response_json.fetch('requestId', nil)
|
|
57
|
+
|
|
58
|
+
error_message << "Message: #{message}"
|
|
59
|
+
error_message << "Details: #{handle_details(details)}" if details
|
|
60
|
+
error_message << "Request ID: #{request_id}" if request_id
|
|
61
|
+
rescue
|
|
62
|
+
error_message << "Message: #{default_error_message}"
|
|
32
63
|
end
|
|
64
|
+
|
|
65
|
+
error_message << additional_info if additional_info?
|
|
66
|
+
|
|
67
|
+
error_message.join("\n")
|
|
33
68
|
end
|
|
34
69
|
end
|
|
35
70
|
|
|
36
|
-
# 404
|
|
37
|
-
class NotFound < Error; end
|
|
38
|
-
|
|
39
71
|
# 400
|
|
40
|
-
class BadRequest < Error
|
|
72
|
+
class BadRequest < Error
|
|
73
|
+
protected
|
|
41
74
|
|
|
42
|
-
|
|
43
|
-
|
|
75
|
+
def default_error_message
|
|
76
|
+
'The request was malformed or missing a required parameter.'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def handle_details(details)
|
|
80
|
+
return details if details.is_a?(String)
|
|
81
|
+
|
|
82
|
+
handle_detail = proc do |detail|
|
|
83
|
+
return detail if detail.is_a?(String)
|
|
84
|
+
detail.fetch('details', nil)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
inner_details = details['errors'].map { |detail| handle_detail[detail] }.reject(&:nil?)
|
|
88
|
+
inner_details.join("\n\t")
|
|
89
|
+
end
|
|
90
|
+
end
|
|
44
91
|
|
|
45
92
|
# 401
|
|
46
|
-
class Unauthorized < Error
|
|
93
|
+
class Unauthorized < Error
|
|
94
|
+
protected
|
|
95
|
+
|
|
96
|
+
def default_error_message
|
|
97
|
+
'The authorization token was invalid.'
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# 403
|
|
102
|
+
class AccessDenied < Error
|
|
103
|
+
protected
|
|
104
|
+
|
|
105
|
+
def default_error_message
|
|
106
|
+
'The specified token does not have access to the requested resource.'
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def handle_details(details)
|
|
110
|
+
"\n\tReasons:\n\t\t#{details['reasons'].join("\n\t\t")}"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# 404
|
|
115
|
+
class NotFound < Error
|
|
116
|
+
protected
|
|
117
|
+
|
|
118
|
+
def default_error_message
|
|
119
|
+
'The requested resource or endpoint could not be found.'
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def handle_details(details)
|
|
123
|
+
message = "The requested #{details['type']} could not be found."
|
|
124
|
+
|
|
125
|
+
resource_id = details.fetch('id', nil)
|
|
126
|
+
message += " ID: #{resource_id}." if resource_id
|
|
127
|
+
|
|
128
|
+
message
|
|
129
|
+
end
|
|
130
|
+
end
|
|
47
131
|
|
|
48
132
|
# 429
|
|
49
|
-
class RateLimitExceeded < Error
|
|
133
|
+
class RateLimitExceeded < Error
|
|
134
|
+
# Rate Limit Reset Header Key
|
|
135
|
+
RATE_LIMIT_RESET_HEADER_KEY = 'x-contentful-ratelimit-reset'
|
|
136
|
+
|
|
137
|
+
def reset_time?
|
|
138
|
+
# rubocop:disable Style/DoubleNegation
|
|
139
|
+
!!reset_time
|
|
140
|
+
# rubocop:enable Style/DoubleNegation
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Time until next available request, in seconds.
|
|
144
|
+
def reset_time
|
|
145
|
+
@reset_time ||= @response.raw[RATE_LIMIT_RESET_HEADER_KEY]
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
protected
|
|
149
|
+
|
|
150
|
+
def additional_info?
|
|
151
|
+
reset_time?
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def additional_info
|
|
155
|
+
["Time until reset (seconds): #{reset_time}"]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def default_error_message
|
|
159
|
+
'Rate limit exceeded. Too many requests.'
|
|
160
|
+
end
|
|
161
|
+
end
|
|
50
162
|
|
|
51
163
|
# 500
|
|
52
|
-
class ServerError < Error
|
|
164
|
+
class ServerError < Error
|
|
165
|
+
protected
|
|
166
|
+
|
|
167
|
+
def default_error_message
|
|
168
|
+
'Internal server error.'
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# 502
|
|
173
|
+
class BadGateway < Error
|
|
174
|
+
protected
|
|
175
|
+
|
|
176
|
+
def default_error_message
|
|
177
|
+
'The requested space is hibernated.'
|
|
178
|
+
end
|
|
179
|
+
end
|
|
53
180
|
|
|
54
181
|
# 503
|
|
55
|
-
class ServiceUnavailable < Error
|
|
182
|
+
class ServiceUnavailable < Error
|
|
183
|
+
protected
|
|
184
|
+
|
|
185
|
+
def default_error_message
|
|
186
|
+
'The request was malformed or missing a required parameter.'
|
|
187
|
+
end
|
|
188
|
+
end
|
|
56
189
|
|
|
57
190
|
# Raised when response is no valid json
|
|
58
|
-
class UnparsableJson < Error
|
|
191
|
+
class UnparsableJson < Error
|
|
192
|
+
protected
|
|
193
|
+
|
|
194
|
+
def default_error_message
|
|
195
|
+
@response.error_message
|
|
196
|
+
end
|
|
197
|
+
end
|
|
59
198
|
|
|
60
199
|
# Raised when response is not parsable as a Contentful::Resource
|
|
61
200
|
class UnparsableResource < StandardError; end
|
|
@@ -65,7 +65,8 @@ module Contentful
|
|
|
65
65
|
links = fields.keys.select { |property| known_link?(property) }
|
|
66
66
|
processed_raw = raw.clone
|
|
67
67
|
raw['fields'].each do |k, v|
|
|
68
|
-
|
|
68
|
+
links_key = Support.snakify(k, @configuration[:use_camel_case])
|
|
69
|
+
processed_raw['fields'][k] = links.include?(links_key.to_sym) ? send(links_key) : v
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
processed_raw
|
|
@@ -91,8 +92,9 @@ module Contentful
|
|
|
91
92
|
raw['fields'].each do |name, locales|
|
|
92
93
|
locales.each do |loc, value|
|
|
93
94
|
result[loc] ||= {}
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
name = Support.snakify(name, @configuration[:use_camel_case])
|
|
96
|
+
result[loc][name.to_sym] = coerce(
|
|
97
|
+
name,
|
|
96
98
|
value,
|
|
97
99
|
includes
|
|
98
100
|
)
|
|
@@ -100,8 +102,9 @@ module Contentful
|
|
|
100
102
|
end
|
|
101
103
|
else
|
|
102
104
|
raw['fields'].each do |name, value|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
name = Support.snakify(name, @configuration[:use_camel_case])
|
|
106
|
+
result[locale][name.to_sym] = coerce(
|
|
107
|
+
name,
|
|
105
108
|
value,
|
|
106
109
|
includes
|
|
107
110
|
)
|
data/lib/contentful/file.rb
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
module Contentful
|
|
2
2
|
# An Assets's file info
|
|
3
3
|
class File
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
def initialize(json, configuration)
|
|
5
|
+
@configuration = configuration
|
|
6
|
+
|
|
7
|
+
define_fields!(json)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def define_fields!(json)
|
|
13
|
+
json.each do |k, v|
|
|
14
|
+
define_singleton_method Support.snakify(k, @configuration[:use_camel_case]) do
|
|
15
|
+
v
|
|
16
|
+
end
|
|
17
|
+
end
|
|
10
18
|
end
|
|
11
19
|
end
|
|
12
20
|
end
|
data/lib/contentful/response.rb
CHANGED
|
@@ -41,6 +41,11 @@ module Contentful
|
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
# Returns the JSON body of the response
|
|
45
|
+
def load_json
|
|
46
|
+
MultiJson.load(unzip_response(raw))
|
|
47
|
+
end
|
|
48
|
+
|
|
44
49
|
private
|
|
45
50
|
|
|
46
51
|
def error_object?
|
|
@@ -88,10 +93,6 @@ module Contentful
|
|
|
88
93
|
UnparsableJson.new(self)
|
|
89
94
|
end
|
|
90
95
|
|
|
91
|
-
def load_json
|
|
92
|
-
MultiJson.load(unzip_response(raw))
|
|
93
|
-
end
|
|
94
|
-
|
|
95
96
|
def unzip_response(response)
|
|
96
97
|
parsed_response = response.to_s
|
|
97
98
|
if response.headers['Content-Encoding'].eql?('gzip')
|