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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +20 -11
  4. data/lib/contentful/array_like.rb +9 -0
  5. data/lib/contentful/base_resource.rb +12 -1
  6. data/lib/contentful/fields_resource.rb +1 -0
  7. data/lib/contentful/version.rb +1 -1
  8. metadata +3 -373
  9. data/.gitignore +0 -7
  10. data/.rspec +0 -1
  11. data/.rubocop.yml +0 -31
  12. data/.rubocop_todo.yml +0 -35
  13. data/.ruby-version +0 -1
  14. data/.travis.yml +0 -15
  15. data/.yardopts +0 -4
  16. data/Gemfile +0 -9
  17. data/Gemfile.lock +0 -170
  18. data/Guardfile +0 -24
  19. data/RELEASE.md +0 -8
  20. data/Rakefile +0 -33
  21. data/contentful.gemspec +0 -44
  22. data/contentful.rb.sublime-project +0 -9
  23. data/contentful.rb.sublime-workspace +0 -2154
  24. data/coverage/.last_run.json +0 -5
  25. data/coverage/.resultset.json +0 -2421
  26. data/coverage/.resultset.json.lock +0 -0
  27. data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc.png +0 -0
  28. data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
  29. data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_both.png +0 -0
  30. data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc.png +0 -0
  31. data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
  32. data/coverage/assets/0.12.2/application.css +0 -1
  33. data/coverage/assets/0.12.2/application.js +0 -7
  34. data/coverage/assets/0.12.2/colorbox/border.png +0 -0
  35. data/coverage/assets/0.12.2/colorbox/controls.png +0 -0
  36. data/coverage/assets/0.12.2/colorbox/loading.gif +0 -0
  37. data/coverage/assets/0.12.2/colorbox/loading_background.png +0 -0
  38. data/coverage/assets/0.12.2/favicon_green.png +0 -0
  39. data/coverage/assets/0.12.2/favicon_red.png +0 -0
  40. data/coverage/assets/0.12.2/favicon_yellow.png +0 -0
  41. data/coverage/assets/0.12.2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  42. data/coverage/assets/0.12.2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  43. data/coverage/assets/0.12.2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  44. data/coverage/assets/0.12.2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  45. data/coverage/assets/0.12.2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  46. data/coverage/assets/0.12.2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  47. data/coverage/assets/0.12.2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  48. data/coverage/assets/0.12.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  49. data/coverage/assets/0.12.2/images/ui-icons_222222_256x240.png +0 -0
  50. data/coverage/assets/0.12.2/images/ui-icons_2e83ff_256x240.png +0 -0
  51. data/coverage/assets/0.12.2/images/ui-icons_454545_256x240.png +0 -0
  52. data/coverage/assets/0.12.2/images/ui-icons_888888_256x240.png +0 -0
  53. data/coverage/assets/0.12.2/images/ui-icons_cd0a0a_256x240.png +0 -0
  54. data/coverage/assets/0.12.2/loading.gif +0 -0
  55. data/coverage/assets/0.12.2/magnify.png +0 -0
  56. data/coverage/index.html +0 -26587
  57. data/doc/Contentful/AccessDenied.html +0 -159
  58. data/doc/Contentful/Array.html +0 -844
  59. data/doc/Contentful/ArrayCoercion.html +0 -242
  60. data/doc/Contentful/ArrayLike.html +0 -624
  61. data/doc/Contentful/Asset.html +0 -486
  62. data/doc/Contentful/BadGateway.html +0 -159
  63. data/doc/Contentful/BadRequest.html +0 -159
  64. data/doc/Contentful/BaseCoercion.html +0 -445
  65. data/doc/Contentful/BaseResource.html +0 -598
  66. data/doc/Contentful/BooleanCoercion.html +0 -242
  67. data/doc/Contentful/Client.html +0 -1738
  68. data/doc/Contentful/ContentType.html +0 -617
  69. data/doc/Contentful/ContentTypeCache.html +0 -428
  70. data/doc/Contentful/DateCoercion.html +0 -244
  71. data/doc/Contentful/DeletedAsset.html +0 -156
  72. data/doc/Contentful/DeletedEntry.html +0 -156
  73. data/doc/Contentful/EmptyFieldError.html +0 -217
  74. data/doc/Contentful/Entry.html +0 -334
  75. data/doc/Contentful/Error.html +0 -407
  76. data/doc/Contentful/Field.html +0 -935
  77. data/doc/Contentful/FieldsResource.html +0 -583
  78. data/doc/Contentful/File.html +0 -218
  79. data/doc/Contentful/FloatCoercion.html +0 -238
  80. data/doc/Contentful/IntegerCoercion.html +0 -238
  81. data/doc/Contentful/Link.html +0 -246
  82. data/doc/Contentful/LinkCoercion.html +0 -156
  83. data/doc/Contentful/Locale.html +0 -536
  84. data/doc/Contentful/Location.html +0 -382
  85. data/doc/Contentful/LocationCoercion.html +0 -238
  86. data/doc/Contentful/NotFound.html +0 -159
  87. data/doc/Contentful/ObjectCoercion.html +0 -238
  88. data/doc/Contentful/RateLimitExceeded.html +0 -346
  89. data/doc/Contentful/Request.html +0 -895
  90. data/doc/Contentful/ResourceBuilder.html +0 -1067
  91. data/doc/Contentful/ResourceReferences.html +0 -254
  92. data/doc/Contentful/Response.html +0 -708
  93. data/doc/Contentful/RichTextCoercion.html +0 -238
  94. data/doc/Contentful/ServerError.html +0 -159
  95. data/doc/Contentful/ServiceUnavailable.html +0 -159
  96. data/doc/Contentful/Space.html +0 -392
  97. data/doc/Contentful/StringCoercion.html +0 -242
  98. data/doc/Contentful/Support.html +0 -788
  99. data/doc/Contentful/SymbolCoercion.html +0 -169
  100. data/doc/Contentful/Sync.html +0 -653
  101. data/doc/Contentful/SyncPage.html +0 -807
  102. data/doc/Contentful/TextCoercion.html +0 -169
  103. data/doc/Contentful/Unauthorized.html +0 -159
  104. data/doc/Contentful/UnparsableJson.html +0 -159
  105. data/doc/Contentful/UnparsableResource.html +0 -135
  106. data/doc/Contentful.html +0 -157
  107. data/doc/_index.html +0 -563
  108. data/doc/class_list.html +0 -51
  109. data/doc/css/common.css +0 -1
  110. data/doc/css/full_list.css +0 -58
  111. data/doc/css/style.css +0 -496
  112. data/doc/file.CHANGELOG.html +0 -715
  113. data/doc/file.LICENSE.html +0 -70
  114. data/doc/file.README.html +0 -758
  115. data/doc/file_list.html +0 -66
  116. data/doc/frames.html +0 -17
  117. data/doc/index.html +0 -758
  118. data/doc/js/app.js +0 -314
  119. data/doc/js/full_list.js +0 -216
  120. data/doc/js/jquery.js +0 -4
  121. data/doc/method_list.html +0 -1187
  122. data/doc/top-level-namespace.html +0 -110
  123. data/examples/custom_classes.rb +0 -39
  124. data/examples/example_queries.rb +0 -26
  125. data/examples/raise_errors.rb +0 -20
  126. data/examples/raw_mode.rb +0 -14
  127. data/spec/array_spec.rb +0 -177
  128. data/spec/asset_spec.rb +0 -192
  129. data/spec/auto_includes_spec.rb +0 -12
  130. data/spec/client_class_spec.rb +0 -86
  131. data/spec/client_configuration_spec.rb +0 -394
  132. data/spec/content_type_spec.rb +0 -49
  133. data/spec/deleted_asset_spec.rb +0 -38
  134. data/spec/deleted_entry_spec.rb +0 -38
  135. data/spec/entry_spec.rb +0 -787
  136. data/spec/error_class_spec.rb +0 -327
  137. data/spec/error_requests_spec.rb +0 -87
  138. data/spec/field_spec.rb +0 -95
  139. data/spec/file_spec.rb +0 -33
  140. data/spec/fixtures/json_responses/400_details_errors_object.json +0 -14
  141. data/spec/fixtures/json_responses/400_details_errors_string.json +0 -12
  142. data/spec/fixtures/json_responses/400_details_string.json +0 -8
  143. data/spec/fixtures/json_responses/403_reasons.json +0 -13
  144. data/spec/fixtures/json_responses/404_details_string.json +0 -8
  145. data/spec/fixtures/json_responses/404_id.json +0 -11
  146. data/spec/fixtures/json_responses/404_sys_type.json +0 -12
  147. data/spec/fixtures/json_responses/404_type.json +0 -10
  148. data/spec/fixtures/json_responses/content_type.json +0 -83
  149. data/spec/fixtures/json_responses/default_400.json +0 -7
  150. data/spec/fixtures/json_responses/default_401.json +0 -7
  151. data/spec/fixtures/json_responses/default_403.json +0 -7
  152. data/spec/fixtures/json_responses/default_404.json +0 -7
  153. data/spec/fixtures/json_responses/default_429.json +0 -7
  154. data/spec/fixtures/json_responses/default_500.json +0 -7
  155. data/spec/fixtures/json_responses/default_502.json +0 -7
  156. data/spec/fixtures/json_responses/default_503.json +0 -7
  157. data/spec/fixtures/json_responses/includes.json +0 -111
  158. data/spec/fixtures/json_responses/link_array.json +0 -43
  159. data/spec/fixtures/json_responses/not_found.json +0 -13
  160. data/spec/fixtures/json_responses/nyancat.json +0 -48
  161. data/spec/fixtures/json_responses/other_error.json +0 -9
  162. data/spec/fixtures/json_responses/other_error_no_details.json +0 -8
  163. data/spec/fixtures/json_responses/other_error_no_message.json +0 -8
  164. data/spec/fixtures/json_responses/other_error_no_request_id.json +0 -8
  165. data/spec/fixtures/json_responses/other_error_nothing.json +0 -6
  166. data/spec/fixtures/json_responses/self_link.json +0 -82
  167. data/spec/fixtures/json_responses/unparsable.json +0 -13
  168. data/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml +0 -159
  169. data/spec/fixtures/vcr_cassettes/array/marshal_unpublished.yml +0 -315
  170. data/spec/fixtures/vcr_cassettes/array/nested_resources.yml +0 -159
  171. data/spec/fixtures/vcr_cassettes/array.yml +0 -288
  172. data/spec/fixtures/vcr_cassettes/arrayField.yml +0 -87
  173. data/spec/fixtures/vcr_cassettes/array_page_1.yml +0 -106
  174. data/spec/fixtures/vcr_cassettes/array_page_2.yml +0 -73
  175. data/spec/fixtures/vcr_cassettes/asset/select_empty_array.yml +0 -104
  176. data/spec/fixtures/vcr_cassettes/asset/select_no_sys.yml +0 -119
  177. data/spec/fixtures/vcr_cassettes/asset/select_one_field.yml +0 -97
  178. data/spec/fixtures/vcr_cassettes/asset/select_only_sys.yml +0 -88
  179. data/spec/fixtures/vcr_cassettes/asset.yml +0 -96
  180. data/spec/fixtures/vcr_cassettes/assets/issues_129.yml +0 -90
  181. data/spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml +0 -115
  182. data/spec/fixtures/vcr_cassettes/bad_request.yml +0 -76
  183. data/spec/fixtures/vcr_cassettes/content_type.yml +0 -147
  184. data/spec/fixtures/vcr_cassettes/entries/empty_fields.yml +0 -246
  185. data/spec/fixtures/vcr_cassettes/entries/issue_117.yml +0 -201
  186. data/spec/fixtures/vcr_cassettes/entries/issue_125.yml +0 -198
  187. data/spec/fixtures/vcr_cassettes/entries/rich_text.yml +0 -1707
  188. data/spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml +0 -460
  189. data/spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml +0 -653
  190. data/spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml +0 -983
  191. data/spec/fixtures/vcr_cassettes/entries/unresolvable_assets.yml +0 -89
  192. data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter.yml +0 -159
  193. data/spec/fixtures/vcr_cassettes/entries/unresolvable_filter_deeply_nested.yml +0 -167
  194. data/spec/fixtures/vcr_cassettes/entries.yml +0 -561
  195. data/spec/fixtures/vcr_cassettes/entry/custom_resource.yml +0 -168
  196. data/spec/fixtures/vcr_cassettes/entry/include_resolution.yml +0 -101
  197. data/spec/fixtures/vcr_cassettes/entry/include_resolution_uniques.yml +0 -81
  198. data/spec/fixtures/vcr_cassettes/entry/json_objects.yml +0 -88
  199. data/spec/fixtures/vcr_cassettes/entry/json_objects_client.yml +0 -86
  200. data/spec/fixtures/vcr_cassettes/entry/marshal_138.yml +0 -159
  201. data/spec/fixtures/vcr_cassettes/entry/marshal_unpublished.yml +0 -303
  202. data/spec/fixtures/vcr_cassettes/entry/marshall.yml +0 -293
  203. data/spec/fixtures/vcr_cassettes/entry/raw.yml +0 -201
  204. data/spec/fixtures/vcr_cassettes/entry/search_link_to_asset.yml +0 -81
  205. data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry.yml +0 -81
  206. data/spec/fixtures/vcr_cassettes/entry/search_link_to_entry_with_custom_query.yml +0 -115
  207. data/spec/fixtures/vcr_cassettes/entry/select_empty_array.yml +0 -111
  208. data/spec/fixtures/vcr_cassettes/entry/select_no_sys.yml +0 -102
  209. data/spec/fixtures/vcr_cassettes/entry/select_one_field.yml +0 -76
  210. data/spec/fixtures/vcr_cassettes/entry/select_one_field_proper.yml +0 -114
  211. data/spec/fixtures/vcr_cassettes/entry/select_only_sys.yml +0 -111
  212. data/spec/fixtures/vcr_cassettes/entry.yml +0 -102
  213. data/spec/fixtures/vcr_cassettes/entry_cache.yml +0 -288
  214. data/spec/fixtures/vcr_cassettes/entry_locales.yml +0 -104
  215. data/spec/fixtures/vcr_cassettes/field.yml +0 -147
  216. data/spec/fixtures/vcr_cassettes/human.yml +0 -118
  217. data/spec/fixtures/vcr_cassettes/linkField.yml +0 -83
  218. data/spec/fixtures/vcr_cassettes/locale.yml +0 -83
  219. data/spec/fixtures/vcr_cassettes/locale_from_environment.yml +0 -121
  220. data/spec/fixtures/vcr_cassettes/location.yml +0 -193
  221. data/spec/fixtures/vcr_cassettes/multi_locale_array_reference.yml +0 -196
  222. data/spec/fixtures/vcr_cassettes/multi_locale_reference.yml +0 -214
  223. data/spec/fixtures/vcr_cassettes/not_found.yml +0 -76
  224. data/spec/fixtures/vcr_cassettes/nyancat.yml +0 -102
  225. data/spec/fixtures/vcr_cassettes/query_array_1.yml +0 -89
  226. data/spec/fixtures/vcr_cassettes/query_array_2.yml +0 -89
  227. data/spec/fixtures/vcr_cassettes/ratelimit.yml +0 -64
  228. data/spec/fixtures/vcr_cassettes/ratelimit_retry.yml +0 -294
  229. data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +0 -102
  230. data/spec/fixtures/vcr_cassettes/space.yml +0 -83
  231. data/spec/fixtures/vcr_cassettes/sync_deleted_asset.yml +0 -174
  232. data/spec/fixtures/vcr_cassettes/sync_deleted_entry.yml +0 -89
  233. data/spec/fixtures/vcr_cassettes/sync_deletion.yml +0 -191
  234. data/spec/fixtures/vcr_cassettes/sync_environment.yml +0 -81
  235. data/spec/fixtures/vcr_cassettes/sync_page.yml +0 -637
  236. data/spec/fixtures/vcr_cassettes/sync_page_2.yml +0 -71
  237. data/spec/fixtures/vcr_cassettes/sync_page_short.yml +0 -106
  238. data/spec/fixtures/vcr_cassettes/unauthorized.yml +0 -64
  239. data/spec/fixtures/vcr_cassettes/unavailable.yml +0 -76
  240. data/spec/link_spec.rb +0 -50
  241. data/spec/locale_spec.rb +0 -37
  242. data/spec/location_spec.rb +0 -25
  243. data/spec/request_spec.rb +0 -57
  244. data/spec/resource_building_spec.rb +0 -31
  245. data/spec/response_spec.rb +0 -62
  246. data/spec/space_spec.rb +0 -31
  247. data/spec/spec_helper.rb +0 -14
  248. data/spec/support/client.rb +0 -6
  249. data/spec/support/json_responses.rb +0 -18
  250. data/spec/support/vcr.rb +0 -16
  251. data/spec/sync_page_spec.rb +0 -103
  252. data/spec/sync_spec.rb +0 -180
