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,110 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>
7
- Top Level Namespace
8
-
9
- &mdash; Documentation by YARD 0.9.25
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" />
16
-
17
- <script type="text/javascript">
18
- pathId = "";
19
- relpath = '';
20
- </script>
21
-
22
-
23
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
-
25
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
-
27
-
28
- </head>
29
- <body>
30
- <div class="nav_wrap">
31
- <iframe id="nav" src="class_list.html?1"></iframe>
32
- <div id="resizer"></div>
33
- </div>
34
-
35
- <div id="main" tabindex="-1">
36
- <div id="header">
37
- <div id="menu">
38
-
39
- <a href="_index.html">Index</a> &raquo;
40
-
41
-
42
- <span class="title">Top Level Namespace</span>
43
-
44
- </div>
45
-
46
- <div id="search">
47
-
48
- <a class="full_list_link" id="class_list_link"
49
- href="class_list.html">
50
-
51
- <svg width="24" height="24">
52
- <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
- <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
- <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
- </svg>
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <div id="content"><h1>Top Level Namespace
63
-
64
-
65
-
66
- </h1>
67
- <div class="box_info">
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
- </div>
80
-
81
- <h2>Defined Under Namespace</h2>
82
- <p class="children">
83
-
84
-
85
- <strong class="modules">Modules:</strong> <span class='object_link'><a href="Contentful.html" title="Contentful (module)">Contentful</a></span>
86
-
87
-
88
-
89
-
90
- </p>
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
- </div>
101
-
102
- <div id="footer">
103
- Generated on Fri Jun 19 10:07:37 2020 by
104
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
- 0.9.25 (ruby-2.6.5).
106
- </div>
107
-
108
- </div>
109
- </body>
110
- </html>
@@ -1,39 +0,0 @@
1
- require 'contentful'
2
-
3
- # You can define your own custom classes that inherit from Contentful::Entry.
4
- # This allows you to define custom behaviour, for example, in this case, we want
5
- # the :country field to act as a Contentful::Locale
6
- class MyResource < Contentful::Entry
7
- def country(locale = nil)
8
- @country ||= Contentful::Locale.new(fields(locale)[:country])
9
- end
10
- end
11
-
12
- res = MyResource.new('fields' => {
13
- 'some' => 'value',
14
- 'age' => '25',
15
- 'country' => { 'code' => 'de', 'name' => 'Deutschland' },
16
- 'unknown_property' => 'ignored'
17
- })
18
-
19
- p res.some # => "value"
20
- p res.age # => 25
21
- p res.country # #<Contentful::Locale: ...
22
- p res.unknown_property # NoMethodError
23
-
24
- # To then have it mapped automatically from the client,
25
- # upon client instantiation, you set the :entry_mapping for your ContentType.
26
-
27
- client = Contentful::Client.new(
28
- space: 'your_space_id',
29
- access_token: 'your_access_token',
30
- entry_mapping: {
31
- 'myResource' => MyResource
32
- }
33
- )
34
-
35
- # We request the entries, entries of the 'myResource` content type,
36
- # will return MyResource class objects, while others will remain Contentful::Entry.
37
- client.entries.each { |e| puts e }
38
- # => <Contentful::Entry[other_content_type] id='foobar'>
39
- # => <MyResource[myResource] id='baz'>
@@ -1,26 +0,0 @@
1
- require 'contentful'
2
-
3
- client = Contentful::Client.new(
4
- space: 'cfexampleapi',
5
- access_token: 'b4c0n73n7fu1',
6
- )
7
-
8
- p client.space
9
-
10
- p client.content_types
11
-
12
- p client.entry 'nyancat', locale: 'tlh'
13
-
14
- p client.entries(
15
- 'content_type' => 'cat',
16
- 'fields.likes' => 'lasagna',
17
- )
18
-
19
- p client.entries(
20
- query: 'bacon',
21
- )
22
-
23
- p client.content_types(
24
- order: '-sys.updatedAt',
25
- limit: 3,
26
- )
@@ -1,20 +0,0 @@
1
- require 'contentful'
2
-
3
- client = Contentful::Client.new(
4
- space: 'cfexampleapi',
5
- access_token: 'b4c0n73n7fu1',
6
- )
7
-
8
- begin
9
- p client.asset 'not found'
10
- rescue => error
11
- p error
12
- end
13
-
14
- client2 = Contentful::Client.new(
15
- space: 'cfexampleapi',
16
- access_token: 'b4c0n73n7fu1',
17
- raise_errors: false,
18
- )
19
-
20
- p client2.asset 'not found'
data/examples/raw_mode.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'contentful'
2
-
3
- client = Contentful::Client.new(
4
- space: 'cfexampleapi',
5
- access_token: 'b4c0n73n7fu1',
6
- raw_mode: true,
7
- )
8
-
9
- entry = client.entry 'nyancat'
10
- p entry.is_a? Contentful::Resource # false
11
- p entry.is_a? Contentful::Response # true
12
- p entry.status
13
- p entry
14
- puts entry.raw
data/spec/array_spec.rb DELETED
@@ -1,177 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class CustomClass < Contentful::Entry; end
4
-
5
- describe Contentful::Array do
6
- let(:client) { create_client }
7
- let(:array) { vcr('array') { client.content_types } }
8
-
9
- describe 'SystemProperties' do
10
- it 'has a #sys getter returning a hash with symbol keys' do
11
- expect(array.sys).to be_a Hash
12
- expect(array.sys.keys.sample).to be_a Symbol
13
- end
14
-
15
- it 'has #type' do
16
- expect(array.type).to eq 'Array'
17
- end
18
- end
19
-
20
- describe 'Properties' do
21
- it 'has #total' do
22
- expect(array.total).to eq 4
23
- end
24
-
25
- it 'has #skip' do
26
- expect(array.skip).to eq 0
27
- end
28
-
29
- it 'has #limit' do
30
- expect(array.limit).to eq 100
31
- end
32
-
33
- it 'has #items which contain resources' do
34
- expect(array.items).to be_a Array
35
- expect(array.items.sample).to be_a Contentful::BaseResource
36
- end
37
- end
38
-
39
- describe '#[]' do
40
- it 'provides access to items by index' do
41
- expect(array[0]).to be_a Contentful::BaseResource
42
- end
43
-
44
- it 'provides access to items by two indices' do
45
- expect(array[0, 4]).to eq array.items
46
- end
47
- end
48
-
49
- describe '#each' do
50
- it 'is an Enumerator' do
51
- expect(array.each).to be_a Enumerator
52
- end
53
-
54
- it 'iterates over items' do
55
- expect(array.each.to_a).to eq array.items
56
- end
57
-
58
- it 'includes Enumerable' do
59
- expect(array.map { |r| r.type }).to eq array.items.map { |r| r.type }
60
- end
61
- end
62
-
63
- describe '#next_page' do
64
- it 'requests more of the same content from the server, using its limit and skip values' do
65
- array_page_1 = vcr('array_page_1') { create_client.content_types(skip: 3, limit: 2) }
66
- array_page_2 = vcr('array_page_2') { array_page_1.next_page(client) }
67
-
68
- expect(array_page_2).to be_a Contentful::Array
69
- expect(array_page_2.limit).to eq 2
70
- expect(array_page_2.skip).to eq 5
71
- end
72
-
73
- it 'will return false if #request not available' do
74
- expect(Contentful::Array.new({}).reload).to be_falsey
75
- end
76
-
77
- it 'respects query parameters' do
78
- array_page_1 = vcr('query_array_1') { client.entries(content_type: 'cat', limit: 1) }
79
- array_page_2 = vcr('query_array_2') { array_page_1.next_page(client) }
80
-
81
- expect(array_page_1).to be_a Contentful::Array
82
- expect(array_page_2).to be_a Contentful::Array
83
-
84
- expect(array_page_1.query).to include(content_type: 'cat')
85
- expect(array_page_2.query).to include(content_type: 'cat')
86
-
87
- expect(array_page_1.size).to eq 1
88
- expect(array_page_2.size).to eq 1
89
-
90
- expect(array_page_1[0].content_type.id).to eq 'cat'
91
- expect(array_page_2[0].content_type.id).to eq 'cat'
92
-
93
- expect(array_page_1[0].id).not_to eq array_page_2[0].id
94
- end
95
- end
96
-
97
- describe 'marshalling' do
98
- it 'marshals/unmarshals properly - #132' do
99
- re_array = Marshal.load(Marshal.dump(array))
100
-
101
- expect(re_array.endpoint).to eq array.endpoint
102
- expect(re_array.total).to eq array.total
103
- expect(re_array.limit).to eq array.limit
104
- expect(re_array.skip).to eq array.skip
105
- expect(re_array.items).to eq array.items
106
- end
107
-
108
- it 'marshals nested includes propertly - #138' do
109
- vcr('array/nested_resources') {
110
- client = create_client(
111
- space: 'j8tb59fszch7',
112
- access_token: '5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694',
113
- dynamic_entries: :auto,
114
- max_include_resolution_depth: 5
115
- )
116
- entries = client.entries(content_type: 'child')
117
- rehydrated = Marshal.load(Marshal.dump(entries))
118
-
119
- expect(entries.inspect).to eq rehydrated.inspect
120
-
121
- expect(entries.first.image1.url).to eq rehydrated.first.image1.url
122
- expect(entries.last.image1.url).to eq rehydrated.last.image1.url
123
-
124
- expect(entries.first.image2.url).to eq rehydrated.first.image2.url
125
- expect(entries.last.image2.url).to eq rehydrated.last.image2.url
126
- }
127
- end
128
-
129
- it 'marshals custom resources properly - #138' do
130
- vcr('array/marshal_custom_classes') {
131
- client = create_client(
132
- space: 'j8tb59fszch7',
133
- access_token: '5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694',
134
- dynamic_entries: :auto,
135
- max_include_resolution_depth: 5,
136
- entry_mapping: {
137
- 'parent' => CustomClass
138
- }
139
- )
140
-
141
- entries = client.entries(content_type: 'parent')
142
-
143
- expect(entries.first.inspect).to eq "<CustomClass[parent] id='5aV3O0l5jU0cwQ2OkyYsyU'>"
144
-
145
- dehydrated = Marshal.load(Marshal.dump(entries))
146
-
147
- expect(dehydrated.first.inspect).to eq "<CustomClass[parent] id='5aV3O0l5jU0cwQ2OkyYsyU'>"
148
- }
149
- end
150
-
151
- it 'filters out unpublished resources after rehydration' do
152
- vcr('array/marshal_unpublished') {
153
- parent = create_client(
154
- space: 'z3eix6mwjid2',
155
- access_token: '9047c4394a2130dff8e9dc544a7a3ec299703fdac8e52575eb5a6678be06c468',
156
- dynamic_entries: :auto
157
- ).entries('sys.id': '5Etc0jWzIWwMeSu4W0SCi8')
158
-
159
- rehydrated = Marshal.load(Marshal.dump(parent))
160
-
161
- expect(rehydrated.first.children).to be_empty
162
-
163
- preview_parent = create_client(
164
- space: 'z3eix6mwjid2',
165
- access_token: '38153b942011a70b5482fda61c6a3a9d22f5e8a512662dac00fcf7eb344b75f4',
166
- dynamic_entries: :auto,
167
- api_url: 'preview.contentful.com'
168
- ).entries('sys.id': '5Etc0jWzIWwMeSu4W0SCi8')
169
-
170
- preview_rehydrated = Marshal.load(Marshal.dump(preview_parent))
171
-
172
- expect(preview_rehydrated.first.children).not_to be_empty
173
- expect(preview_rehydrated.first.children.first.title).to eq 'Child'
174
- }
175
- end
176
- end
177
- end
data/spec/asset_spec.rb DELETED
@@ -1,192 +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
- end
@@ -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
@@ -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