delivery-sdk-ruby 0.11.4 → 0.12.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.
- checksums.yaml +4 -4
- data/README.md +46 -1
- data/lib/delivery-sdk-ruby.rb +1 -0
- data/lib/delivery/builders/image_transformation_builder.rb +141 -0
- data/lib/delivery/builders/url_builder.rb +65 -0
- data/lib/delivery/client/delivery_query.rb +19 -27
- data/lib/delivery/query_parameters/query_string.rb +49 -0
- data/lib/delivery/version.rb +1 -1
- metadata +5 -3
- data/lib/delivery/client/url_provider.rb +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3af4e9e0b215b8ddfad6bef517543de085c0cfc86bd3da5e8139f63fa3c71d4c
|
4
|
+
data.tar.gz: 52f4765ebccf5b02a7c9c1410500a5e03022b789957c31c5d195150e83134ab3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d09788c7f7cae943c864232babe39eee5d47c3c8f9857e3b4c2b6ce7fa19dca55074b0d170fb105574ea20a5a375bbc31bc35503c1dbcd76906e2ba78fc976b
|
7
|
+
data.tar.gz: 36a186c3972f83f5836ca29dedd28c6deeed6e7ee4b0fe97bb0478c9dcec5dba55d51906708dacf5014cbd187bed2989ed6bd5a26a6f3ca5788cc1b4597bc187
|
data/README.md
CHANGED
@@ -5,9 +5,27 @@
|
|
5
5
|
|
6
6
|
The Delivery Ruby SDK can be used in Ruby/Rails projects to retrieve content from Kentico Cloud. This is a community project and not an official Kentico SDK. If you find a bug in the SDK or have a feature request, please submit a GitHub issue.
|
7
7
|
|
8
|
+
## Demo Rails application
|
9
|
+
|
10
|
+
This repository contains a very basic Rails application that you can run locally to see how the SDK can be used. To run the Dancing Goat demo application, clone this repository and open `/dancing_goat/app/controllers/application_controller.rb`. Add your project ID to the file here:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
class ApplicationController < ActionController::Base
|
14
|
+
PROJECT_ID = '<your-project-id>'.freeze
|
15
|
+
```
|
16
|
+
|
17
|
+
If you don't have the sample project installed in Kentico Cloud, you can generate a new project [here](https://app.kenticocloud.com/sample-project-generator). Save the file, then open a terminal in the `/dancing_goat` directory and run the following commands:
|
18
|
+
|
19
|
+
```
|
20
|
+
bundle install
|
21
|
+
rails server
|
22
|
+
```
|
23
|
+
|
24
|
+
The site should be accessible at localhost:3000.
|
25
|
+
|
8
26
|
## Installation
|
9
27
|
|
10
|
-
|
28
|
+
To use the SDK in your own project, add the gem to your Gemfile:
|
11
29
|
|
12
30
|
```ruby
|
13
31
|
gem 'delivery-sdk-ruby'
|
@@ -339,6 +357,33 @@ delivery_client.items
|
|
339
357
|
.with_inline_content_item_resolver MyItemResolver.new
|
340
358
|
```
|
341
359
|
|
360
|
+
## Image transformation
|
361
|
+
|
362
|
+
When you've obtained the URL for an asset, you can use our [Image Transformation API](https://developer.kenticocloud.com/v1/reference#image-transformation) to make on-the-fly modifications to the image. To do this, use the static `.transform` method of `Delivery::Builders::ImageTransformationBuilder`, then call the transformation methods. When you're done, call the `.url` method to get the new URL:
|
363
|
+
|
364
|
+
```ruby
|
365
|
+
url = response.item.get_assets('teaser_image').first.url
|
366
|
+
url = Delivery::Builders::ImageTransformationBuilder.transform(url)
|
367
|
+
# methods...
|
368
|
+
.url
|
369
|
+
```
|
370
|
+
|
371
|
+
The available methods are:
|
372
|
+
|
373
|
+
|Method|Possible values|REST example
|
374
|
+
|--|--|--|
|
375
|
+
|`.with_width`| positive integer, or float between 0 and 1| ?w=200
|
376
|
+
|`.with_height`| positive integer, or float between 0 and 1| ?h=200
|
377
|
+
|`.with_pixel_ratio`| float greater than 0 but less than 5| ?dpr=1.5
|
378
|
+
|`.with_fit_mode`| contstants available at Delivery::Builders::ImageTransformationBuilder <ul><li>FITMODE_CROP</li><li>FITMODE_CLIP</li><li>FITMODE_SCALE</li></ul>| ?fit=crop
|
379
|
+
|`.with_rect`| 4 integer values representing pixels or floats representing percentages|rect=100,100,0.7,0.7
|
380
|
+
|`.with_focal_point`| 2 floats between 0 and 1 and one integer between 1 and 100| ?fp-x=0.2&fp-y=0.7&fp-z=5
|
381
|
+
|`.with_background_color`| string containing 3, 4, 6, or 8 characters | ?bg=7A0099EE
|
382
|
+
|`.with_output_format`| contstants available at Delivery::Builders::ImageTransformationBuilder <ul><li>FORMAT_GIF</li><li>FORMAT_PNG</li><li>FORMAT_PNG8</li><li>FORMAT_JPG</li><li>FORMAT_PJPG</li><li>FORMAT_WEBP</li></ul> | ?fm=webp
|
383
|
+
|`.with_quality`| integer between 1 to 100 | ?quality=50
|
384
|
+
|`.with_lossless`| 'true', 'false', 0, or 1| ?lossless=1
|
385
|
+
|`.with_auto_format_selection`| 'true', 'false', 0, or 1 | ?auto=format
|
386
|
+
|
342
387
|
## Feedback & Contributing
|
343
388
|
|
344
389
|
Check out the [contributing](https://github.com/Kentico/delivery-sdk-ruby/blob/master/CONTRIBUTING.md) page to see the best places to file issues, start discussions, and begin contributing.
|
data/lib/delivery-sdk-ruby.rb
CHANGED
@@ -9,3 +9,4 @@ require File.dirname(__FILE__) + '/delivery/responses/delivery_type_listing_resp
|
|
9
9
|
require File.dirname(__FILE__) + '/delivery/responses/delivery_type_response'
|
10
10
|
require File.dirname(__FILE__) + '/delivery/resolvers/content_link_resolver'
|
11
11
|
require File.dirname(__FILE__) + '/delivery/resolvers/inline_content_item_resolver'
|
12
|
+
require File.dirname(__FILE__) + '/delivery/builders/image_transformation_builder'
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'delivery/query_parameters/query_string'
|
2
|
+
|
3
|
+
module Delivery
|
4
|
+
module Builders
|
5
|
+
class ImageTransformationBuilder
|
6
|
+
FIT_MODE_CLIP = 'clip'.freeze
|
7
|
+
FIT_MODE_SCALE = 'scale'.freeze
|
8
|
+
FIT_MODE_CROP = 'crop'.freeze
|
9
|
+
FORMAT_GIF = 'gif'.freeze
|
10
|
+
FORMAT_PNG = 'png'.freeze
|
11
|
+
FORMAT_PNG8 = 'png8'.freeze
|
12
|
+
FORMAT_JPG = 'jpg'.freeze
|
13
|
+
FORMAT_PJPG = 'pjpg'.freeze
|
14
|
+
FORMAT_WEBP = 'webp'.freeze
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def transform(url)
|
18
|
+
AssetURL.new url
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class AssetURL
|
24
|
+
INVALID_PARAMS = 'One or more of the parameters is invalid. '\
|
25
|
+
'See https://developer.kenticocloud.com/v1/reference#focal-point-crop'\
|
26
|
+
'for more information.'.freeze
|
27
|
+
ONE_TO_100 = 'Quality parameter must be between 1 and 100.'.freeze
|
28
|
+
BOOLEAN_PARAM = 'The lossless parameter must be "true," "false," '\
|
29
|
+
'1, or 0.'.freeze
|
30
|
+
|
31
|
+
def initialize(url)
|
32
|
+
@url = url
|
33
|
+
@query_string = Delivery::QueryParameters::QueryString.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def url
|
37
|
+
@url + @query_string.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def with_width(width)
|
41
|
+
@query_string.set_param 'w', width
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
def with_height(height)
|
46
|
+
@query_string.set_param 'h', height
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_pixel_ratio(dpr)
|
51
|
+
@query_string.set_param 'dpr', dpr
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
def with_fit_mode(fit)
|
56
|
+
@query_string.set_param 'fit', fit
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
# Setting this will remove focal point cropping from the image,
|
61
|
+
# as the two options are incompatible.
|
62
|
+
# @param x
|
63
|
+
# @param y
|
64
|
+
# @param width
|
65
|
+
# @param height
|
66
|
+
def with_rect(x, y, width, height)
|
67
|
+
@query_string.remove_param 'fp-x'
|
68
|
+
@query_string.remove_param 'fp-y'
|
69
|
+
@query_string.remove_param 'fp-z'
|
70
|
+
@query_string.remove_param 'crop', 'focalpoint'
|
71
|
+
@query_string.set_param 'rect', "#{x},#{y},#{width},#{height}"
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
# Setting this will remove the source rectangle region,
|
76
|
+
# as the two options are incompatible.
|
77
|
+
def with_focal_point(x, y, z)
|
78
|
+
raise ArgumentError, INVALID_PARAMS unless valid_dims?(x, y, z)
|
79
|
+
|
80
|
+
@query_string.remove_param 'rect'
|
81
|
+
@query_string.set_param 'fp-x', x
|
82
|
+
@query_string.set_param 'fp-y', y
|
83
|
+
@query_string.set_param 'fp-z', z
|
84
|
+
@query_string.set_param 'crop', 'focalpoint'
|
85
|
+
self
|
86
|
+
end
|
87
|
+
|
88
|
+
def valid_dims?(x, y, z)
|
89
|
+
(x.to_f >= 0.0 && x.to_f <= 1.0) &&
|
90
|
+
(y.to_f >= 0.0 && y.to_f <= 1.0) &&
|
91
|
+
(z.to_i >= 1)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Sets the background color.
|
95
|
+
# @param [String] color a valid 3, 4, 6, or 8 digit hexadecimal color, without the # symbol
|
96
|
+
def with_background_color(color)
|
97
|
+
@query_string.set_param 'bg', color
|
98
|
+
self
|
99
|
+
end
|
100
|
+
|
101
|
+
def with_output_format(format)
|
102
|
+
@query_string.set_param 'fm', format
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
def with_quality(quality)
|
107
|
+
raise ArgumentError, ONE_TO_100 unless quality.to_i >= 1 && quality.to_i <= 100
|
108
|
+
|
109
|
+
@query_string.set_param 'q', quality
|
110
|
+
self
|
111
|
+
end
|
112
|
+
|
113
|
+
# Sets lossless to true or false. If true, automatically sets the format to WebP
|
114
|
+
def with_lossless(lossless)
|
115
|
+
lossless = lossless.to_s.downcase
|
116
|
+
raise ArgumentError, BOOLEAN_PARAM unless bool? lossless
|
117
|
+
|
118
|
+
@query_string.set_param 'lossless', lossless
|
119
|
+
@query_string.set_param 'fm', Delivery::Builders::ImageTransformationBuilder::FORMAT_WEBP if %w[true 1].include? lossless
|
120
|
+
self
|
121
|
+
end
|
122
|
+
|
123
|
+
def bool?(value)
|
124
|
+
(value == 'true') ||
|
125
|
+
(value == 'false') ||
|
126
|
+
(value == '0') ||
|
127
|
+
(value == '1')
|
128
|
+
end
|
129
|
+
|
130
|
+
def with_auto_format_selection(auto)
|
131
|
+
auto = auto.to_s.downcase
|
132
|
+
if %w[true 1].include? auto
|
133
|
+
@query_string.set_param 'auto', 'format'
|
134
|
+
else
|
135
|
+
@query_string.remove_param 'auto'
|
136
|
+
end
|
137
|
+
self
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Delivery
|
2
|
+
module Builders
|
3
|
+
# Generates the URL required for Delivery REST API
|
4
|
+
class UrlBuilder
|
5
|
+
URL_TEMPLATE_BASE = 'https://deliver.kenticocloud.com/%s'.freeze
|
6
|
+
URL_TEMPLATE_PREVIEW = 'https://preview-deliver.kenticocloud.com/%s'.freeze
|
7
|
+
URL_TEMPLATE_ITEM = '/items/%s'.freeze
|
8
|
+
URL_TEMPLATE_ITEMS = '/items'.freeze
|
9
|
+
URL_TEMPLATE_TYPE = '/types/%s'.freeze
|
10
|
+
URL_TEMPLATE_TYPES = '/types'.freeze
|
11
|
+
URL_TEMPLATE_ELEMENTS = '/types/%s/elements/%s'.freeze
|
12
|
+
URL_TEMPLATE_TAXONOMY = '/taxonomies/%s'.freeze
|
13
|
+
URL_TEMPLATE_TAXONOMIES = '/taxonomies'.freeze
|
14
|
+
|
15
|
+
URL_MAX_LENGTH = 65_519
|
16
|
+
MSG_LONG_QUERY = 'The request url is too long. Split your query into multiple calls.'.freeze
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def provide_url(query)
|
20
|
+
url = provide_base_url(query)
|
21
|
+
url += provide_path_part(query)
|
22
|
+
|
23
|
+
if query.query_string.empty?
|
24
|
+
url
|
25
|
+
else
|
26
|
+
url + query.query_string.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_url(url)
|
31
|
+
raise UriFormatException, MSG_LONG_QUERY if url.length > URL_MAX_LENGTH
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Returns relative path part of URL depending on query type
|
37
|
+
def provide_path_part(query)
|
38
|
+
case query.query_type
|
39
|
+
when Delivery::QUERY_TYPE_ITEMS
|
40
|
+
if query.code_name.nil?
|
41
|
+
URL_TEMPLATE_ITEMS
|
42
|
+
else
|
43
|
+
format(URL_TEMPLATE_ITEM, query.code_name)
|
44
|
+
end
|
45
|
+
when Delivery::QUERY_TYPE_TYPES
|
46
|
+
if query.code_name.nil?
|
47
|
+
URL_TEMPLATE_TYPES
|
48
|
+
else
|
49
|
+
format(URL_TEMPLATE_TYPE, query.code_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns the protocol and domain with project ID
|
55
|
+
def provide_base_url(query)
|
56
|
+
if query.use_preview
|
57
|
+
format(URL_TEMPLATE_PREVIEW, query.project_id)
|
58
|
+
else
|
59
|
+
format(URL_TEMPLATE_BASE, query.project_id)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rest-client'
|
2
|
-
require 'delivery/
|
2
|
+
require 'delivery/builders/url_builder'
|
3
|
+
require 'delivery/query_parameters/query_string'
|
3
4
|
|
4
5
|
module Delivery
|
5
6
|
# Responsible for translating query parameters into the
|
@@ -15,11 +16,11 @@ module Delivery
|
|
15
16
|
:preview_key,
|
16
17
|
:project_id,
|
17
18
|
:code_name,
|
18
|
-
:params,
|
19
19
|
:secure_key,
|
20
20
|
:content_link_url_resolver,
|
21
21
|
:inline_content_item_resolver,
|
22
|
-
:query_type
|
22
|
+
:query_type,
|
23
|
+
:query_string
|
23
24
|
|
24
25
|
# Setter for url, returns self for chaining
|
25
26
|
# .url represents *manually* configured urls, otherwise final url is
|
@@ -35,6 +36,7 @@ module Delivery
|
|
35
36
|
config.each do |k, v|
|
36
37
|
instance_variable_set("@#{k}", v) unless v.nil?
|
37
38
|
end
|
39
|
+
self.query_string = Delivery::QueryParameters::QueryString.new
|
38
40
|
return if config.fetch(:qp, nil).nil?
|
39
41
|
|
40
42
|
# Query parameters were passed, parse and validate
|
@@ -70,60 +72,55 @@ module Delivery
|
|
70
72
|
end
|
71
73
|
|
72
74
|
def order_by(value, sort = '[asc]')
|
73
|
-
set_param('order', value + sort)
|
75
|
+
query_string.set_param('order', value + sort)
|
74
76
|
self
|
75
77
|
end
|
76
78
|
|
77
79
|
def skip(value)
|
78
|
-
set_param('skip', value)
|
80
|
+
query_string.set_param('skip', value)
|
79
81
|
self
|
80
82
|
end
|
81
83
|
|
82
84
|
def language(value)
|
83
|
-
set_param('language', value)
|
85
|
+
query_string.set_param('language', value)
|
84
86
|
end
|
85
87
|
|
86
88
|
def limit(value)
|
87
|
-
set_param('limit', value)
|
89
|
+
query_string.set_param('limit', value)
|
88
90
|
self
|
89
91
|
end
|
90
92
|
|
91
93
|
def elements(value)
|
92
|
-
set_param('elements', value)
|
94
|
+
query_string.set_param('elements', value)
|
93
95
|
self
|
94
96
|
end
|
95
97
|
|
96
98
|
def depth(value)
|
97
|
-
set_param('depth', value)
|
99
|
+
query_string.set_param('depth', value)
|
98
100
|
self
|
99
101
|
end
|
100
102
|
|
101
103
|
private
|
102
104
|
|
103
105
|
def provide_url
|
104
|
-
@url = Delivery::
|
105
|
-
Delivery::
|
106
|
+
@url = Delivery::Builders::UrlBuilder.provide_url self if @url.nil?
|
107
|
+
Delivery::Builders::UrlBuilder.validate_url @url
|
106
108
|
end
|
107
109
|
|
108
110
|
def validate_params(query_parameters)
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
params = if query_parameters.is_a? Array
|
112
|
+
query_parameters
|
113
|
+
else
|
114
|
+
[query_parameters]
|
115
|
+
end
|
114
116
|
params.each do |p|
|
117
|
+
query_string.set_param p
|
115
118
|
unless p.is_a? Delivery::QueryParameters::Filter
|
116
119
|
raise ArgumentError, ERROR_PARAMS
|
117
120
|
end
|
118
121
|
end
|
119
122
|
end
|
120
123
|
|
121
|
-
def set_param(key, value)
|
122
|
-
self.params = [] if params.nil?
|
123
|
-
remove_existing_param key
|
124
|
-
params << Delivery::QueryParameters::ParameterBase.new(key, '', value)
|
125
|
-
end
|
126
|
-
|
127
124
|
# Returns true if this query should use preview mode. Raises an error if
|
128
125
|
# preview is enabled, but the key is nil
|
129
126
|
def should_preview
|
@@ -168,10 +165,5 @@ module Delivery
|
|
168
165
|
end
|
169
166
|
end
|
170
167
|
end
|
171
|
-
|
172
|
-
# Remove existing parameter from @params if key exists
|
173
|
-
def remove_existing_param(key)
|
174
|
-
params.delete_if { |i| i.key.eql? key } unless params.nil?
|
175
|
-
end
|
176
168
|
end
|
177
169
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'delivery/query_parameters/parameter_base'
|
2
|
+
|
3
|
+
module Delivery
|
4
|
+
module QueryParameters
|
5
|
+
class QueryString
|
6
|
+
def initialize
|
7
|
+
@params = []
|
8
|
+
end
|
9
|
+
|
10
|
+
# Adds a parameter to the query string
|
11
|
+
# @param [String] param Either a string representing the key for the parameter, or a complete ParameterBase object
|
12
|
+
# @param [String] values A string or array of strings representing the values for the parameter
|
13
|
+
# @param [String] operator Kentico Cloud filtering parameter, placed after the key, before the equal sign
|
14
|
+
def set_param(param, values = '', operator = '')
|
15
|
+
parameter_base =
|
16
|
+
if param.is_a? String
|
17
|
+
Delivery::QueryParameters::ParameterBase.new(
|
18
|
+
param,
|
19
|
+
operator,
|
20
|
+
values
|
21
|
+
)
|
22
|
+
else
|
23
|
+
param
|
24
|
+
end
|
25
|
+
# Ensure we have a ParameterBase object
|
26
|
+
return unless parameter_base.respond_to? 'provide_query_string_parameter'
|
27
|
+
|
28
|
+
remove_param parameter_base.key
|
29
|
+
@params << parameter_base
|
30
|
+
end
|
31
|
+
|
32
|
+
def remove_param(key)
|
33
|
+
@params.delete_if { |i| i.key.eql? key }
|
34
|
+
end
|
35
|
+
|
36
|
+
def param(key)
|
37
|
+
@params.select { |p| p.key.eql? key }
|
38
|
+
end
|
39
|
+
|
40
|
+
def empty?
|
41
|
+
@params.empty?
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
'?' + @params.map(&:provide_query_string_parameter).join('&')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/delivery/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delivery-sdk-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Dugre
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -104,14 +104,16 @@ files:
|
|
104
104
|
- bin/console
|
105
105
|
- bin/setup
|
106
106
|
- lib/delivery-sdk-ruby.rb
|
107
|
+
- lib/delivery/builders/image_transformation_builder.rb
|
108
|
+
- lib/delivery/builders/url_builder.rb
|
107
109
|
- lib/delivery/client/delivery_client.rb
|
108
110
|
- lib/delivery/client/delivery_query.rb
|
109
|
-
- lib/delivery/client/url_provider.rb
|
110
111
|
- lib/delivery/models/content_item.rb
|
111
112
|
- lib/delivery/models/content_type.rb
|
112
113
|
- lib/delivery/models/pagination.rb
|
113
114
|
- lib/delivery/query_parameters/filters.rb
|
114
115
|
- lib/delivery/query_parameters/parameter_base.rb
|
116
|
+
- lib/delivery/query_parameters/query_string.rb
|
115
117
|
- lib/delivery/resolvers/content_link_resolver.rb
|
116
118
|
- lib/delivery/resolvers/inline_content_item_resolver.rb
|
117
119
|
- lib/delivery/responses/delivery_item_listing_response.rb
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module Delivery
|
2
|
-
# Generates the URL required for Delivery REST API
|
3
|
-
class UrlProvider
|
4
|
-
URL_TEMPLATE_BASE = 'https://deliver.kenticocloud.com/%s'.freeze
|
5
|
-
URL_TEMPLATE_PREVIEW = 'https://preview-deliver.kenticocloud.com/%s'.freeze
|
6
|
-
URL_TEMPLATE_ITEM = '/items/%s'.freeze
|
7
|
-
URL_TEMPLATE_ITEMS = '/items'.freeze
|
8
|
-
URL_TEMPLATE_TYPE = '/types/%s'.freeze
|
9
|
-
URL_TEMPLATE_TYPES = '/types'.freeze
|
10
|
-
URL_TEMPLATE_ELEMENTS = '/types/%s/elements/%s'.freeze
|
11
|
-
URL_TEMPLATE_TAXONOMY = '/taxonomies/%s'.freeze
|
12
|
-
URL_TEMPLATE_TAXONOMIES = '/taxonomies'.freeze
|
13
|
-
|
14
|
-
URL_MAX_LENGTH = 65_519
|
15
|
-
MSG_LONG_QUERY = 'The request url is too long. Split your query into multiple calls.'.freeze
|
16
|
-
|
17
|
-
class << self
|
18
|
-
def provide_url(query)
|
19
|
-
url = provide_base_url(query)
|
20
|
-
url += provide_path_part(query)
|
21
|
-
|
22
|
-
if query.params.nil?
|
23
|
-
url
|
24
|
-
else
|
25
|
-
# Map each parameter to the result of a method and separate with &
|
26
|
-
url + '?' + query.params.map(&:provide_query_string_parameter).join('&')
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def validate_url(url)
|
31
|
-
raise UriFormatException, MSG_LONG_QUERY if url.length > URL_MAX_LENGTH
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
# Returns relative path part of URL depending on query type
|
37
|
-
def provide_path_part(query)
|
38
|
-
case query.query_type
|
39
|
-
when Delivery::QUERY_TYPE_ITEMS
|
40
|
-
if query.code_name.nil?
|
41
|
-
URL_TEMPLATE_ITEMS
|
42
|
-
else
|
43
|
-
format(URL_TEMPLATE_ITEM, query.code_name)
|
44
|
-
end
|
45
|
-
when Delivery::QUERY_TYPE_TYPES
|
46
|
-
if query.code_name.nil?
|
47
|
-
URL_TEMPLATE_TYPES
|
48
|
-
else
|
49
|
-
format(URL_TEMPLATE_TYPE, query.code_name)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# Returns the protocol and domain with project ID
|
55
|
-
def provide_base_url(query)
|
56
|
-
if query.use_preview
|
57
|
-
format(URL_TEMPLATE_PREVIEW, query.project_id)
|
58
|
-
else
|
59
|
-
format(URL_TEMPLATE_BASE, query.project_id)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|