@@ -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
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Contentful::ContentType do
4
- let(:content_type) { vcr('content_type') { create_client.content_type 'cat' } }
5
-
6
- describe 'SystemProperties' do
7
- it 'has a #sys getter returning a hash with symbol keys' do
8
- expect(content_type.sys).to be_a Hash
9
- expect(content_type.sys.keys.sample).to be_a Symbol
10
- end
11
-
12
- it 'has #id' do
13
- expect(content_type.id).to eq 'cat'
14
- end
15
-
16
- it 'has #type' do
17
- expect(content_type.type).to eq 'ContentType'
18
- end
19
- end
20
-
21
- describe 'Properties' do
22
- it 'has #name' do
23
- expect(content_type.name).to eq 'Cat'
24
- end
25
-
26
- it 'has #description' do
27
- expect(content_type.description).to eq 'Meow.'
28
- end
29
-
30
- it 'has #fields' do
31
- expect(content_type.fields).to be_a Array
32
- expect(content_type.fields.first).to be_a Contentful::Field
33
- end
34
-
35
- it 'could have #display_field' do
36
- expect(content_type).to respond_to :display_field
37
- end
38
- end
39
-
40
- describe 'camel case' do
41
- it 'supports camel case' do
42
- vcr('content_type') {
43
- content_type = create_client(use_camel_case: true).content_type 'cat'
44
-
45
- expect(content_type.displayField).to eq 'name'
46
- }
47
- end
48
- end
49
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'DeletedAsset' do
4
- let(:deleted_asset)do
5
- vcr('sync_deleted_asset')do
6
- create_client.sync(initial: true, type: 'DeletedAsset').first_page.items[0]
7
- end
8
- end
9
-
10
- describe 'SystemProperties' do
11
- it 'has a #sys getter returning a hash with symbol keys' do
12
- expect(deleted_asset.sys).to be_a Hash
13
- expect(deleted_asset.sys.keys.sample).to be_a Symbol
14
- end
15
-
16
- it 'has #id' do
17
- expect(deleted_asset.id).to eq '5c6VY0gWg0gwaIeYkUUiqG'
18
- end
19
-
20
- it 'has #type' do
21
- expect(deleted_asset.type).to eq 'DeletedAsset'
22
- end
23
-
24
- it 'has #deleted_at' do
25
- expect(deleted_asset.created_at).to be_a DateTime
26
- end
27
- end
28
-
29
- describe 'camel case' do
30
- it 'supports camel case' do
31
- vcr('sync_deleted_asset') {
32
- deleted_asset = create_client(use_camel_case: true).sync(initial: true, type: 'DeletedAsset').first_page.items[0]
33
-
34
- expect(deleted_asset.createdAt).to be_a DateTime
35
- }
36
- end
37
- end
38
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'DeletedEntry' do
4
- let(:deleted_entry)do
5
- vcr('sync_deleted_entry')do
6
- create_client.sync(initial: true, type: 'DeletedEntry').first_page.items[0]
7
- end
8
- end
9
-
10
- describe 'SystemProperties' do
11
- it 'has a #sys getter returning a hash with symbol keys' do
12
- expect(deleted_entry.sys).to be_a Hash
13
- expect(deleted_entry.sys.keys.sample).to be_a Symbol
14
- end
15
-
16
- it 'has #id' do
17
- expect(deleted_entry.id).to eq 'CVebBDcQsSsu6yKKIayy'
18
- end
19
-
20
- it 'has #type' do
21
- expect(deleted_entry.type).to eq 'DeletedEntry'
22
- end
23
-
24
- it 'has #deleted_at' do
25
- expect(deleted_entry.created_at).to be_a DateTime
26
- end
27
- end
28
-
29
- describe 'camel case' do
30
- it 'supports camel case' do
31
- vcr('sync_deleted_entry') {
32
- deleted_entry = create_client(use_camel_case: true).sync(initial: true, type: 'DeletedEntry').first_page.items[0]
33
-
34
- expect(deleted_entry.createdAt).to be_a DateTime
35
- }
36
- end
37
- end
38
- end