contentful 2.12.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +69 -1
  3. data/README.md +24 -13
  4. data/lib/contentful/array.rb +14 -6
  5. data/lib/contentful/array_like.rb +11 -2
  6. data/lib/contentful/asset.rb +10 -4
  7. data/lib/contentful/base_resource.rb +29 -6
  8. data/lib/contentful/client.rb +4 -3
  9. data/lib/contentful/coercions.rb +1 -4
  10. data/lib/contentful/entry.rb +9 -5
  11. data/lib/contentful/fields_resource.rb +7 -11
  12. data/lib/contentful/includes.rb +74 -0
  13. data/lib/contentful/request.rb +6 -1
  14. data/lib/contentful/resource_builder.rb +15 -12
  15. data/lib/contentful/support.rb +0 -35
  16. data/lib/contentful/version.rb +1 -1
  17. metadata +15 -370
  18. data/.gitignore +0 -7
  19. data/.rspec +0 -1
  20. data/.rubocop.yml +0 -28
  21. data/.rubocop_todo.yml +0 -35
  22. data/.travis.yml +0 -13
  23. data/.yardopts +0 -4
  24. data/Gemfile +0 -9
  25. data/Gemfile.lock +0 -152
  26. data/Guardfile +0 -24
  27. data/RELEASE.md +0 -8
  28. data/Rakefile +0 -33
  29. data/contentful.gemspec +0 -44
  30. data/coverage/.last_run.json +0 -5
  31. data/coverage/.resultset.json +0 -2419
  32. data/coverage/.resultset.json.lock +0 -0
  33. data/coverage/assets/0.10.2/application.css +0 -799
  34. data/coverage/assets/0.10.2/application.js +0 -1707
  35. data/coverage/assets/0.10.2/colorbox/border.png +0 -0
  36. data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  37. data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  38. data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  39. data/coverage/assets/0.10.2/favicon_green.png +0 -0
  40. data/coverage/assets/0.10.2/favicon_red.png +0 -0
  41. data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  42. data/coverage/assets/0.10.2/loading.gif +0 -0
  43. data/coverage/assets/0.10.2/magnify.png +0 -0
  44. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  45. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  46. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  47. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  48. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  49. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  50. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  51. data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  52. data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  53. data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  54. data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  55. data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  56. data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  57. data/coverage/index.html +0 -15071
  58. data/doc/Contentful/AccessDenied.html +0 -159
  59. data/doc/Contentful/Array.html +0 -765
  60. data/doc/Contentful/ArrayCoercion.html +0 -242
  61. data/doc/Contentful/ArrayLike.html +0 -625
  62. data/doc/Contentful/Asset.html +0 -487
  63. data/doc/Contentful/BadGateway.html +0 -159
  64. data/doc/Contentful/BadRequest.html +0 -159
  65. data/doc/Contentful/BaseCoercion.html +0 -445
  66. data/doc/Contentful/BaseResource.html +0 -599
  67. data/doc/Contentful/BooleanCoercion.html +0 -242
  68. data/doc/Contentful/Client.html +0 -1740
  69. data/doc/Contentful/ContentType.html +0 -618
  70. data/doc/Contentful/ContentTypeCache.html +0 -428
  71. data/doc/Contentful/DateCoercion.html +0 -244
  72. data/doc/Contentful/DeletedAsset.html +0 -157
  73. data/doc/Contentful/DeletedEntry.html +0 -157
  74. data/doc/Contentful/EmptyFieldError.html +0 -217
  75. data/doc/Contentful/Entry.html +0 -334
  76. data/doc/Contentful/Error.html +0 -410
  77. data/doc/Contentful/Field.html +0 -936
  78. data/doc/Contentful/FieldsResource.html +0 -583
  79. data/doc/Contentful/File.html +0 -218
  80. data/doc/Contentful/FloatCoercion.html +0 -238
  81. data/doc/Contentful/IntegerCoercion.html +0 -238
  82. data/doc/Contentful/Link.html +0 -249
  83. data/doc/Contentful/LinkCoercion.html +0 -158
  84. data/doc/Contentful/Locale.html +0 -537
  85. data/doc/Contentful/Location.html +0 -383
  86. data/doc/Contentful/LocationCoercion.html +0 -238
  87. data/doc/Contentful/NotFound.html +0 -159
  88. data/doc/Contentful/ObjectCoercion.html +0 -238
  89. data/doc/Contentful/RateLimitExceeded.html +0 -346
  90. data/doc/Contentful/Request.html +0 -887
  91. data/doc/Contentful/ResourceBuilder.html +0 -978
  92. data/doc/Contentful/ResourceReferences.html +0 -254
  93. data/doc/Contentful/Response.html +0 -710
  94. data/doc/Contentful/RichTextCoercion.html +0 -238
  95. data/doc/Contentful/ServerError.html +0 -159
  96. data/doc/Contentful/ServiceUnavailable.html +0 -159
  97. data/doc/Contentful/Space.html +0 -393
  98. data/doc/Contentful/StringCoercion.html +0 -242
  99. data/doc/Contentful/StructuredTextCoercion.html +0 -238
  100. data/doc/Contentful/Support.html +0 -788
  101. data/doc/Contentful/SymbolCoercion.html +0 -169
  102. data/doc/Contentful/Sync.html +0 -653
  103. data/doc/Contentful/SyncPage.html +0 -807
  104. data/doc/Contentful/TextCoercion.html +0 -169
  105. data/doc/Contentful/Unauthorized.html +0 -159
  106. data/doc/Contentful/UnparsableJson.html +0 -159
  107. data/doc/Contentful/UnparsableResource.html +0 -135
  108. data/doc/Contentful.html +0 -157
  109. data/doc/_index.html +0 -563
  110. data/doc/class_list.html +0 -51
  111. data/doc/css/common.css +0 -1
  112. data/doc/css/full_list.css +0 -58
  113. data/doc/css/style.css +0 -496
  114. data/doc/file.CHANGELOG.html +0 -729
  115. data/doc/file.LICENSE.html +0 -70
  116. data/doc/file.README.html +0 -925
  117. data/doc/file_list.html +0 -66
  118. data/doc/frames.html +0 -17
  119. data/doc/index.html +0 -925
  120. data/doc/js/app.js +0 -292
  121. data/doc/js/full_list.js +0 -216
  122. data/doc/js/jquery.js +0 -4
  123. data/doc/method_list.html +0 -1171
  124. data/doc/top-level-namespace.html +0 -110
  125. data/examples/custom_classes.rb +0 -39
  126. data/examples/example_queries.rb +0 -26
  127. data/examples/raise_errors.rb +0 -20
  128. data/examples/raw_mode.rb +0 -14
  129. data/spec/array_spec.rb +0 -122
  130. data/spec/asset_spec.rb +0 -192
  131. data/spec/auto_includes_spec.rb +0 -12
  132. data/spec/client_class_spec.rb +0 -86
  133. data/spec/client_configuration_spec.rb +0 -377
  134. data/spec/content_type_spec.rb +0 -49
  135. data/spec/deleted_asset_spec.rb +0 -38
  136. data/spec/deleted_entry_spec.rb +0 -38
  137. data/spec/entry_spec.rb +0 -688
  138. data/spec/error_class_spec.rb +0 -327
  139. data/spec/error_requests_spec.rb +0 -87
  140. data/spec/field_spec.rb +0 -95
  141. data/spec/file_spec.rb +0 -33
  142. data/spec/fixtures/json_responses/400_details_errors_object.json +0 -14
  143. data/spec/fixtures/json_responses/400_details_errors_string.json +0 -12
  144. data/spec/fixtures/json_responses/400_details_string.json +0 -8
  145. data/spec/fixtures/json_responses/403_reasons.json +0 -13
  146. data/spec/fixtures/json_responses/404_details_string.json +0 -8
  147. data/spec/fixtures/json_responses/404_id.json +0 -11
  148. data/spec/fixtures/json_responses/404_sys_type.json +0 -12
  149. data/spec/fixtures/json_responses/404_type.json +0 -10
  150. data/spec/fixtures/json_responses/content_type.json +0 -83
  151. data/spec/fixtures/json_responses/default_400.json +0 -7
  152. data/spec/fixtures/json_responses/default_401.json +0 -7
  153. data/spec/fixtures/json_responses/default_403.json +0 -7
  154. data/spec/fixtures/json_responses/default_404.json +0 -7
  155. data/spec/fixtures/json_responses/default_429.json +0 -7
  156. data/spec/fixtures/json_responses/default_500.json +0 -7
  157. data/spec/fixtures/json_responses/default_502.json +0 -7
  158. data/spec/fixtures/json_responses/default_503.json +0 -7
  159. data/spec/fixtures/json_responses/includes.json +0 -111
  160. data/spec/fixtures/json_responses/link_array.json +0 -43
  161. data/spec/fixtures/json_responses/not_found.json +0 -13
  162. data/spec/fixtures/json_responses/nyancat.json +0 -48
  163. data/spec/fixtures/json_responses/other_error.json +0 -9
  164. data/spec/fixtures/json_responses/other_error_no_details.json +0 -8
  165. data/spec/fixtures/json_responses/other_error_no_message.json +0 -8
  166. data/spec/fixtures/json_responses/other_error_no_request_id.json +0 -8
  167. data/spec/fixtures/json_responses/other_error_nothing.json +0 -6
  168. data/spec/fixtures/json_responses/self_link.json +0 -82
  169. data/spec/fixtures/json_responses/unparsable.json +0 -13
  170. data/spec/fixtures/vcr_cassettes/array/marshal_custom_classes.yml +0 -159
  171. data/spec/fixtures/vcr_cassettes/array/nested_resources.yml +0 -159
  172. data/spec/fixtures/vcr_cassettes/array.yml +0 -288
  173. data/spec/fixtures/vcr_cassettes/arrayField.yml +0 -87
  174. data/spec/fixtures/vcr_cassettes/array_page_1.yml +0 -106
  175. data/spec/fixtures/vcr_cassettes/array_page_2.yml +0 -73
  176. data/spec/fixtures/vcr_cassettes/asset/select_empty_array.yml +0 -104
  177. data/spec/fixtures/vcr_cassettes/asset/select_no_sys.yml +0 -119
  178. data/spec/fixtures/vcr_cassettes/asset/select_one_field.yml +0 -97
  179. data/spec/fixtures/vcr_cassettes/asset/select_only_sys.yml +0 -88
  180. data/spec/fixtures/vcr_cassettes/asset.yml +0 -96
  181. data/spec/fixtures/vcr_cassettes/assets/issues_129.yml +0 -90
  182. data/spec/fixtures/vcr_cassettes/assets/issues_jekyll_46.yml +0 -115
  183. data/spec/fixtures/vcr_cassettes/bad_request.yml +0 -76
  184. data/spec/fixtures/vcr_cassettes/content_type.yml +0 -147
  185. data/spec/fixtures/vcr_cassettes/entries/empty_fields.yml +0 -246
  186. data/spec/fixtures/vcr_cassettes/entries/issue_117.yml +0 -201
  187. data/spec/fixtures/vcr_cassettes/entries/issue_125.yml +0 -198
  188. data/spec/fixtures/vcr_cassettes/entries/rich_text.yml +0 -1707
  189. data/spec/fixtures/vcr_cassettes/entries/rich_text_hydration_issue.yml +0 -460
  190. data/spec/fixtures/vcr_cassettes/entries/rich_text_nested_fields.yml +0 -653
  191. data/spec/fixtures/vcr_cassettes/entries/rich_text_unresolved_relationships.yml +0 -983
  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/ratelimit.yml +0 -64
  226. data/spec/fixtures/vcr_cassettes/ratelimit_retry.yml +0 -294
  227. data/spec/fixtures/vcr_cassettes/reloaded_entry.yml +0 -102
  228. data/spec/fixtures/vcr_cassettes/space.yml +0 -83
  229. data/spec/fixtures/vcr_cassettes/sync_deleted_asset.yml +0 -174
  230. data/spec/fixtures/vcr_cassettes/sync_deleted_entry.yml +0 -89
  231. data/spec/fixtures/vcr_cassettes/sync_deletion.yml +0 -191
  232. data/spec/fixtures/vcr_cassettes/sync_environment.yml +0 -81
  233. data/spec/fixtures/vcr_cassettes/sync_page.yml +0 -637
  234. data/spec/fixtures/vcr_cassettes/sync_page_2.yml +0 -71
  235. data/spec/fixtures/vcr_cassettes/sync_page_short.yml +0 -106
  236. data/spec/fixtures/vcr_cassettes/unauthorized.yml +0 -64
  237. data/spec/fixtures/vcr_cassettes/unavailable.yml +0 -76
  238. data/spec/link_spec.rb +0 -50
  239. data/spec/locale_spec.rb +0 -37
  240. data/spec/location_spec.rb +0 -25
  241. data/spec/request_spec.rb +0 -57
  242. data/spec/resource_building_spec.rb +0 -31
  243. data/spec/response_spec.rb +0 -62
  244. data/spec/space_spec.rb +0 -31
  245. data/spec/spec_helper.rb +0 -14
  246. data/spec/support/client.rb +0 -6
  247. data/spec/support/json_responses.rb +0 -18
  248. data/spec/support/vcr.rb +0 -16
  249. data/spec/sync_page_spec.rb +0 -103
  250. 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.18
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
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 Tue Apr 9 10:49:56 2019 by
104
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
- 0.9.18 (ruby-2.5.3).
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,122 +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 '#each' do
40
- it 'is an Enumerator' do
41
- expect(array.each).to be_a Enumerator
42
- end
43
-
44
- it 'iterates over items' do
45
- expect(array.each.to_a).to eq array.items
46
- end
47
-
48
- it 'includes Enumerable' do
49
- expect(array.map { |r| r.type }).to eq array.items.map { |r| r.type }
50
- end
51
- end
52
-
53
- describe '#next_page' do
54
- it 'requests more of the same content from the server, using its limit and skip values' do
55
- array_page_1 = vcr('array_page_1') { create_client.content_types(skip: 3, limit: 2) }
56
- array_page_2 = vcr('array_page_2') { array_page_1.next_page(client) }
57
-
58
- expect(array_page_2).to be_a Contentful::Array
59
- expect(array_page_2.limit).to eq 2
60
- expect(array_page_2.skip).to eq 5
61
- end
62
-
63
- it 'will return false if #request not available' do
64
- expect(Contentful::Array.new({}).reload).to be_falsey
65
- end
66
- end
67
-
68
- describe 'marshalling' do
69
- it 'marshals/unmarshals properly - #132' do
70
- re_array = Marshal.load(Marshal.dump(array))
71
-
72
- expect(re_array.endpoint).to eq array.endpoint
73
- expect(re_array.total).to eq array.total
74
- expect(re_array.limit).to eq array.limit
75
- expect(re_array.skip).to eq array.skip
76
- expect(re_array.items).to eq array.items
77
- end
78
-
79
- it 'marshals nested includes propertly - #138' do
80
- vcr('array/nested_resources') {
81
- client = create_client(
82
- space: 'j8tb59fszch7',
83
- access_token: '5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694',
84
- dynamic_entries: :auto,
85
- max_include_resolution_depth: 5
86
- )
87
- entries = client.entries(content_type: 'child')
88
- rehydrated = Marshal.load(Marshal.dump(entries))
89
-
90
- expect(entries.inspect).to eq rehydrated.inspect
91
-
92
- expect(entries.first.image1.url).to eq rehydrated.first.image1.url
93
- expect(entries.last.image1.url).to eq rehydrated.last.image1.url
94
-
95
- expect(entries.first.image2.url).to eq rehydrated.first.image2.url
96
- expect(entries.last.image2.url).to eq rehydrated.last.image2.url
97
- }
98
- end
99
-
100
- it 'marshals custom resources properly - #138' do
101
- vcr('array/marshal_custom_classes') {
102
- client = create_client(
103
- space: 'j8tb59fszch7',
104
- access_token: '5f711401f965951eb724ac72ac905e13d892294ba209268f13a9b32e896c8694',
105
- dynamic_entries: :auto,
106
- max_include_resolution_depth: 5,
107
- entry_mapping: {
108
- 'parent' => CustomClass
109
- }
110
- )
111
-
112
- entries = client.entries(content_type: 'parent')
113
-
114
- expect(entries.first.inspect).to eq "<CustomClass[parent] id='5aV3O0l5jU0cwQ2OkyYsyU'>"
115
-
116
- dehydrated = Marshal.load(Marshal.dump(entries))
117
-
118
- expect(dehydrated.first.inspect).to eq "<CustomClass[parent] id='5aV3O0l5jU0cwQ2OkyYsyU'>"
119
- }
120
- end
121
- end
122
- 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).twice.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