kontent-delivery-sdk-ruby 2.0.6 → 2.0.7

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +21 -21
  3. data/README.md +511 -511
  4. data/bin/console +14 -14
  5. data/bin/setup +8 -8
  6. data/lib/delivery/builders/image_transformation_builder.rb +271 -271
  7. data/lib/delivery/builders/url_builder.rb +117 -117
  8. data/lib/delivery/client/delivery_client.rb +155 -155
  9. data/lib/delivery/client/delivery_query.rb +249 -249
  10. data/lib/delivery/client/request_manager.rb +107 -107
  11. data/lib/delivery/models/content_item.rb +153 -153
  12. data/lib/delivery/models/content_type.rb +41 -41
  13. data/lib/delivery/models/pagination.rb +21 -21
  14. data/lib/delivery/models/taxonomy_group.rb +39 -39
  15. data/lib/delivery/query_parameters/filters.rb +158 -158
  16. data/lib/delivery/query_parameters/parameter_base.rb +44 -44
  17. data/lib/delivery/query_parameters/query_string.rb +78 -78
  18. data/lib/delivery/resolvers/content_link_resolver.rb +102 -102
  19. data/lib/delivery/resolvers/inline_content_item_resolver.rb +75 -75
  20. data/lib/delivery/resolvers/linked_item_resolver.rb +37 -37
  21. data/lib/delivery/responses/delivery_element_response.rb +33 -33
  22. data/lib/delivery/responses/delivery_item_listing_response.rb +53 -53
  23. data/lib/delivery/responses/delivery_item_response.rb +39 -39
  24. data/lib/delivery/responses/delivery_taxonomy_listing_response.rb +46 -46
  25. data/lib/delivery/responses/delivery_taxonomy_response.rb +32 -32
  26. data/lib/delivery/responses/delivery_type_listing_response.rb +45 -45
  27. data/lib/delivery/responses/delivery_type_response.rb +31 -31
  28. data/lib/delivery/responses/response_base.rb +36 -36
  29. data/lib/delivery/tests/401.json +5 -5
  30. data/lib/delivery/tests/fake_responder.rb +67 -67
  31. data/lib/delivery/tests/filtering/items_gt.json +565 -565
  32. data/lib/delivery/tests/filtering/multiple.json +282 -282
  33. data/lib/delivery/tests/filtering/pagination_about_us.json +646 -646
  34. data/lib/delivery/tests/generic/items/about_us.json +227 -227
  35. data/lib/delivery/tests/generic/items/aeropress_filters.json +138 -138
  36. data/lib/delivery/tests/generic/items/coffee_processing_techniques.json +168 -168
  37. data/lib/delivery/tests/generic/items/where_does_coffee_come_from_.json +620 -620
  38. data/lib/delivery/tests/generic/items.json +4984 -4984
  39. data/lib/delivery/tests/generic/taxonomies.json +126 -126
  40. data/lib/delivery/tests/generic/types/brewer/elements/product_status.json +5 -5
  41. data/lib/delivery/tests/generic/types.json +780 -780
  42. data/lib/delivery/version.rb +7 -7
  43. data/lib/kontent-delivery-sdk-ruby.rb +19 -19
  44. metadata +12 -13
