contentful 2.16.0 → 2.16.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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/contentful/version.rb +1 -1
- metadata +3 -370
- data/.gitignore +0 -7
- data/.rspec +0 -1
- data/.rubocop.yml +0 -31
- data/.rubocop_todo.yml +0 -35
- data/.travis.yml +0 -15
- data/.yardopts +0 -4
- data/Gemfile +0 -9
- data/Guardfile +0 -24
- data/RELEASE.md +0 -8
- data/Rakefile +0 -33
- data/contentful.gemspec +0 -44
- 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 -187
- data/spec/asset_spec.rb +0 -220
- 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 -815
- 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.yml +0 -288
- 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/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.yml +0 -96
- 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/with_tags.yml +0 -138
- 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.yml +0 -561
- 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/entry.yml +0 -102
- 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/with_tags.yml +0 -238
- 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/asset_spec.rb
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Contentful::Asset do
|
|
4
|
-
let(:asset) { vcr('asset') { create_client.asset('nyancat') } }
|
|
5
|
-
|
|
6
|
-
describe 'SystemProperties' do
|
|
7
|
-
it 'has a #sys getter returning a hash with symbol keys' do
|
|
8
|
-
expect(asset.sys).to be_a Hash
|
|
9
|
-
expect(asset.sys.keys.sample).to be_a Symbol
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it 'has #id' do
|
|
13
|
-
expect(asset.id).to eq 'nyancat'
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it 'has #type' do
|
|
17
|
-
expect(asset.type).to eq 'Asset'
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it 'has #space' do
|
|
21
|
-
expect(asset.space).to be_a Contentful::Link
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it 'has #created_at' do
|
|
25
|
-
expect(asset.created_at).to be_a DateTime
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it 'has #updated_at' do
|
|
29
|
-
expect(asset.updated_at).to be_a DateTime
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'has #revision' do
|
|
33
|
-
expect(asset.revision).to eq 1
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
describe 'Fields' do
|
|
38
|
-
it 'has #title' do
|
|
39
|
-
expect(asset.title).to eq 'Nyan Cat'
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it 'could have #description' do
|
|
43
|
-
expect(asset).to respond_to :description
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it 'has #file' do
|
|
47
|
-
expect(asset.file).to be_a Contentful::File
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe '#image_url' do
|
|
52
|
-
it 'returns #url of #file without parameter' do
|
|
53
|
-
expect(asset.image_url).to eq asset.file.url
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it 'adds image options if given' do
|
|
57
|
-
url = asset.image_url(width: 100, format: 'jpg', quality: 50, focus: 'top_right', fit: 'thumb', fl: 'progressive', background: 'rgb:ff0000')
|
|
58
|
-
expect(url).to include asset.file.url
|
|
59
|
-
expect(url).to include '?w=100&fm=jpg&q=50&f=top_right&bg=rgb%3Aff0000&fit=thumb&fl=progressive'
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
describe '#url' do
|
|
64
|
-
it 'returns #url of #file without parameter' do
|
|
65
|
-
expect(asset.url).to eq asset.file.url
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it 'adds image options if given' do
|
|
69
|
-
url = asset.url(width: 100, format: 'jpg', quality: 50, focus: 'top_right', fit: 'thumb', fl: 'progressive', background: 'rgb:ff0000')
|
|
70
|
-
expect(url).to include asset.file.url
|
|
71
|
-
expect(url).to include '?w=100&fm=jpg&q=50&f=top_right&bg=rgb%3Aff0000&fit=thumb&fl=progressive'
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it 'can be marshalled' do
|
|
76
|
-
marshalled = Marshal.dump(asset)
|
|
77
|
-
unmarshalled = Marshal.load(marshalled)
|
|
78
|
-
|
|
79
|
-
expect(unmarshalled.title).to eq 'Nyan Cat'
|
|
80
|
-
expect(unmarshalled.file).to be_a Contentful::File
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
describe 'incoming links' do
|
|
85
|
-
let(:client) { create_client }
|
|
86
|
-
|
|
87
|
-
it 'will fetch entries referencing the asset using a query' do
|
|
88
|
-
vcr('entry/search_link_to_asset') {
|
|
89
|
-
entries = client.entries(links_to_asset: 'nyancat')
|
|
90
|
-
expect(entries).not_to be_empty
|
|
91
|
-
expect(entries.count).to eq 1
|
|
92
|
-
expect(entries.first.id).to eq 'nyancat'
|
|
93
|
-
}
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it 'will fetch entries referencing the entry using instance method' do
|
|
97
|
-
vcr('entry/search_link_to_asset') {
|
|
98
|
-
entries = asset.incoming_references client
|
|
99
|
-
expect(entries).not_to be_empty
|
|
100
|
-
expect(entries.count).to eq 1
|
|
101
|
-
expect(entries.first.id).to eq 'nyancat'
|
|
102
|
-
}
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
describe 'select operator' do
|
|
108
|
-
let(:client) { create_client }
|
|
109
|
-
|
|
110
|
-
context 'with sys sent' do
|
|
111
|
-
it 'properly creates an entry' do
|
|
112
|
-
vcr('asset/select_only_sys') {
|
|
113
|
-
asset = client.assets(select: ['sys']).first
|
|
114
|
-
expect(asset.fields).to be_empty
|
|
115
|
-
expect(asset.sys).not_to be_empty
|
|
116
|
-
}
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it 'can contain only one field' do
|
|
120
|
-
vcr('asset/select_one_field') {
|
|
121
|
-
asset = client.assets(select: ['sys', 'fields.file']).first
|
|
122
|
-
expect(asset.fields.keys).to eq([:file])
|
|
123
|
-
}
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
context 'without sys sent' do
|
|
128
|
-
it 'will enforce sys anyway' do
|
|
129
|
-
vcr('asset/select_no_sys') {
|
|
130
|
-
asset = client.assets(select: ['fields'], 'sys.id' => 'nyancat').first
|
|
131
|
-
|
|
132
|
-
expect(asset.id).to eq 'nyancat'
|
|
133
|
-
expect(asset.sys).not_to be_empty
|
|
134
|
-
}
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it 'works with empty array as well, as sys is enforced' do
|
|
138
|
-
vcr('asset/select_empty_array') {
|
|
139
|
-
asset = client.assets(select: [], 'sys.id' => 'nyancat').first
|
|
140
|
-
|
|
141
|
-
expect(asset.id).to eq 'nyancat'
|
|
142
|
-
expect(asset.sys).not_to be_empty
|
|
143
|
-
}
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
describe 'issues' do
|
|
149
|
-
it 'serializes files correctly for every locale - #129' do
|
|
150
|
-
vcr('assets/issues_129') {
|
|
151
|
-
client = create_client(
|
|
152
|
-
space: 'bht13amj0fva',
|
|
153
|
-
access_token: 'bb703a05e107148bed6ee246a9f6b3678c63fed7335632eb68fe1b689c801534'
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
asset = client.assets('sys.id' => '14bZJKTr6AoaGyeg4kYiWq', locale: '*').first
|
|
157
|
-
|
|
158
|
-
expect(asset.file).to be_a ::Contentful::File
|
|
159
|
-
expect(asset.file.file_name).to eq 'Flag_of_the_United_States.svg'
|
|
160
|
-
|
|
161
|
-
expect(asset.fields[:file]).to be_a ::Contentful::File
|
|
162
|
-
expect(asset.fields[:file].file_name).to eq 'Flag_of_the_United_States.svg'
|
|
163
|
-
|
|
164
|
-
expect(asset.fields('es')[:file]).to be_a ::Contentful::File
|
|
165
|
-
expect(asset.fields('es')[:file].file_name).to eq 'Flag_of_Spain.svg'
|
|
166
|
-
}
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it 'properly serializes files for non-default locales on localized requests - jekyll-contentful-data-import #46' do
|
|
170
|
-
vcr('assets/issues_jekyll_46') {
|
|
171
|
-
client = create_client(
|
|
172
|
-
space: 'bht13amj0fva',
|
|
173
|
-
access_token: 'bb703a05e107148bed6ee246a9f6b3678c63fed7335632eb68fe1b689c801534',
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
asset = client.assets('sys.id' => '14bZJKTr6AoaGyeg4kYiWq', locale: 'es').first
|
|
177
|
-
|
|
178
|
-
expect(asset.file).to be_a ::Contentful::File
|
|
179
|
-
expect(asset.file.file_name).to eq 'Flag_of_Spain.svg'
|
|
180
|
-
}
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
describe 'camelCase' do
|
|
185
|
-
it 'properties now are accessed with camelcase' do
|
|
186
|
-
vcr('asset') {
|
|
187
|
-
asset = create_client(use_camel_case: true).asset('nyancat')
|
|
188
|
-
expect(asset.file.fileName).to eq 'Nyan_cat_250px_frame.png'
|
|
189
|
-
}
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
describe 'tags metadata' do
|
|
194
|
-
let(:asset_id) { '686aLBcjj1f47uFWxrepj6' }
|
|
195
|
-
|
|
196
|
-
it 'can load an asset with tags' do
|
|
197
|
-
vcr('asset/with_tags') {
|
|
198
|
-
expect {
|
|
199
|
-
asset = create_client.asset(asset_id)
|
|
200
|
-
}.not_to raise_error
|
|
201
|
-
}
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
it 'hydrates tags' do
|
|
205
|
-
vcr('asset/with_tags') {
|
|
206
|
-
asset = create_client.asset(asset_id)
|
|
207
|
-
expect(asset._metadata[:tags].first).to be_a Contentful::Link
|
|
208
|
-
}
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
it 'loads tag links with their proper attributes' do
|
|
212
|
-
vcr('asset/with_tags') {
|
|
213
|
-
asset = create_client.asset(asset_id)
|
|
214
|
-
tag = asset._metadata[:tags].first
|
|
215
|
-
expect(tag.id).to eq 'mobQa'
|
|
216
|
-
expect(tag.link_type).to eq 'Tag'
|
|
217
|
-
}
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
data/spec/auto_includes_spec.rb
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe 'Auto-include resources' do
|
|
4
|
-
let(:entries) { vcr('entries') { create_client.entries } } # entries come with asset includes
|
|
5
|
-
|
|
6
|
-
it 'replaces Contentful::Links which are actually included with the resource' do
|
|
7
|
-
asset = entries.items[1].fields[:image]
|
|
8
|
-
|
|
9
|
-
expect(asset).not_to be_a Contentful::Link
|
|
10
|
-
expect(asset).to be_a Contentful::Asset
|
|
11
|
-
end
|
|
12
|
-
end
|
data/spec/client_class_spec.rb
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Contentful::Client do
|
|
4
|
-
describe '#get' do
|
|
5
|
-
let(:client) { create_client() }
|
|
6
|
-
let(:proxy_client) { create_client(proxy_host: '183.207.232.194',
|
|
7
|
-
proxy_port: 8080,
|
|
8
|
-
secure: false) }
|
|
9
|
-
let(:timeout_client) { create_client(timeout_connect: 1, timeout_read: 2, timeout_write: 3) }
|
|
10
|
-
let(:request) { Contentful::Request.new(nil, client.environment_url('/content_types'), nil, 'cat') }
|
|
11
|
-
|
|
12
|
-
it 'uses #base_url' do
|
|
13
|
-
expect(client).to receive(:base_url).and_call_original
|
|
14
|
-
|
|
15
|
-
vcr('content_type') {
|
|
16
|
-
client.get(request)
|
|
17
|
-
}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it 'uses #request_headers' do
|
|
21
|
-
expect(client).to receive(:request_headers).and_call_original
|
|
22
|
-
vcr('content_type') { client.get(request) }
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it 'uses Request#url' do
|
|
26
|
-
expect(request).to receive(:url).and_call_original
|
|
27
|
-
vcr('content_type') { client.get(request) }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
it 'uses Request#query' do
|
|
31
|
-
expect(request).to receive(:query).thrice.and_call_original
|
|
32
|
-
vcr('content_type') { client.get(request) }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
it 'calls #get_http' do
|
|
36
|
-
expect(client.class).to receive(:get_http).with(client.base_url + request.url, request.query, client.request_headers, client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
|
|
37
|
-
client.get(request)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'calls #get_http via proxy' do
|
|
41
|
-
expect(proxy_client.class).to receive(:get_http).with(proxy_client.base_url + request.url, request.query, proxy_client.request_headers, proxy_client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
|
|
42
|
-
proxy_client.get(request)
|
|
43
|
-
expect(proxy_client.proxy_params[:host]).to eq '183.207.232.194'
|
|
44
|
-
expect(proxy_client.proxy_params[:port]).to eq 8080
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
describe 'timeout params' do
|
|
48
|
-
context 'with timeouts configured' do
|
|
49
|
-
it 'calls #get_http with timeouts' do
|
|
50
|
-
expect(timeout_client.class).to receive(:get_http).with(timeout_client.base_url + request.url, request.query, timeout_client.request_headers, timeout_client.proxy_params, timeout_client.timeout_params) { raw_fixture('content_type') }
|
|
51
|
-
timeout_client.get(request)
|
|
52
|
-
expect(timeout_client.timeout_params[:connect]).to eq 1
|
|
53
|
-
expect(timeout_client.timeout_params[:read]).to eq 2
|
|
54
|
-
expect(timeout_client.timeout_params[:write]).to eq 3
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context 'without timeouts' do
|
|
59
|
-
it 'calls #get_http with timeouts' do
|
|
60
|
-
expect(client.class).to receive(:get_http).with(client.base_url + request.url, request.query, client.request_headers, client.proxy_params, client.timeout_params) { raw_fixture('content_type') }
|
|
61
|
-
client.get(request)
|
|
62
|
-
expect(client.timeout_params).to eq({})
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
describe 'build_resources parameter' do
|
|
68
|
-
it 'returns Contentful::Resource object if second parameter is true [default]' do
|
|
69
|
-
res = vcr('content_type') { client.get(request) }
|
|
70
|
-
expect(res).to be_a Contentful::BaseResource
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it 'returns a Contentful::Response object if second parameter is not true' do
|
|
74
|
-
res = vcr('content_type') { client.get(request, false) }
|
|
75
|
-
expect(res).to be_a Contentful::Response
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
describe '#sync' do
|
|
82
|
-
it 'creates a new Sync object' do
|
|
83
|
-
expect(create_client.sync).to be_a Contentful::Sync
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe 'Client Configuration Options' do
|
|
4
|
-
describe ':space' do
|
|
5
|
-
it 'is required' do
|
|
6
|
-
expect do
|
|
7
|
-
Contentful::Client.new(access_token: 'b4c0n73n7fu1')
|
|
8
|
-
end.to raise_error(ArgumentError)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe ':access_token' do
|
|
13
|
-
it 'is required' do
|
|
14
|
-
expect do
|
|
15
|
-
Contentful::Client.new(space: 'cfexampleapi')
|
|
16
|
-
end.to raise_error(ArgumentError)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe ':secure' do
|
|
21
|
-
it 'will use https [default]' do
|
|
22
|
-
expect(
|
|
23
|
-
create_client.base_url
|
|
24
|
-
).to start_with 'https://'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it 'will use http when secure set to false' do
|
|
28
|
-
expect(
|
|
29
|
-
create_client(secure: false).base_url
|
|
30
|
-
).to start_with 'http://'
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe ':raise_errors' do
|
|
35
|
-
it 'will raise response errors if set to true [default]' do
|
|
36
|
-
expect_vcr('not found')do
|
|
37
|
-
create_client.content_type 'not found'
|
|
38
|
-
end.to raise_error Contentful::NotFound
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it 'will not raise response errors if set to false' do
|
|
42
|
-
res = nil
|
|
43
|
-
|
|
44
|
-
expect_vcr('not found')do
|
|
45
|
-
res = create_client(raise_errors: false).content_type 'not found'
|
|
46
|
-
end.not_to raise_error
|
|
47
|
-
expect(res).to be_instance_of Contentful::NotFound
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe ':log_level' do
|
|
52
|
-
|
|
53
|
-
let(:logger) { Logger.new(STDOUT) }
|
|
54
|
-
|
|
55
|
-
it 'changes the level of the logger instance when given' do
|
|
56
|
-
expect do
|
|
57
|
-
create_client(logger: logger, log_level: ::Logger::WARN)
|
|
58
|
-
end.to change { logger.level }.from(::Logger::DEBUG).to(::Logger::WARN)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'does not change the level of the logger instance when not given' do
|
|
62
|
-
expect do
|
|
63
|
-
create_client(logger: logger)
|
|
64
|
-
end.not_to change { logger.level }
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
describe ':dynamic_entries' do
|
|
69
|
-
before :each do
|
|
70
|
-
Contentful::ContentTypeCache.clear!
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it 'will create dynamic entries if dynamic_entry_cache is not empty' do
|
|
74
|
-
client = create_client(dynamic_entries: :manual)
|
|
75
|
-
vcr('entry_cache') { client.update_dynamic_entry_cache! }
|
|
76
|
-
entry = vcr('nyancat') { client.entry('nyancat') }
|
|
77
|
-
|
|
78
|
-
expect(entry).to be_a Contentful::Entry
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
context ':auto' do
|
|
82
|
-
it 'will call update dynamic_entry_cache on start-up' do
|
|
83
|
-
vcr('entry_cache') do
|
|
84
|
-
create_client(dynamic_entries: :auto)
|
|
85
|
-
end
|
|
86
|
-
expect(Contentful::ContentTypeCache.cache).not_to be_empty
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
context ':manual' do
|
|
91
|
-
it 'will not call #update_dynamic_entry_cache! on start-up' do
|
|
92
|
-
create_client(dynamic_entries: :manual)
|
|
93
|
-
expect(Contentful::ContentTypeCache.cache).to be_empty
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
describe '#update_dynamic_entry_cache!' do
|
|
98
|
-
let(:client) { create_client(dynamic_entries: :manual) }
|
|
99
|
-
|
|
100
|
-
it 'will fetch all content_types' do
|
|
101
|
-
expect(client).to receive(:content_types).with(limit: 1000) { {} }
|
|
102
|
-
client.update_dynamic_entry_cache!
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it 'will save dynamic entries in @dynamic_entry_cache' do
|
|
106
|
-
vcr('entry_cache')do
|
|
107
|
-
client.update_dynamic_entry_cache!
|
|
108
|
-
end
|
|
109
|
-
expect(Contentful::ContentTypeCache.cache).not_to be_empty
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
describe '#register_dynamic_entry' do
|
|
114
|
-
let(:client) { create_client(dynamic_entries: :manual) }
|
|
115
|
-
|
|
116
|
-
it 'can be used to register a dynamic entry manually' do
|
|
117
|
-
cat = vcr('content_type') { client.content_type 'cat' }
|
|
118
|
-
client.register_dynamic_entry 'cat', cat
|
|
119
|
-
|
|
120
|
-
expect(Contentful::ContentTypeCache.cache).not_to be_empty
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
describe ':api_url' do
|
|
126
|
-
it 'is "cdn.contentful.com" [default]' do
|
|
127
|
-
expect(
|
|
128
|
-
create_client.configuration[:api_url]
|
|
129
|
-
).to eq 'cdn.contentful.com'
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it 'will be used as base url' do
|
|
133
|
-
expect(
|
|
134
|
-
create_client(api_url: 'cdn2.contentful.com').base_url
|
|
135
|
-
).to start_with 'https://cdn2.contentful.com'
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
describe ':api_version' do
|
|
140
|
-
it 'is 1 [default]' do
|
|
141
|
-
expect(
|
|
142
|
-
create_client.configuration[:api_version]
|
|
143
|
-
).to eq 1
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it 'will used for the http content type request header' do
|
|
147
|
-
expect(
|
|
148
|
-
create_client(api_version: 2).request_headers['Content-Type']
|
|
149
|
-
).to eq 'application/vnd.contentful.delivery.v2+json'
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
describe ':authentication_mechanism' do
|
|
154
|
-
describe ':header [default]' do
|
|
155
|
-
it 'will add the :access_token as authorization bearer token request header' do
|
|
156
|
-
expect(
|
|
157
|
-
create_client.request_headers['Authorization']
|
|
158
|
-
).to eq 'Bearer b4c0n73n7fu1'
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it 'will not add :access_token to query' do
|
|
162
|
-
expect(
|
|
163
|
-
create_client.request_query({})['access_token']
|
|
164
|
-
).to be_nil
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
describe ':query_string' do
|
|
169
|
-
it 'will add the :access_token to query' do
|
|
170
|
-
expect(
|
|
171
|
-
create_client(authentication_mechanism: :query_string).
|
|
172
|
-
request_query({})['access_token']
|
|
173
|
-
).to eq 'b4c0n73n7fu1'
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it 'will not add the :access_token as authorization bearer token request header' do
|
|
177
|
-
expect(
|
|
178
|
-
create_client(authentication_mechanism: :query_string).
|
|
179
|
-
request_headers['Authorization']
|
|
180
|
-
).to be_nil
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
describe ':resource_mapping' do
|
|
186
|
-
it 'lets you register your own resource classes for certain response types' do
|
|
187
|
-
class MyBetterAsset < Contentful::Asset
|
|
188
|
-
def https_image_url
|
|
189
|
-
image_url.sub %r{\A//}, 'https://'
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
client = create_client(
|
|
194
|
-
resource_mapping: {
|
|
195
|
-
'Asset' => MyBetterAsset,
|
|
196
|
-
}
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
nyancat = vcr('asset') { client.asset 'nyancat' }
|
|
200
|
-
expect(nyancat).to be_a MyBetterAsset
|
|
201
|
-
expect(nyancat.https_image_url).to start_with 'https'
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
describe ':entry_mapping' do
|
|
206
|
-
it 'lets you register your own entry classes for certain entry types' do
|
|
207
|
-
class Cat < Contentful::Entry
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
client = create_client(
|
|
211
|
-
entry_mapping: {
|
|
212
|
-
'cat' => Cat
|
|
213
|
-
}
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
nyancat = vcr('entry') { client.entry 'nyancat' }
|
|
217
|
-
finn = vcr('human') { client.entry 'finn' }
|
|
218
|
-
expect(nyancat).to be_a Cat
|
|
219
|
-
expect(finn).to be_a Contentful::Entry
|
|
220
|
-
end
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
describe 'X-Contentful-User-Agent headers' do
|
|
224
|
-
it 'default values' do
|
|
225
|
-
expected = [
|
|
226
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
227
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
228
|
-
]
|
|
229
|
-
|
|
230
|
-
client = create_client
|
|
231
|
-
expected.each do |h|
|
|
232
|
-
expect(client.contentful_user_agent).to include(h)
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
236
|
-
|
|
237
|
-
['integration', 'app'].each do |h|
|
|
238
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it 'with integration name only' do
|
|
243
|
-
expected = [
|
|
244
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
245
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
246
|
-
"integration foobar;"
|
|
247
|
-
]
|
|
248
|
-
|
|
249
|
-
client = create_client(integration_name: 'foobar')
|
|
250
|
-
expected.each do |h|
|
|
251
|
-
expect(client.contentful_user_agent).to include(h)
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
255
|
-
|
|
256
|
-
['app'].each do |h|
|
|
257
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it 'with integration' do
|
|
262
|
-
expected = [
|
|
263
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
264
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
265
|
-
"integration foobar/0.1.0;"
|
|
266
|
-
]
|
|
267
|
-
|
|
268
|
-
client = create_client(integration_name: 'foobar', integration_version: '0.1.0')
|
|
269
|
-
expected.each do |h|
|
|
270
|
-
expect(client.contentful_user_agent).to include(h)
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
274
|
-
|
|
275
|
-
['app'].each do |h|
|
|
276
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
277
|
-
end
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
it 'with application name only' do
|
|
281
|
-
expected = [
|
|
282
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
283
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
284
|
-
"app fooapp;"
|
|
285
|
-
]
|
|
286
|
-
|
|
287
|
-
client = create_client(application_name: 'fooapp')
|
|
288
|
-
expected.each do |h|
|
|
289
|
-
expect(client.contentful_user_agent).to include(h)
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
293
|
-
|
|
294
|
-
['integration'].each do |h|
|
|
295
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
it 'with application' do
|
|
300
|
-
expected = [
|
|
301
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
302
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
303
|
-
"app fooapp/1.0.0;"
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
client = create_client(application_name: 'fooapp', application_version: '1.0.0')
|
|
307
|
-
expected.each do |h|
|
|
308
|
-
expect(client.contentful_user_agent).to include(h)
|
|
309
|
-
end
|
|
310
|
-
|
|
311
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
312
|
-
|
|
313
|
-
['integration'].each do |h|
|
|
314
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
315
|
-
end
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
it 'with all' do
|
|
319
|
-
expected = [
|
|
320
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
321
|
-
"platform ruby/#{RUBY_VERSION};",
|
|
322
|
-
"integration foobar/0.1.0;",
|
|
323
|
-
"app fooapp/1.0.0;"
|
|
324
|
-
]
|
|
325
|
-
|
|
326
|
-
client = create_client(
|
|
327
|
-
integration_name: 'foobar',
|
|
328
|
-
integration_version: '0.1.0',
|
|
329
|
-
application_name: 'fooapp',
|
|
330
|
-
application_version: '1.0.0'
|
|
331
|
-
)
|
|
332
|
-
|
|
333
|
-
expected.each do |h|
|
|
334
|
-
expect(client.contentful_user_agent).to include(h)
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
it 'when only version numbers, skips header' do
|
|
341
|
-
expected = [
|
|
342
|
-
"sdk contentful.rb/#{Contentful::VERSION};",
|
|
343
|
-
"platform ruby/#{RUBY_VERSION};"
|
|
344
|
-
]
|
|
345
|
-
|
|
346
|
-
client = create_client(
|
|
347
|
-
integration_version: '0.1.0',
|
|
348
|
-
application_version: '1.0.0'
|
|
349
|
-
)
|
|
350
|
-
|
|
351
|
-
expected.each do |h|
|
|
352
|
-
expect(client.contentful_user_agent).to include(h)
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
expect(client.contentful_user_agent).to match(/os (Windows|macOS|Linux)(\/.*)?;/i)
|
|
356
|
-
|
|
357
|
-
['integration', 'app'].each do |h|
|
|
358
|
-
expect(client.contentful_user_agent).not_to include(h)
|
|
359
|
-
end
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
it 'headers include X-Contentful-User-Agent' do
|
|
363
|
-
client = create_client
|
|
364
|
-
expect(client.request_headers['X-Contentful-User-Agent']).to eq client.contentful_user_agent
|
|
365
|
-
end
|
|
366
|
-
end
|
|
367
|
-
|
|
368
|
-
describe 'timeout options' do
|
|
369
|
-
let(:full_options) { { timeout_connect: 1, timeout_read: 2, timeout_write: 3 } }
|
|
370
|
-
|
|
371
|
-
it 'allows the three options to be present together' do
|
|
372
|
-
expect do
|
|
373
|
-
create_client(full_options)
|
|
374
|
-
end.not_to raise_error
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
it 'allows the three options to be omitted' do
|
|
378
|
-
expect do
|
|
379
|
-
create_client()
|
|
380
|
-
end.not_to raise_error
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
it 'does not allow only some options to be set' do
|
|
384
|
-
# Test that any combination of 1 or 2 keys is rejected
|
|
385
|
-
1.upto(2) do |options_count|
|
|
386
|
-
full_options.keys.combination(options_count).each do |option_keys|
|
|
387
|
-
expect do
|
|
388
|
-
create_client(full_options.select { |key, _| option_keys.include?(key) })
|
|
389
|
-
end.to raise_error(ArgumentError)
|
|
390
|
-
end
|
|
391
|
-
end
|
|
392
|
-
end
|
|
393
|
-
end
|
|
394
|
-
end
|