contentful 2.15.4 → 2.16.3
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 +17 -0
- data/README.md +20 -11
- data/lib/contentful/array_like.rb +9 -0
- data/lib/contentful/base_resource.rb +12 -1
- data/lib/contentful/fields_resource.rb +1 -0
- data/lib/contentful/version.rb +1 -1
- metadata +3 -373
- data/.gitignore +0 -7
- data/.rspec +0 -1
- data/.rubocop.yml +0 -31
- data/.rubocop_todo.yml +0 -35
- data/.ruby-version +0 -1
- data/.travis.yml +0 -15
- data/.yardopts +0 -4
- data/Gemfile +0 -9
- data/Gemfile.lock +0 -170
- data/Guardfile +0 -24
- data/RELEASE.md +0 -8
- data/Rakefile +0 -33
- data/contentful.gemspec +0 -44
- data/contentful.rb.sublime-project +0 -9
- data/contentful.rb.sublime-workspace +0 -2154
- data/coverage/.last_run.json +0 -5
- data/coverage/.resultset.json +0 -2421
- data/coverage/.resultset.json.lock +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_both.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
- data/coverage/assets/0.12.2/application.css +0 -1
- data/coverage/assets/0.12.2/application.js +0 -7
- data/coverage/assets/0.12.2/colorbox/border.png +0 -0
- data/coverage/assets/0.12.2/colorbox/controls.png +0 -0
- data/coverage/assets/0.12.2/colorbox/loading.gif +0 -0
- data/coverage/assets/0.12.2/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.12.2/favicon_green.png +0 -0
- data/coverage/assets/0.12.2/favicon_red.png +0 -0
- data/coverage/assets/0.12.2/favicon_yellow.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.12.2/loading.gif +0 -0
- data/coverage/assets/0.12.2/magnify.png +0 -0
- data/coverage/index.html +0 -26587
- data/doc/Contentful/AccessDenied.html +0 -159
- data/doc/Contentful/Array.html +0 -844
- data/doc/Contentful/ArrayCoercion.html +0 -242
- data/doc/Contentful/ArrayLike.html +0 -624
- data/doc/Contentful/Asset.html +0 -486
- data/doc/Contentful/BadGateway.html +0 -159
- data/doc/Contentful/BadRequest.html +0 -159
- data/doc/Contentful/BaseCoercion.html +0 -445
- data/doc/Contentful/BaseResource.html +0 -598
- data/doc/Contentful/BooleanCoercion.html +0 -242
- data/doc/Contentful/Client.html +0 -1738
- data/doc/Contentful/ContentType.html +0 -617
- data/doc/Contentful/ContentTypeCache.html +0 -428
- data/doc/Contentful/DateCoercion.html +0 -244
- data/doc/Contentful/DeletedAsset.html +0 -156
- data/doc/Contentful/DeletedEntry.html +0 -156
- data/doc/Contentful/EmptyFieldError.html +0 -217
- data/doc/Contentful/Entry.html +0 -334
- data/doc/Contentful/Error.html +0 -407
- data/doc/Contentful/Field.html +0 -935
- data/doc/Contentful/FieldsResource.html +0 -583
- data/doc/Contentful/File.html +0 -218
- data/doc/Contentful/FloatCoercion.html +0 -238
- data/doc/Contentful/IntegerCoercion.html +0 -238
- data/doc/Contentful/Link.html +0 -246
- data/doc/Contentful/LinkCoercion.html +0 -156
- data/doc/Contentful/Locale.html +0 -536
- data/doc/Contentful/Location.html +0 -382
- data/doc/Contentful/LocationCoercion.html +0 -238
- data/doc/Contentful/NotFound.html +0 -159
- data/doc/Contentful/ObjectCoercion.html +0 -238
- data/doc/Contentful/RateLimitExceeded.html +0 -346
- data/doc/Contentful/Request.html +0 -895
- data/doc/Contentful/ResourceBuilder.html +0 -1067
- data/doc/Contentful/ResourceReferences.html +0 -254
- data/doc/Contentful/Response.html +0 -708
- data/doc/Contentful/RichTextCoercion.html +0 -238
- data/doc/Contentful/ServerError.html +0 -159
- data/doc/Contentful/ServiceUnavailable.html +0 -159
- data/doc/Contentful/Space.html +0 -392
- data/doc/Contentful/StringCoercion.html +0 -242
- data/doc/Contentful/Support.html +0 -788
- data/doc/Contentful/SymbolCoercion.html +0 -169
- data/doc/Contentful/Sync.html +0 -653
- data/doc/Contentful/SyncPage.html +0 -807
- data/doc/Contentful/TextCoercion.html +0 -169
- data/doc/Contentful/Unauthorized.html +0 -159
- data/doc/Contentful/UnparsableJson.html +0 -159
- data/doc/Contentful/UnparsableResource.html +0 -135
- data/doc/Contentful.html +0 -157
- data/doc/_index.html +0 -563
- data/doc/class_list.html +0 -51
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -58
- data/doc/css/style.css +0 -496
- data/doc/file.CHANGELOG.html +0 -715
- data/doc/file.LICENSE.html +0 -70
- data/doc/file.README.html +0 -758
- data/doc/file_list.html +0 -66
- data/doc/frames.html +0 -17
- data/doc/index.html +0 -758
- data/doc/js/app.js +0 -314
- data/doc/js/full_list.js +0 -216
- data/doc/js/jquery.js +0 -4
- data/doc/method_list.html +0 -1187
- data/doc/top-level-namespace.html +0 -110
- data/examples/custom_classes.rb +0 -39
- data/examples/example_queries.rb +0 -26
- data/examples/raise_errors.rb +0 -20
- data/examples/raw_mode.rb +0 -14
- data/spec/array_spec.rb +0 -177
- data/spec/asset_spec.rb +0 -192
- data/spec/auto_includes_spec.rb +0 -12
- data/spec/client_class_spec.rb +0 -86
- data/spec/client_configuration_spec.rb +0 -394
- data/spec/content_type_spec.rb +0 -49
- data/spec/deleted_asset_spec.rb +0 -38
- data/spec/deleted_entry_spec.rb +0 -38
- data/spec/entry_spec.rb +0 -787
- data/spec/error_class_spec.rb +0 -327
- data/spec/error_requests_spec.rb +0 -87
- data/spec/field_spec.rb +0 -95
- data/spec/file_spec.rb +0 -33
- data/spec/fixtures/json_responses/400_details_errors_object.json +0 -14
- data/spec/fixtures/json_responses/400_details_errors_string.json +0 -12
- data/spec/fixtures/json_responses/400_details_string.json +0 -8
- data/spec/fixtures/json_responses/403_reasons.json +0 -13
- data/spec/fixtures/json_responses/404_details_string.json +0 -8
- data/spec/fixtures/json_responses/404_id.json +0 -11
- data/spec/fixtures/json_responses/404_sys_type.json +0 -12
- data/spec/fixtures/json_responses/404_type.json +0 -10
- data/spec/fixtures/json_responses/content_type.json +0 -83
- data/spec/fixtures/json_responses/default_400.json +0 -7
- data/spec/fixtures/json_responses/default_401.json +0 -7
- data/spec/fixtures/json_responses/default_403.json +0 -7
- data/spec/fixtures/json_responses/default_404.json +0 -7
- data/spec/fixtures/json_responses/default_429.json +0 -7
- data/spec/fixtures/json_responses/default_500.json +0 -7
- data/spec/fixtures/json_responses/default_502.json +0 -7
- data/spec/fixtures/json_responses/default_503.json +0 -7
- data/spec/fixtures/json_responses/includes.json +0 -111
- data/spec/fixtures/json_responses/link_array.json +0 -43
- data/spec/fixtures/json_responses/not_found.json +0 -13
- data/spec/fixtures/json_responses/nyancat.json +0 -48
- data/spec/fixtures/json_responses/other_error.json +0 -9
- data/spec/fixtures/json_responses/other_error_no_details.json +0 -8
- data/spec/fixtures/json_responses/other_error_no_message.json +0 -8
- data/spec/fixtures/json_responses/other_error_no_request_id.json +0 -8
- data/spec/fixtures/json_responses/other_error_nothing.json +0 -6
- data/spec/fixtures/json_responses/self_link.json +0 -82
- data/spec/fixtures/json_responses/unparsable.json +0 -13
- data/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml +0 -159
- data/spec/fixtures/vcr_cassettes/array/marshal_unpublished.yml +0 -315
- data/spec/fixtures/vcr_cassettes/array/nested_resources.yml +0 -159
- data/spec/fixtures/vcr_cassettes/array.yml +0 -288
- data/spec/fixtures/vcr_cassettes/arrayField.yml +0 -87
- data/spec/fixtures/vcr_cassettes/array_page_1.yml +0 -106
- data/spec/fixtures/vcr_cassettes/array_page_2.yml +0 -73
- data/spec/fixtures/vcr_cassettes/asset/select_empty_array.yml +0 -104
- data/spec/fixtures/vcr_cassettes/asset/select_no_sys.yml +0 -119
- data/spec/fixtures/vcr_cassettes/asset/select_one_field.yml +0 -97
- data/spec/fixtures/vcr_cassettes/asset/select_only_sys.yml +0 -88
- data/spec/fixtures/vcr_cassettes/asset.yml +0 -96
- data/spec/fixtures/vcr_cassettes/assets/issues_129.yml +0 -90
- data/spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml +0 -115
- data/spec/fixtures/vcr_cassettes/bad_request.yml +0 -76
- data/spec/fixtures/vcr_cassettes/content_type.yml +0 -147
- data/spec/fixtures/vcr_cassettes/entries/empty_fields.yml +0 -246
- data/spec/fixtures/vcr_cassettes/entries/issue_117.yml +0 -201
- data/spec/fixtures/vcr_cassettes/entries/issue_125.yml +0 -198
- data/spec/fixtures/vcr_cassettes/entries/rich_text.yml +0 -1707
- data/spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml +0 -460
- data/spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml +0 -653
- data/spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml +0 -983
- data/spec/fixtures/vcr_cassettes/entries/unresolvable_assets.yml +0 -89
- data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter.yml +0 -159
- data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter_deeply_nested.yml +0 -167
- data/spec/fixtures/vcr_cassettes/entries.yml +0 -561
- data/spec/fixtures/vcr_cassettes/entry/custom_resource.yml +0 -168
- data/spec/fixtures/vcr_cassettes/entry/include_resolution.yml +0 -101
- data/spec/fixtures/vcr_cassettes/entry/include_resolution_uniques.yml +0 -81
- data/spec/fixtures/vcr_cassettes/entry/json_objects.yml +0 -88
- data/spec/fixtures/vcr_cassettes/entry/json_objects_client.yml +0 -86
- data/spec/fixtures/vcr_cassettes/entry/marshal_138.yml +0 -159
- data/spec/fixtures/vcr_cassettes/entry/marshal_unpublished.yml +0 -303
- data/spec/fixtures/vcr_cassettes/entry/marshall.yml +0 -293
- data/spec/fixtures/vcr_cassettes/entry/raw.yml +0 -201
- data/spec/fixtures/vcr_cassettes/entry/search_link_to_asset.yml +0 -81
- data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry.yml +0 -81
- data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry_with_custom_query.yml +0 -115
- data/spec/fixtures/vcr_cassettes/entry/select_empty_array.yml +0 -111
- data/spec/fixtures/vcr_cassettes/entry/select_no_sys.yml +0 -102
- data/spec/fixtures/vcr_cassettes/entry/select_one_field.yml +0 -76
- data/spec/fixtures/vcr_cassettes/entry/select_one_field_proper.yml +0 -114
- data/spec/fixtures/vcr_cassettes/entry/select_only_sys.yml +0 -111
- data/spec/fixtures/vcr_cassettes/entry.yml +0 -102
- data/spec/fixtures/vcr_cassettes/entry_cache.yml +0 -288
- data/spec/fixtures/vcr_cassettes/entry_locales.yml +0 -104
- data/spec/fixtures/vcr_cassettes/field.yml +0 -147
- data/spec/fixtures/vcr_cassettes/human.yml +0 -118
- data/spec/fixtures/vcr_cassettes/linkField.yml +0 -83
- data/spec/fixtures/vcr_cassettes/locale.yml +0 -83
- data/spec/fixtures/vcr_cassettes/locale_from_environment.yml +0 -121
- data/spec/fixtures/vcr_cassettes/location.yml +0 -193
- data/spec/fixtures/vcr_cassettes/multi_locale_array_reference.yml +0 -196
- data/spec/fixtures/vcr_cassettes/multi_locale_reference.yml +0 -214
- data/spec/fixtures/vcr_cassettes/not_found.yml +0 -76
- data/spec/fixtures/vcr_cassettes/nyancat.yml +0 -102
- data/spec/fixtures/vcr_cassettes/query_array_1.yml +0 -89
- data/spec/fixtures/vcr_cassettes/query_array_2.yml +0 -89
- data/spec/fixtures/vcr_cassettes/ratelimit.yml +0 -64
- data/spec/fixtures/vcr_cassettes/ratelimit_retry.yml +0 -294
- data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +0 -102
- data/spec/fixtures/vcr_cassettes/space.yml +0 -83
- data/spec/fixtures/vcr_cassettes/sync_deleted_asset.yml +0 -174
- data/spec/fixtures/vcr_cassettes/sync_deleted_entry.yml +0 -89
- data/spec/fixtures/vcr_cassettes/sync_deletion.yml +0 -191
- data/spec/fixtures/vcr_cassettes/sync_environment.yml +0 -81
- data/spec/fixtures/vcr_cassettes/sync_page.yml +0 -637
- data/spec/fixtures/vcr_cassettes/sync_page_2.yml +0 -71
- data/spec/fixtures/vcr_cassettes/sync_page_short.yml +0 -106
- data/spec/fixtures/vcr_cassettes/unauthorized.yml +0 -64
- data/spec/fixtures/vcr_cassettes/unavailable.yml +0 -76
- data/spec/link_spec.rb +0 -50
- data/spec/locale_spec.rb +0 -37
- data/spec/location_spec.rb +0 -25
- data/spec/request_spec.rb +0 -57
- data/spec/resource_building_spec.rb +0 -31
- data/spec/response_spec.rb +0 -62
- data/spec/space_spec.rb +0 -31
- data/spec/spec_helper.rb +0 -14
- data/spec/support/client.rb +0 -6
- data/spec/support/json_responses.rb +0 -18
- data/spec/support/vcr.rb +0 -16
- data/spec/sync_page_spec.rb +0 -103
- data/spec/sync_spec.rb +0 -180
data/spec/error_class_spec.rb
DELETED
@@ -1,327 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Contentful::Error do
|
4
|
-
let(:r) { Contentful::Response.new raw_fixture('not_found', 404) }
|
5
|
-
|
6
|
-
describe '#response' do
|
7
|
-
it 'returns the response the error has been initialized with' do
|
8
|
-
expect(Contentful::Error.new(r).response).to be r
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '#message' do
|
13
|
-
it 'returns the message found in the response json' do
|
14
|
-
message = "HTTP status code: 404\n"\
|
15
|
-
"Message: The resource could not be found.\n"\
|
16
|
-
"Details: {\"type\"=>\"Entry\", \"space\"=>\"cfexampleapi\", \"id\"=>\"not found\"}\n"\
|
17
|
-
"Request ID: 85f-351076632"
|
18
|
-
expect(Contentful::Error.new(r).message).not_to be_nil
|
19
|
-
expect(Contentful::Error.new(r).message).to eq message
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'message types' do
|
23
|
-
describe 'default messages' do
|
24
|
-
it '400' do
|
25
|
-
response = Contentful::Response.new raw_fixture('default_400', 400)
|
26
|
-
error = Contentful::Error[response.raw.status].new(response)
|
27
|
-
|
28
|
-
message = "HTTP status code: 400\n"\
|
29
|
-
"Message: The request was malformed or missing a required parameter.\n"\
|
30
|
-
"Request ID: 85f-351076632"
|
31
|
-
expect(error.message).to eq message
|
32
|
-
end
|
33
|
-
|
34
|
-
it '401' do
|
35
|
-
response = Contentful::Response.new raw_fixture('default_401', 401)
|
36
|
-
error = Contentful::Error[response.raw.status].new(response)
|
37
|
-
|
38
|
-
message = "HTTP status code: 401\n"\
|
39
|
-
"Message: The authorization token was invalid.\n"\
|
40
|
-
"Request ID: 85f-351076632"
|
41
|
-
expect(error.message).to eq message
|
42
|
-
end
|
43
|
-
|
44
|
-
it '403' do
|
45
|
-
response = Contentful::Response.new raw_fixture('default_403', 403)
|
46
|
-
error = Contentful::Error[response.raw.status].new(response)
|
47
|
-
|
48
|
-
message = "HTTP status code: 403\n"\
|
49
|
-
"Message: The specified token does not have access to the requested resource.\n"\
|
50
|
-
"Request ID: 85f-351076632"
|
51
|
-
expect(error.message).to eq message
|
52
|
-
end
|
53
|
-
|
54
|
-
it '404' do
|
55
|
-
response = Contentful::Response.new raw_fixture('default_404', 404)
|
56
|
-
error = Contentful::Error[response.raw.status].new(response)
|
57
|
-
|
58
|
-
message = "HTTP status code: 404\n"\
|
59
|
-
"Message: The requested resource or endpoint could not be found.\n"\
|
60
|
-
"Request ID: 85f-351076632"
|
61
|
-
expect(error.message).to eq message
|
62
|
-
end
|
63
|
-
|
64
|
-
it '429' do
|
65
|
-
response = Contentful::Response.new raw_fixture('default_429', 429)
|
66
|
-
error = Contentful::Error[response.raw.status].new(response)
|
67
|
-
|
68
|
-
message = "HTTP status code: 429\n"\
|
69
|
-
"Message: Rate limit exceeded. Too many requests.\n"\
|
70
|
-
"Request ID: 85f-351076632"
|
71
|
-
expect(error.message).to eq message
|
72
|
-
end
|
73
|
-
|
74
|
-
it '500' do
|
75
|
-
response = Contentful::Response.new raw_fixture('default_500', 500)
|
76
|
-
error = Contentful::Error[response.raw.status].new(response)
|
77
|
-
|
78
|
-
message = "HTTP status code: 500\n"\
|
79
|
-
"Message: Internal server error.\n"\
|
80
|
-
"Request ID: 85f-351076632"
|
81
|
-
expect(error.message).to eq message
|
82
|
-
end
|
83
|
-
|
84
|
-
it '502' do
|
85
|
-
response = Contentful::Response.new raw_fixture('default_502', 502)
|
86
|
-
error = Contentful::Error[response.raw.status].new(response)
|
87
|
-
|
88
|
-
message = "HTTP status code: 502\n"\
|
89
|
-
"Message: The requested space is hibernated.\n"\
|
90
|
-
"Request ID: 85f-351076632"
|
91
|
-
expect(error.message).to eq message
|
92
|
-
end
|
93
|
-
|
94
|
-
it '503' do
|
95
|
-
response = Contentful::Response.new raw_fixture('default_503', 503)
|
96
|
-
error = Contentful::Error[response.raw.status].new(response)
|
97
|
-
|
98
|
-
message = "HTTP status code: 503\n"\
|
99
|
-
"Message: The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.\n"\
|
100
|
-
"Request ID: 85f-351076632"
|
101
|
-
expect(error.message).to eq message
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
describe 'special cases' do
|
106
|
-
describe '400' do
|
107
|
-
it 'details is a string' do
|
108
|
-
response = Contentful::Response.new raw_fixture('400_details_string', 400)
|
109
|
-
error = Contentful::Error[response.raw.status].new(response)
|
110
|
-
|
111
|
-
message = "HTTP status code: 400\n"\
|
112
|
-
"Message: The request was malformed or missing a required parameter.\n"\
|
113
|
-
"Details: some error\n"\
|
114
|
-
"Request ID: 85f-351076632"
|
115
|
-
expect(error.message).to eq message
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'details is an object, internal errors are strings' do
|
119
|
-
response = Contentful::Response.new raw_fixture('400_details_errors_string', 400)
|
120
|
-
error = Contentful::Error[response.raw.status].new(response)
|
121
|
-
|
122
|
-
message = "HTTP status code: 400\n"\
|
123
|
-
"Message: The request was malformed or missing a required parameter.\n"\
|
124
|
-
"Details: some error\n"\
|
125
|
-
"Request ID: 85f-351076632"
|
126
|
-
expect(error.message).to eq message
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'details is an object, internal errors are objects which have details' do
|
130
|
-
response = Contentful::Response.new raw_fixture('400_details_errors_object', 400)
|
131
|
-
error = Contentful::Error[response.raw.status].new(response)
|
132
|
-
|
133
|
-
message = "HTTP status code: 400\n"\
|
134
|
-
"Message: The request was malformed or missing a required parameter.\n"\
|
135
|
-
"Details: some error\n"\
|
136
|
-
"Request ID: 85f-351076632"
|
137
|
-
expect(error.message).to eq message
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
describe '403' do
|
142
|
-
it 'has an array of reasons' do
|
143
|
-
response = Contentful::Response.new raw_fixture('403_reasons', 403)
|
144
|
-
error = Contentful::Error[response.raw.status].new(response)
|
145
|
-
|
146
|
-
message = "HTTP status code: 403\n"\
|
147
|
-
"Message: The specified token does not have access to the requested resource.\n"\
|
148
|
-
"Details: \n\tReasons:\n"\
|
149
|
-
"\t\tfoo\n"\
|
150
|
-
"\t\tbar\n"\
|
151
|
-
"Request ID: 85f-351076632"
|
152
|
-
expect(error.message).to eq message
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
describe '404' do
|
157
|
-
it 'details is a string' do
|
158
|
-
response = Contentful::Response.new raw_fixture('404_details_string', 404)
|
159
|
-
error = Contentful::Error[response.raw.status].new(response)
|
160
|
-
|
161
|
-
message = "HTTP status code: 404\n"\
|
162
|
-
"Message: The requested resource or endpoint could not be found.\n"\
|
163
|
-
"Details: The resource could not be found\n"\
|
164
|
-
"Request ID: 85f-351076632"
|
165
|
-
expect(error.message).to eq message
|
166
|
-
end
|
167
|
-
|
168
|
-
describe 'has a type' do
|
169
|
-
it 'type is on the top level' do
|
170
|
-
response = Contentful::Response.new raw_fixture('404_type', 404)
|
171
|
-
error = Contentful::Error[response.raw.status].new(response)
|
172
|
-
|
173
|
-
message = "HTTP status code: 404\n"\
|
174
|
-
"Message: The requested resource or endpoint could not be found.\n"\
|
175
|
-
"Details: The requested Asset could not be found.\n"\
|
176
|
-
"Request ID: 85f-351076632"
|
177
|
-
expect(error.message).to eq message
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'type is not on the top level' do
|
181
|
-
response = Contentful::Response.new raw_fixture('404_sys_type', 404)
|
182
|
-
error = Contentful::Error[response.raw.status].new(response)
|
183
|
-
|
184
|
-
message = "HTTP status code: 404\n"\
|
185
|
-
"Message: The requested resource or endpoint could not be found.\n"\
|
186
|
-
"Details: The requested Space could not be found.\n"\
|
187
|
-
"Request ID: 85f-351076632"
|
188
|
-
expect(error.message).to eq message
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
it 'can specify the resource id' do
|
193
|
-
response = Contentful::Response.new raw_fixture('404_id', 404)
|
194
|
-
error = Contentful::Error[response.raw.status].new(response)
|
195
|
-
|
196
|
-
message = "HTTP status code: 404\n"\
|
197
|
-
"Message: The requested resource or endpoint could not be found.\n"\
|
198
|
-
"Details: The requested Asset could not be found. ID: foobar.\n"\
|
199
|
-
"Request ID: 85f-351076632"
|
200
|
-
expect(error.message).to eq message
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe '429' do
|
205
|
-
it 'can show the time until reset' do
|
206
|
-
response = Contentful::Response.new raw_fixture('default_429', 429, false, {'x-contentful-ratelimit-reset' => 60})
|
207
|
-
error = Contentful::Error[response.raw.status].new(response)
|
208
|
-
|
209
|
-
message = "HTTP status code: 429\n"\
|
210
|
-
"Message: Rate limit exceeded. Too many requests.\n"\
|
211
|
-
"Request ID: 85f-351076632\n"\
|
212
|
-
"Time until reset (seconds): 60"
|
213
|
-
expect(error.message).to eq message
|
214
|
-
end
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
describe 'generic error' do
|
219
|
-
it 'with everything' do
|
220
|
-
response = Contentful::Response.new raw_fixture('other_error', 512)
|
221
|
-
error = Contentful::Error[response.raw.status].new(response)
|
222
|
-
|
223
|
-
message = "HTTP status code: 512\n"\
|
224
|
-
"Message: Some error occurred.\n"\
|
225
|
-
"Details: some text\n"\
|
226
|
-
"Request ID: 85f-351076632"
|
227
|
-
expect(error.message).to eq message
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'no details' do
|
231
|
-
response = Contentful::Response.new raw_fixture('other_error_no_details', 512)
|
232
|
-
error = Contentful::Error[response.raw.status].new(response)
|
233
|
-
|
234
|
-
message = "HTTP status code: 512\n"\
|
235
|
-
"Message: Some error occurred.\n"\
|
236
|
-
"Request ID: 85f-351076632"
|
237
|
-
expect(error.message).to eq message
|
238
|
-
end
|
239
|
-
|
240
|
-
it 'no request id' do
|
241
|
-
response = Contentful::Response.new raw_fixture('other_error_no_request_id', 512)
|
242
|
-
error = Contentful::Error[response.raw.status].new(response)
|
243
|
-
|
244
|
-
message = "HTTP status code: 512\n"\
|
245
|
-
"Message: Some error occurred.\n"\
|
246
|
-
"Details: some text"
|
247
|
-
expect(error.message).to eq message
|
248
|
-
end
|
249
|
-
|
250
|
-
it 'no message' do
|
251
|
-
response = Contentful::Response.new raw_fixture('other_error_no_message', 512)
|
252
|
-
error = Contentful::Error[response.raw.status].new(response)
|
253
|
-
|
254
|
-
message = "HTTP status code: 512\n"\
|
255
|
-
"Message: The following error was received: {\n"\
|
256
|
-
" \"sys\": {\n"\
|
257
|
-
" \"type\": \"Error\",\n"\
|
258
|
-
" \"id\": \"SomeError\"\n"\
|
259
|
-
" },\n"\
|
260
|
-
" \"details\": \"some text\",\n"\
|
261
|
-
" \"requestId\": \"85f-351076632\"\n"\
|
262
|
-
"}\n"\
|
263
|
-
"\n"\
|
264
|
-
"Details: some text\n"\
|
265
|
-
"Request ID: 85f-351076632"
|
266
|
-
expect(error.message).to eq message
|
267
|
-
end
|
268
|
-
|
269
|
-
it 'nothing' do
|
270
|
-
response = Contentful::Response.new raw_fixture('other_error_nothing', 512)
|
271
|
-
error = Contentful::Error[response.raw.status].new(response)
|
272
|
-
|
273
|
-
message = "HTTP status code: 512\n"\
|
274
|
-
"Message: The following error was received: {\n"\
|
275
|
-
" \"sys\": {\n"\
|
276
|
-
" \"type\": \"Error\",\n"\
|
277
|
-
" \"id\": \"SomeError\"\n"\
|
278
|
-
" }\n"\
|
279
|
-
"}\n"
|
280
|
-
expect(error.message).to eq message
|
281
|
-
end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
describe Contentful::UnparsableJson do
|
287
|
-
describe '#message' do
|
288
|
-
it 'returns the json parser\'s message' do
|
289
|
-
uj = Contentful::Response.new raw_fixture('unparsable')
|
290
|
-
expect(Contentful::UnparsableJson.new(uj).message).to \
|
291
|
-
include 'unexpected token'
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
describe '.[]' do
|
297
|
-
it 'returns BadRequest error class for 400' do
|
298
|
-
expect(Contentful::Error[400]).to eq Contentful::BadRequest
|
299
|
-
end
|
300
|
-
|
301
|
-
it 'returns Unauthorized error class for 401' do
|
302
|
-
expect(Contentful::Error[401]).to eq Contentful::Unauthorized
|
303
|
-
end
|
304
|
-
|
305
|
-
it 'returns AccessDenied error class for 403' do
|
306
|
-
expect(Contentful::Error[403]).to eq Contentful::AccessDenied
|
307
|
-
end
|
308
|
-
|
309
|
-
it 'returns NotFound error class for 404' do
|
310
|
-
expect(Contentful::Error[404]).to eq Contentful::NotFound
|
311
|
-
end
|
312
|
-
|
313
|
-
it 'returns ServerError error class for 500' do
|
314
|
-
expect(Contentful::Error[500]).to eq Contentful::ServerError
|
315
|
-
end
|
316
|
-
|
317
|
-
it 'returns ServiceUnavailable error class for 503' do
|
318
|
-
expect(Contentful::Error[503]).to eq Contentful::ServiceUnavailable
|
319
|
-
end
|
320
|
-
|
321
|
-
it 'returns generic error class for any other value' do
|
322
|
-
expect(Contentful::Error[nil]).to eq Contentful::Error
|
323
|
-
expect(Contentful::Error[200]).to eq Contentful::Error
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
end
|
data/spec/error_requests_spec.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class NonCachingClient < Contentful::Client
|
4
|
-
def request_headers
|
5
|
-
headers = super
|
6
|
-
headers['Cf-No-Cache'] = 'foobar'
|
7
|
-
headers
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class RetryLoggerMock < Logger
|
12
|
-
attr_reader :retry_attempts
|
13
|
-
|
14
|
-
def initialize(*)
|
15
|
-
super
|
16
|
-
@retry_attempts = 0
|
17
|
-
end
|
18
|
-
|
19
|
-
def info(message)
|
20
|
-
super
|
21
|
-
@retry_attempts += 1 if message.include?('Contentful API Rate Limit Hit! Retrying')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe 'Error Requests' do
|
26
|
-
it 'will return 404 (Unauthorized) if resource not found' do
|
27
|
-
expect_vcr('not found')do
|
28
|
-
create_client.content_type 'not found'
|
29
|
-
end.to raise_error(Contentful::NotFound)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'will return 400 (BadRequest) if invalid parameters have been passed' do
|
33
|
-
expect_vcr('bad request')do
|
34
|
-
create_client.entries(some: 'parameter')
|
35
|
-
end.to raise_error(Contentful::BadRequest)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'will return 403 (AccessDenied) if ...' do
|
39
|
-
skip
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'will return 401 (Unauthorized) if wrong credentials are given' do
|
43
|
-
client = Contentful::Client.new(space: 'wrong', access_token: 'credentials')
|
44
|
-
|
45
|
-
expect_vcr('unauthorized'){
|
46
|
-
client.entry('nyancat')
|
47
|
-
}.to raise_error(Contentful::Unauthorized)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'will return 500 (ServerError) if ...' do
|
51
|
-
skip
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'will return a 429 if the ratelimit is reached and is not set to retry' do
|
55
|
-
client = Contentful::Client.new(space: 'wrong', access_token: 'credentials', max_rate_limit_retries: 0)
|
56
|
-
expect_vcr('ratelimit') {
|
57
|
-
client.entry('nyancat')
|
58
|
-
}.to raise_error(Contentful::RateLimitExceeded)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'will retry on 429 by default' do
|
62
|
-
logger = RetryLoggerMock.new(STDOUT)
|
63
|
-
client = NonCachingClient.new(
|
64
|
-
api_url: 'cdnorigin.flinkly.com',
|
65
|
-
space: '164vhtp008kz',
|
66
|
-
access_token: '7699b6c6f6cee9b6abaa216c71fbcb3eee56cb6f082f57b5e21b2b50f86bdea0',
|
67
|
-
raise_errors: true,
|
68
|
-
logger: logger
|
69
|
-
)
|
70
|
-
|
71
|
-
vcr('ratelimit_retry') {
|
72
|
-
3.times {
|
73
|
-
client.assets
|
74
|
-
}
|
75
|
-
}
|
76
|
-
|
77
|
-
expect(logger.retry_attempts).to eq 1
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'will return 503 (ServiceUnavailable) when the service is unavailable' do
|
81
|
-
client = Contentful::Client.new(space: 'wrong', access_token: 'credentials')
|
82
|
-
|
83
|
-
expect_vcr('unavailable'){
|
84
|
-
client.entry('nyancat')
|
85
|
-
}.to raise_error(Contentful::ServiceUnavailable)
|
86
|
-
end
|
87
|
-
end
|
data/spec/field_spec.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Contentful::Field do
|
4
|
-
let(:field) { vcr('field') { create_client.content_type('cat').fields.first } }
|
5
|
-
let(:linkField) { vcr('linkField') {
|
6
|
-
create_client.content_type('cat').fields.select { |f| f.id == 'image' }.first
|
7
|
-
} }
|
8
|
-
let(:arrayField) { vcr('arrayField') {
|
9
|
-
Contentful::Client.new(
|
10
|
-
space: 'wl1z0pal05vy',
|
11
|
-
access_token: '9b76e1bbc29eb513611a66b9fc5fb7acd8d95e83b0f7d6bacfe7ec926c819806'
|
12
|
-
).content_type('2PqfXUJwE8qSYKuM0U6w8M').fields.select { |f| f.id == 'categories' }.first
|
13
|
-
} }
|
14
|
-
|
15
|
-
describe 'Properties' do
|
16
|
-
it 'has #id' do
|
17
|
-
expect(field.id).to eq 'name'
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'has #name' do
|
21
|
-
expect(field.name).to eq 'Name'
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has #type' do
|
25
|
-
expect(field.type).to eq 'Text'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'could have #items' do
|
29
|
-
expect(field).to respond_to :items
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'has #required' do
|
33
|
-
expect(field.required).to be_truthy
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'has #localized' do
|
37
|
-
expect(field.required).to be_truthy
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'Link field properties' do
|
42
|
-
it 'has #type' do
|
43
|
-
expect(linkField.type).to eq 'Link'
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'has #linkType' do
|
47
|
-
expect(linkField.link_type).to eq 'Asset'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe 'Array field properties' do
|
52
|
-
it 'has #type' do
|
53
|
-
expect(arrayField.type).to eq 'Array'
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'has #items' do
|
57
|
-
expect(arrayField.items.type).to eq 'Link'
|
58
|
-
expect(arrayField.items.link_type).to eq 'Entry'
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe 'issues' do
|
63
|
-
describe 'json field' do
|
64
|
-
it 'can coerce properly when top level is not object' do
|
65
|
-
coercion = Contentful::ObjectCoercion.new([{foo: 123}])
|
66
|
-
expect(coercion.coerce).to eq [{foo: 123}]
|
67
|
-
|
68
|
-
coercion = Contentful::ObjectCoercion.new('foobar')
|
69
|
-
expect(coercion.coerce).to eq 'foobar'
|
70
|
-
|
71
|
-
coercion = Contentful::ObjectCoercion.new(true)
|
72
|
-
expect(coercion.coerce).to eq true
|
73
|
-
|
74
|
-
coercion = Contentful::ObjectCoercion.new(123)
|
75
|
-
expect(coercion.coerce).to eq 123
|
76
|
-
|
77
|
-
coercion = Contentful::ObjectCoercion.new({foo: 123})
|
78
|
-
expect(coercion.coerce).to eq(foo: 123)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe 'datetime field' do
|
83
|
-
it 'can coerce properly when value is nil' do
|
84
|
-
coercion = Contentful::DateCoercion.new(nil)
|
85
|
-
expect(coercion.coerce).to eq(nil)
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'can coerce properly when value is already datetime' do
|
89
|
-
value = DateTime.new
|
90
|
-
coercion = Contentful::DateCoercion.new(value)
|
91
|
-
expect(coercion.coerce).to eq value
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
data/spec/file_spec.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Contentful::File do
|
4
|
-
let(:file) { vcr('asset') { create_client.asset('nyancat').file } }
|
5
|
-
|
6
|
-
describe 'Properties' do
|
7
|
-
it 'has #file_name' do
|
8
|
-
expect(file.file_name).to eq 'Nyan_cat_250px_frame.png'
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'has #content_type' do
|
12
|
-
expect(file.content_type).to eq 'image/png'
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'has #url' do
|
16
|
-
expect(file.url).to eq '//images.contentful.com/cfexampleapi/4gp6taAwW4CmSgumq2ekUm/9da0cd1936871b8d72343e895a00d611/Nyan_cat_250px_frame.png'
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'has #details' do
|
20
|
-
expect(file.details).to be_instance_of Hash
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'camel case' do
|
25
|
-
it 'supports camel case' do
|
26
|
-
vcr('asset') {
|
27
|
-
file = create_client(use_camel_case: true).asset('nyancat').file
|
28
|
-
expect(file.contentType).to eq 'image/png'
|
29
|
-
expect(file.fileName).to eq 'Nyan_cat_250px_frame.png'
|
30
|
-
}
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|