@@ -1,249 +1,249 @@
1
- require 'delivery/builders/url_builder'
2
- require 'delivery/query_parameters/query_string'
3
- require 'delivery/version'
4
-
5
- module Kentico
6
- module Kontent
7
- module Delivery
8
- # Responsible for executing REST requests to Kentico Kontent.
9
- class DeliveryQuery
10
- ERROR_PREVIEW = 'Preview is enabled for the query, but the key is null. '\
11
- 'You can set the preview_key attribute of the query, or '\
12
- 'when you initialize the client. See '\
13
- 'https://github.com/Kentico/kontent-delivery-sdk-ruby#previewing-unpublished-content'.freeze
14
- ERROR_PARAMS = 'Only filters may be passed in the .item or .items methods'\
15
- '. See https://github.com/Kentico/kontent-delivery-sdk-ruby#filtering'.freeze
16
- attr_accessor :use_preview,
17
- :preview_key,
18
- :project_id,
19
- :code_name,
20
- :secure_key,
21
- :content_link_url_resolver,
22
- :inline_content_item_resolver,
23
- :query_type,
24
- :query_string,
25
- :content_type,
26
- :with_retry_policy
27
-
28
- # Setter for a custom URL.
29
- #
30
- # * *Args*:
31
- # - *url* (+string+) _optional_ Custom URL to use for the query
32
- #
33
- # * *Returns*:
34
- # - +self+
35
- def url(url = nil)
36
- @url = url unless url.nil?
37
- self
38
- end
39
-
40
- # Constructor. Queries should not be instantiated using the constructor, but
41
- # using one of the Kentico::Kontent::Delivery::DeliveryClient methods instead.
42
- #
43
- # * *Args*:
44
- # - *config* (+Hash+) A hash in which each key automatically has its value paired with the corresponding attribute
45
- def initialize(config)
46
- @headers = {}
47
-
48
- # Map each hash value to attr with corresponding key
49
- # from https://stackoverflow.com/a/2681014/5656214
50
- config.each do |k, v|
51
- instance_variable_set("@#{k}", v) unless v.nil?
52
- end
53
- self.query_string = Kentico::Kontent::Delivery::QueryParameters::QueryString.new
54
- return if config.fetch(:qp, nil).nil?
55
-
56
- # Query parameters were passed, parse and validate
57
- validate_params config.fetch(:qp)
58
- end
59
-
60
- # Executes the REST request.
61
- #
62
- # * *Returns*:
63
- # - Kentico::Kontent::Delivery::Responses::ResponseBase or a class extending it
64
- def execute
65
- headers = @headers.clone
66
- headers['X-KC-SDKID'] = provide_sdk_header
67
- headers['Authorization'] = "Bearer #{preview_key}" if should_preview
68
- headers['Authorization'] = "Bearer #{secure_key}" if !should_preview && secure_key
69
-
70
- resp = Kentico::Kontent::Delivery::RequestManager.start self, headers
71
- yield resp if block_given?
72
- resp
73
- end
74
-
75
- # Determines whether the query should use preview mode.
76
- #
77
- # * *Returns*:
78
- # - +boolean+ Whether preview mode should be used for the query
79
- #
80
- # * *Raises*:
81
- # - +StandardError+ if +use_preview+ is true, but +preview_key+ is +nil+
82
- def should_preview
83
- raise ERROR_PREVIEW if use_preview && preview_key.nil?
84
-
85
- use_preview && !preview_key.nil?
86
- end
87
-
88
- # Sets a content link resolver to render links contained in rich text. See
89
- # https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-links
90
- #
91
- # * *Args*:
92
- # - *resolver* ( Kentico::Kontent::Delivery::Resolvers::ContentLinkResolver ) The resolver. Replaces a resolver registered during +DeliveryClient+ instantiation, for this query only.
93
- #
94
- # * *Returns*:
95
- # - +self+
96
- def with_link_resolver(resolver)
97
- self.content_link_url_resolver = resolver
98
- self
99
- end
100
-
101
- # Sets an inline content itme to render content items and components in rich text.
102
- # See https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-inline-content
103
- #
104
- # * *Args*:
105
- # - *resolver* ( Kentico::Kontent::Delivery::Resolvers::InlineContentItemResolver ) The resolver. Replaces a resolver registered during +DeliveryClient+ instantiation, for this query only.
106
- #
107
- # * *Returns*:
108
- # - +self+
109
- def with_inline_content_item_resolver(resolver)
110
- self.inline_content_item_resolver = resolver
111
- self
112
- end
113
-
114
- # Sets the 'order' query string parameter
115
- #
116
- # * *Args*:
117
- # - *value* (+string+) The value to order by
118
- # - *sort* (+string+) _optional_ The direction of the order, surrounded by brackets. The default value is '[asc]'
119
- #
120
- # * *Returns*:
121
- # - +self+
122
- def order_by(value, sort = '[asc]')
123
- query_string.set_param('order', value + sort)
124
- self
125
- end
126
-
127
- # Sets the 'skip' query string parameter for paging results.
128
- # See https://developer.kenticocloud.com/v1/reference#listing-response-paging
129
- #
130
- # * *Args*:
131
- # - *value* (+integer+) The number to skip by
132
- #
133
- # * *Returns*:
134
- # - +self+
135
- def skip(value)
136
- query_string.set_param('skip', value)
137
- self
138
- end
139
-
140
- # Sets the 'language' query string parameter. Language fallbacks will be used
141
- # if untranslated content items are found.
142
- # See https://developer.kenticocloud.com/docs/localization#section-getting-localized-content-items
143
- #
144
- # * *Args*:
145
- # - *value* (+string+) The code name of the desired language
146
- #
147
- # * *Returns*:
148
- # - +self+
149
- def language(value)
150
- query_string.set_param('language', value)
151
- self
152
- end
153
-
154
- # Sets the 'limit' query string parameter for paging results, or just to
155
- # return a specific number of content items.
156
- # See https://developer.kenticocloud.com/v1/reference#listing-response-paging
157
- #
158
- # * *Args*:
159
- # - *value* (+integer+) The number of content items to return
160
- #
161
- # * *Returns*:
162
- # - +self+
163
- def limit(value)
164
- query_string.set_param('limit', value)
165
- self
166
- end
167
-
168
- # Sets the 'elements' query string parameter to limit the elements returned
169
- # by the query.
170
- # See https://developer.kenticocloud.com/v1/reference#projection
171
- #
172
- # * *Args*:
173
- # - *value* (+Array+) A single string or array of strings specifying the desired elements, e.g. %w[price product_name image]
174
- #
175
- # * *Returns*:
176
- # - +self+
177
- def elements(value)
178
- query_string.set_param('elements', value)
179
- self
180
- end
181
-
182
- # Sets the 'depth' query string parameter to determine how many levels of
183
- # linked content items should be returned. By default, only 1 level of depth
184
- # is used.
185
- # See https://developer.kenticocloud.com/v1/reference#linked-content
186
- #
187
- # * *Args*:
188
- # - *value* (+integer+) Level of linked items to be returned
189
- #
190
- # * *Returns*:
191
- # - +self+
192
- def depth(value)
193
- query_string.set_param('depth', value)
194
- self
195
- end
196
-
197
- # Allows the request to bypass caching and return the latest content
198
- # directly from Kentico Kontent.
199
- # See https://github.com/Kentico/kontent-delivery-sdk-ruby#requesting-the-latest-content
200
- #
201
- # * *Returns*:
202
- # - +self+
203
- def request_latest_content
204
- @headers['X-KC-Wait-For-Loading-New-Content'] = true
205
- self
206
- end
207
-
208
- # Uses Kentico::Kontent::Delivery::Builders::UrlBuilder.provide_url to set
209
- # the URL for the query. The +UrlBuilder+ also validates the URL.
210
- #
211
- # * *Raises*:
212
- # - +UriFormatException+ if the URL is 65,519 characters or more
213
- #
214
- # * *Returns*:
215
- # - +string+ The full URL for this query
216
- def provide_url
217
- @url = Kentico::Kontent::Delivery::Builders::UrlBuilder.provide_url self if @url.nil?
218
- Kentico::Kontent::Delivery::Builders::UrlBuilder.validate_url @url
219
- @url
220
- end
221
-
222
- private
223
-
224
- # Initializes the +query_string+ attribute with the passed array of
225
- # Kentico::Kontent::Delivery::QueryParameters::Filter objects.
226
- #
227
- # * *Raises*:
228
- # - +ArgumentError+ if one the passed objects is not a +Filter+
229
- def validate_params(query_parameters)
230
- params = if query_parameters.is_a? Array
231
- query_parameters
232
- else
233
- [query_parameters]
234
- end
235
- params.each do |p|
236
- query_string.set_param p
237
- unless p.is_a? Kentico::Kontent::Delivery::QueryParameters::Filter
238
- raise ArgumentError, ERROR_PARAMS
239
- end
240
- end
241
- end
242
-
243
- def provide_sdk_header
244
- "rubygems.org;kontent-delivery-sdk-ruby;#{Kentico::Kontent::Delivery::VERSION}"
245
- end
246
- end
247
- end
248
- end
249
- end
1
+ require 'delivery/builders/url_builder'
2
+ require 'delivery/query_parameters/query_string'
3
+ require 'delivery/version'
4
+
5
+ module Kentico
6
+ module Kontent
7
+ module Delivery
8
+ # Responsible for executing REST requests to Kentico Kontent.
9
+ class DeliveryQuery
10
+ ERROR_PREVIEW = 'Preview is enabled for the query, but the key is null. '\
11
+ 'You can set the preview_key attribute of the query, or '\
12
+ 'when you initialize the client. See '\
13
+ 'https://github.com/Kentico/kontent-delivery-sdk-ruby#previewing-unpublished-content'.freeze
14
+ ERROR_PARAMS = 'Only filters may be passed in the .item or .items methods'\
15
+ '. See https://github.com/Kentico/kontent-delivery-sdk-ruby#filtering'.freeze
16
+ attr_accessor :use_preview,
17
+ :preview_key,
18
+ :project_id,
19
+ :code_name,
20
+ :secure_key,
21
+ :content_link_url_resolver,
22
+ :inline_content_item_resolver,
23
+ :query_type,
24
+ :query_string,
25
+ :content_type,
26
+ :with_retry_policy
27
+
28
+ # Setter for a custom URL.
29
+ #
30
+ # * *Args*:
31
+ # - *url* (+string+) _optional_ Custom URL to use for the query
32
+ #
33
+ # * *Returns*:
34
+ # - +self+
35
+ def url(url = nil)
36
+ @url = url unless url.nil?
37
+ self
38
+ end
39
+
40
+ # Constructor. Queries should not be instantiated using the constructor, but
41
+ # using one of the Kentico::Kontent::Delivery::DeliveryClient methods instead.
42
+ #
43
+ # * *Args*:
44
+ # - *config* (+Hash+) A hash in which each key automatically has its value paired with the corresponding attribute
45
+ def initialize(config)
46
+ @headers = {}
47
+
48
+ # Map each hash value to attr with corresponding key
49
+ # from https://stackoverflow.com/a/2681014/5656214
50
+ config.each do |k, v|
51
+ instance_variable_set("@#{k}", v) unless v.nil?
52
+ end
53
+ self.query_string = Kentico::Kontent::Delivery::QueryParameters::QueryString.new
54
+ return if config.fetch(:qp, nil).nil?
55
+
56
+ # Query parameters were passed, parse and validate
57
+ validate_params config.fetch(:qp)
58
+ end
59
+
60
+ # Executes the REST request.
61
+ #
62
+ # * *Returns*:
63
+ # - Kentico::Kontent::Delivery::Responses::ResponseBase or a class extending it
64
+ def execute
65
+ headers = @headers.clone
66
+ headers['X-KC-SDKID'] = provide_sdk_header
67
+ headers['Authorization'] = "Bearer #{preview_key}" if should_preview
68
+ headers['Authorization'] = "Bearer #{secure_key}" if !should_preview && secure_key
69
+
70
+ resp = Kentico::Kontent::Delivery::RequestManager.start self, headers
71
+ yield resp if block_given?
72
+ resp
73
+ end
74
+
75
+ # Determines whether the query should use preview mode.
76
+ #
77
+ # * *Returns*:
78
+ # - +boolean+ Whether preview mode should be used for the query
79
+ #
80
+ # * *Raises*:
81
+ # - +StandardError+ if +use_preview+ is true, but +preview_key+ is +nil+
82
+ def should_preview
83
+ raise ERROR_PREVIEW if use_preview && preview_key.nil?
84
+
85
+ use_preview && !preview_key.nil?
86
+ end
87
+
88
+ # Sets a content link resolver to render links contained in rich text. See
89
+ # https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-links
90
+ #
91
+ # * *Args*:
92
+ # - *resolver* ( Kentico::Kontent::Delivery::Resolvers::ContentLinkResolver ) The resolver. Replaces a resolver registered during +DeliveryClient+ instantiation, for this query only.
93
+ #
94
+ # * *Returns*:
95
+ # - +self+
96
+ def with_link_resolver(resolver)
97
+ self.content_link_url_resolver = resolver
98
+ self
99
+ end
100
+
101
+ # Sets an inline content itme to render content items and components in rich text.
102
+ # See https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-inline-content
103
+ #
104
+ # * *Args*:
105
+ # - *resolver* ( Kentico::Kontent::Delivery::Resolvers::InlineContentItemResolver ) The resolver. Replaces a resolver registered during +DeliveryClient+ instantiation, for this query only.
106
+ #
107
+ # * *Returns*:
108
+ # - +self+
109
+ def with_inline_content_item_resolver(resolver)
110
+ self.inline_content_item_resolver = resolver
111
+ self
112
+ end
113
+
114
+ # Sets the 'order' query string parameter
115
+ #
116
+ # * *Args*:
117
+ # - *value* (+string+) The value to order by
118
+ # - *sort* (+string+) _optional_ The direction of the order, surrounded by brackets. The default value is '[asc]'
119
+ #
120
+ # * *Returns*:
121
+ # - +self+
122
+ def order_by(value, sort = '[asc]')
123
+ query_string.set_param('order', value + sort)
124
+ self
125
+ end
126
+
127
+ # Sets the 'skip' query string parameter for paging results.
128
+ # See https://developer.kenticocloud.com/v1/reference#listing-response-paging
129
+ #
130
+ # * *Args*:
131
+ # - *value* (+integer+) The number to skip by
132
+ #
133
+ # * *Returns*:
134
+ # - +self+
135
+ def skip(value)
136
+ query_string.set_param('skip', value)
137
+ self
138
+ end
139
+
140
+ # Sets the 'language' query string parameter. Language fallbacks will be used
141
+ # if untranslated content items are found.
142
+ # See https://developer.kenticocloud.com/docs/localization#section-getting-localized-content-items
143
+ #
144
+ # * *Args*:
145
+ # - *value* (+string+) The code name of the desired language
146
+ #
147
+ # * *Returns*:
148
+ # - +self+
149
+ def language(value)
150
+ query_string.set_param('language', value)
151
+ self
152
+ end
153
+
154
+ # Sets the 'limit' query string parameter for paging results, or just to
155
+ # return a specific number of content items.
156
+ # See https://developer.kenticocloud.com/v1/reference#listing-response-paging
157
+ #
158
+ # * *Args*:
159
+ # - *value* (+integer+) The number of content items to return
160
+ #
161
+ # * *Returns*:
162
+ # - +self+
163
+ def limit(value)
164
+ query_string.set_param('limit', value)
165
+ self
166
+ end
167
+
168
+ # Sets the 'elements' query string parameter to limit the elements returned
169
+ # by the query.
170
+ # See https://developer.kenticocloud.com/v1/reference#projection
171
+ #
172
+ # * *Args*:
173
+ # - *value* (+Array+) A single string or array of strings specifying the desired elements, e.g. %w[price product_name image]
174
+ #
175
+ # * *Returns*:
176
+ # - +self+
177
+ def elements(value)
178
+ query_string.set_param('elements', value)
179
+ self
180
+ end
181
+
182
+ # Sets the 'depth' query string parameter to determine how many levels of
183
+ # linked content items should be returned. By default, only 1 level of depth
184
+ # is used.
185
+ # See https://developer.kenticocloud.com/v1/reference#linked-content
186
+ #
187
+ # * *Args*:
188
+ # - *value* (+integer+) Level of linked items to be returned
189
+ #
190
+ # * *Returns*:
191
+ # - +self+
192
+ def depth(value)
193
+ query_string.set_param('depth', value)
194
+ self
195
+ end
196
+
197
+ # Allows the request to bypass caching and return the latest content
198
+ # directly from Kentico Kontent.
199
+ # See https://github.com/Kentico/kontent-delivery-sdk-ruby#requesting-the-latest-content
200
+ #
201
+ # * *Returns*:
202
+ # - +self+
203
+ def request_latest_content
204
+ @headers['X-KC-Wait-For-Loading-New-Content'] = true
205
+ self
206
+ end
207
+
208
+ # Uses Kentico::Kontent::Delivery::Builders::UrlBuilder.provide_url to set
209
+ # the URL for the query. The +UrlBuilder+ also validates the URL.
210
+ #
211
+ # * *Raises*:
212
+ # - +UriFormatException+ if the URL is 65,519 characters or more
213
+ #
214
+ # * *Returns*:
215
+ # - +string+ The full URL for this query
216
+ def provide_url
217
+ @url = Kentico::Kontent::Delivery::Builders::UrlBuilder.provide_url self if @url.nil?
218
+ Kentico::Kontent::Delivery::Builders::UrlBuilder.validate_url @url
219
+ @url
220
+ end
221
+
222
+ private
223
+
224
+ # Initializes the +query_string+ attribute with the passed array of
225
+ # Kentico::Kontent::Delivery::QueryParameters::Filter objects.
226
+ #
227
+ # * *Raises*:
228
+ # - +ArgumentError+ if one the passed objects is not a +Filter+
229
+ def validate_params(query_parameters)
230
+ params = if query_parameters.is_a? Array
231
+ query_parameters
232
+ else
233
+ [query_parameters]
234
+ end
235
+ params.each do |p|
236
+ query_string.set_param p
237
+ unless p.is_a? Kentico::Kontent::Delivery::QueryParameters::Filter
238
+ raise ArgumentError, ERROR_PARAMS
239
+ end
240
+ end
241
+ end
242
+
243
+ def provide_sdk_header
244
+ "rubygems.org;kontent-delivery-sdk-ruby;#{Kentico::Kontent::Delivery::VERSION}"
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end