delivery-sdk-ruby 0.14.6 → 0.14.13
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/LICENSE.md +21 -21
- data/README.md +461 -461
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/lib/delivery-sdk-ruby.rb +17 -17
- data/lib/delivery/builders/image_transformation_builder.rb +141 -141
- data/lib/delivery/builders/url_builder.rb +73 -73
- data/lib/delivery/client/delivery_client.rb +85 -85
- data/lib/delivery/client/delivery_query.rb +183 -183
- data/lib/delivery/models/content_item.rb +96 -96
- data/lib/delivery/models/content_type.rb +26 -26
- data/lib/delivery/models/pagination.rb +13 -13
- data/lib/delivery/models/taxonomy_group.rb +24 -24
- data/lib/delivery/query_parameters/filters.rb +87 -87
- data/lib/delivery/query_parameters/parameter_base.rb +30 -30
- data/lib/delivery/query_parameters/query_string.rb +49 -49
- data/lib/delivery/resolvers/content_link_resolver.rb +62 -62
- data/lib/delivery/resolvers/inline_content_item_resolver.rb +50 -50
- data/lib/delivery/resolvers/linked_item_resolver.rb +27 -27
- data/lib/delivery/responses/delivery_element_response.rb +23 -23
- data/lib/delivery/responses/delivery_item_listing_response.rb +39 -39
- data/lib/delivery/responses/delivery_item_response.rb +29 -29
- data/lib/delivery/responses/delivery_taxonomy_listing_response.rb +32 -32
- data/lib/delivery/responses/delivery_taxonomy_response.rb +22 -22
- data/lib/delivery/responses/delivery_type_listing_response.rb +31 -31
- data/lib/delivery/responses/delivery_type_response.rb +21 -21
- data/lib/delivery/responses/response_base.rb +20 -20
- data/lib/delivery/version.rb +3 -3
- metadata +13 -14
@@ -1,30 +1,30 @@
|
|
1
|
-
module Delivery
|
2
|
-
# Contains static methods for adding parameters to a DeliveryQuery
|
3
|
-
# as well as the Filter class.
|
4
|
-
module QueryParameters
|
5
|
-
# Base class for all parameters added to a DeliveryQuery using the
|
6
|
-
# .parameters method. All parameters appear in the query string.
|
7
|
-
class ParameterBase
|
8
|
-
attr_accessor :key
|
9
|
-
SEPARATOR = CGI.escape(',')
|
10
|
-
|
11
|
-
def initialize(key, operator, values)
|
12
|
-
self.key = key
|
13
|
-
values = [values] unless values.respond_to? :each
|
14
|
-
@values = values
|
15
|
-
@operator = operator
|
16
|
-
end
|
17
|
-
|
18
|
-
def provide_query_string_parameter
|
19
|
-
escaped_values = []
|
20
|
-
@values.each { |n| escaped_values << CGI.escape(n.to_s) }
|
21
|
-
format(
|
22
|
-
'%<k>s%<o>s=%<v>s',
|
23
|
-
k: CGI.escape(key),
|
24
|
-
o: CGI.escape(@operator),
|
25
|
-
v: escaped_values.join(SEPARATOR)
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
1
|
+
module Delivery
|
2
|
+
# Contains static methods for adding parameters to a DeliveryQuery
|
3
|
+
# as well as the Filter class.
|
4
|
+
module QueryParameters
|
5
|
+
# Base class for all parameters added to a DeliveryQuery using the
|
6
|
+
# .parameters method. All parameters appear in the query string.
|
7
|
+
class ParameterBase
|
8
|
+
attr_accessor :key
|
9
|
+
SEPARATOR = CGI.escape(',')
|
10
|
+
|
11
|
+
def initialize(key, operator, values)
|
12
|
+
self.key = key
|
13
|
+
values = [values] unless values.respond_to? :each
|
14
|
+
@values = values
|
15
|
+
@operator = operator
|
16
|
+
end
|
17
|
+
|
18
|
+
def provide_query_string_parameter
|
19
|
+
escaped_values = []
|
20
|
+
@values.each { |n| escaped_values << CGI.escape(n.to_s) }
|
21
|
+
format(
|
22
|
+
'%<k>s%<o>s=%<v>s',
|
23
|
+
k: CGI.escape(key),
|
24
|
+
o: CGI.escape(@operator),
|
25
|
+
v: escaped_values.join(SEPARATOR)
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,49 +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
|
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
|
@@ -1,62 +1,62 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Delivery
|
4
|
-
module Resolvers
|
5
|
-
# Locates <a data-item-id=""> tags in content and calls a user-defined method
|
6
|
-
# to supply the href for content item links
|
7
|
-
class ContentLinkResolver
|
8
|
-
def initialize(callback = nil)
|
9
|
-
@callback = callback
|
10
|
-
end
|
11
|
-
|
12
|
-
# Resolves all links in the content
|
13
|
-
# @param [String] content The string value stored in the element
|
14
|
-
# @param [Array] links The collection of source links from the JSON response
|
15
|
-
def resolve(content, links)
|
16
|
-
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
17
|
-
links = links.map { |link| ContentLink.new link }
|
18
|
-
tags = doc.xpath('//a[@data-item-id]')
|
19
|
-
# This line performs the link resolving and replaces the tags in doc
|
20
|
-
tags.map { |tag| resolve_tag tag, links }
|
21
|
-
doc.inner_html
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
# Accepts a tag found in the content and tries to locate matching
|
27
|
-
# source link from JSON response. If found, resolves URL and returns
|
28
|
-
# the tag with generated HREF
|
29
|
-
def resolve_tag(tag, links)
|
30
|
-
matches = links.select { |link| link.id == tag['data-item-id'].to_s }
|
31
|
-
url = provide_url matches
|
32
|
-
tag['href'] = url
|
33
|
-
tag
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns a url if a link was found in source links, otherwise returns 404
|
37
|
-
def provide_url(matches)
|
38
|
-
if !matches.empty?
|
39
|
-
if @callback.nil?
|
40
|
-
resolve_link matches[0]
|
41
|
-
else
|
42
|
-
@callback.call matches[0]
|
43
|
-
end
|
44
|
-
else
|
45
|
-
'/404'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Model for links from the JSON response
|
51
|
-
class ContentLink
|
52
|
-
attr_accessor :code_name, :type, :url_slug, :id
|
53
|
-
|
54
|
-
def initialize(link)
|
55
|
-
self.id = link[0]
|
56
|
-
self.code_name = link[1]['codename']
|
57
|
-
self.type = link[1]['type']
|
58
|
-
self.url_slug = link[1]['url_slug']
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Delivery
|
4
|
+
module Resolvers
|
5
|
+
# Locates <a data-item-id=""> tags in content and calls a user-defined method
|
6
|
+
# to supply the href for content item links
|
7
|
+
class ContentLinkResolver
|
8
|
+
def initialize(callback = nil)
|
9
|
+
@callback = callback
|
10
|
+
end
|
11
|
+
|
12
|
+
# Resolves all links in the content
|
13
|
+
# @param [String] content The string value stored in the element
|
14
|
+
# @param [Array] links The collection of source links from the JSON response
|
15
|
+
def resolve(content, links)
|
16
|
+
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
17
|
+
links = links.map { |link| ContentLink.new link }
|
18
|
+
tags = doc.xpath('//a[@data-item-id]')
|
19
|
+
# This line performs the link resolving and replaces the tags in doc
|
20
|
+
tags.map { |tag| resolve_tag tag, links }
|
21
|
+
doc.inner_html
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Accepts a tag found in the content and tries to locate matching
|
27
|
+
# source link from JSON response. If found, resolves URL and returns
|
28
|
+
# the tag with generated HREF
|
29
|
+
def resolve_tag(tag, links)
|
30
|
+
matches = links.select { |link| link.id == tag['data-item-id'].to_s }
|
31
|
+
url = provide_url matches
|
32
|
+
tag['href'] = url
|
33
|
+
tag
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns a url if a link was found in source links, otherwise returns 404
|
37
|
+
def provide_url(matches)
|
38
|
+
if !matches.empty?
|
39
|
+
if @callback.nil?
|
40
|
+
resolve_link matches[0]
|
41
|
+
else
|
42
|
+
@callback.call matches[0]
|
43
|
+
end
|
44
|
+
else
|
45
|
+
'/404'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Model for links from the JSON response
|
51
|
+
class ContentLink
|
52
|
+
attr_accessor :code_name, :type, :url_slug, :id
|
53
|
+
|
54
|
+
def initialize(link)
|
55
|
+
self.id = link[0]
|
56
|
+
self.code_name = link[1]['codename']
|
57
|
+
self.type = link[1]['type']
|
58
|
+
self.url_slug = link[1]['url_slug']
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -1,50 +1,50 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Delivery
|
4
|
-
module Resolvers
|
5
|
-
# Locates <object data-type="item"> tags in content and calls a user-defined method
|
6
|
-
# to supply the HTML output for the content item
|
7
|
-
class InlineContentItemResolver
|
8
|
-
def initialize(callback = nil)
|
9
|
-
@callback = callback
|
10
|
-
end
|
11
|
-
|
12
|
-
# Resolves all inline content items in the content
|
13
|
-
# @param [String] content The string value stored in the element
|
14
|
-
# @param [Array] inline_items ContentItems referenced by the content
|
15
|
-
def resolve(content, inline_items)
|
16
|
-
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
17
|
-
tags = doc.xpath('//object[@type="application/kenticocloud"][@data-type="item"]')
|
18
|
-
tags.each do |tag|
|
19
|
-
output = resolve_tag tag, inline_items
|
20
|
-
el = doc.at_xpath(
|
21
|
-
'//object[@type="application/kenticocloud"][@data-type="item"][@data-codename=$value]',
|
22
|
-
nil,
|
23
|
-
value: tag['data-codename']
|
24
|
-
)
|
25
|
-
el.swap(output) unless output.nil?
|
26
|
-
end
|
27
|
-
doc.inner_html
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
# Accepts a tag found in the content and tries to locate matching
|
33
|
-
# ContentItem from JSON response.
|
34
|
-
def resolve_tag(tag, inline_items)
|
35
|
-
matches = inline_items.select { |item| item.system.codename == tag['data-codename'].to_s }
|
36
|
-
provide_output matches
|
37
|
-
end
|
38
|
-
|
39
|
-
def provide_output(matches)
|
40
|
-
if !matches.empty?
|
41
|
-
if @callback.nil?
|
42
|
-
resolve_item matches[0]
|
43
|
-
else
|
44
|
-
@callback.call matches[0]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Delivery
|
4
|
+
module Resolvers
|
5
|
+
# Locates <object data-type="item"> tags in content and calls a user-defined method
|
6
|
+
# to supply the HTML output for the content item
|
7
|
+
class InlineContentItemResolver
|
8
|
+
def initialize(callback = nil)
|
9
|
+
@callback = callback
|
10
|
+
end
|
11
|
+
|
12
|
+
# Resolves all inline content items in the content
|
13
|
+
# @param [String] content The string value stored in the element
|
14
|
+
# @param [Array] inline_items ContentItems referenced by the content
|
15
|
+
def resolve(content, inline_items)
|
16
|
+
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
17
|
+
tags = doc.xpath('//object[@type="application/kenticocloud"][@data-type="item"]')
|
18
|
+
tags.each do |tag|
|
19
|
+
output = resolve_tag tag, inline_items
|
20
|
+
el = doc.at_xpath(
|
21
|
+
'//object[@type="application/kenticocloud"][@data-type="item"][@data-codename=$value]',
|
22
|
+
nil,
|
23
|
+
value: tag['data-codename']
|
24
|
+
)
|
25
|
+
el.swap(output) unless output.nil?
|
26
|
+
end
|
27
|
+
doc.inner_html
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Accepts a tag found in the content and tries to locate matching
|
33
|
+
# ContentItem from JSON response.
|
34
|
+
def resolve_tag(tag, inline_items)
|
35
|
+
matches = inline_items.select { |item| item.system.codename == tag['data-codename'].to_s }
|
36
|
+
provide_output matches
|
37
|
+
end
|
38
|
+
|
39
|
+
def provide_output(matches)
|
40
|
+
if !matches.empty?
|
41
|
+
if @callback.nil?
|
42
|
+
resolve_item matches[0]
|
43
|
+
else
|
44
|
+
@callback.call matches[0]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
module Delivery
|
2
|
-
# Resolves a content item by its codename
|
3
|
-
# It contains the modular content of item/items response
|
4
|
-
class LinkedItemResolver
|
5
|
-
def initialize(modular_content, content_link_url_resolver, inline_content_item_resolver)
|
6
|
-
@modular_content = modular_content
|
7
|
-
@content_link_url_resolver = content_link_url_resolver
|
8
|
-
@inline_content_item_resolver = inline_content_item_resolver
|
9
|
-
@resolved_items = {}
|
10
|
-
end
|
11
|
-
|
12
|
-
# Resolves a content item
|
13
|
-
# If the link for a codename was resolved before,
|
14
|
-
# it returns the same instance of Content Item
|
15
|
-
# @param [String] codename Codename of the content item
|
16
|
-
# @return [ContentItem]
|
17
|
-
def resolve(codename)
|
18
|
-
@resolved_items[codename] ||= resolve_item(codename)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def resolve_item(codename)
|
24
|
-
item = @modular_content.values.find { |i| i['system']['codename'] == codename }
|
25
|
-
ContentItem.new JSON.parse(JSON.generate(item)), @content_link_url_resolver, @inline_content_item_resolver, self
|
26
|
-
end
|
27
|
-
end
|
1
|
+
module Delivery
|
2
|
+
# Resolves a content item by its codename
|
3
|
+
# It contains the modular content of item/items response
|
4
|
+
class LinkedItemResolver
|
5
|
+
def initialize(modular_content, content_link_url_resolver, inline_content_item_resolver)
|
6
|
+
@modular_content = modular_content
|
7
|
+
@content_link_url_resolver = content_link_url_resolver
|
8
|
+
@inline_content_item_resolver = inline_content_item_resolver
|
9
|
+
@resolved_items = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
# Resolves a content item
|
13
|
+
# If the link for a codename was resolved before,
|
14
|
+
# it returns the same instance of Content Item
|
15
|
+
# @param [String] codename Codename of the content item
|
16
|
+
# @return [ContentItem]
|
17
|
+
def resolve(codename)
|
18
|
+
@resolved_items[codename] ||= resolve_item(codename)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def resolve_item(codename)
|
24
|
+
item = @modular_content.values.find { |i| i['system']['codename'] == codename }
|
25
|
+
ContentItem.new JSON.parse(JSON.generate(item)), @content_link_url_resolver, @inline_content_item_resolver, self
|
26
|
+
end
|
27
|
+
end
|
28
28
|
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require 'delivery/responses/response_base'
|
2
|
-
|
3
|
-
module Delivery
|
4
|
-
module Responses
|
5
|
-
# Returned by DeliveryClient.element containing a single element
|
6
|
-
class DeliveryElementResponse < ResponseBase
|
7
|
-
def element
|
8
|
-
@element unless @element.nil?
|
9
|
-
@element = JSON.parse(
|
10
|
-
JSON.generate(@response),
|
11
|
-
object_class: OpenStruct
|
12
|
-
)
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(response)
|
16
|
-
@response = response
|
17
|
-
super 200,
|
18
|
-
"Success, '#{element.codename}' returned",
|
19
|
-
JSON.generate(@response)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
1
|
+
require 'delivery/responses/response_base'
|
2
|
+
|
3
|
+
module Delivery
|
4
|
+
module Responses
|
5
|
+
# Returned by DeliveryClient.element containing a single element
|
6
|
+
class DeliveryElementResponse < ResponseBase
|
7
|
+
def element
|
8
|
+
@element unless @element.nil?
|
9
|
+
@element = JSON.parse(
|
10
|
+
JSON.generate(@response),
|
11
|
+
object_class: OpenStruct
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(response)
|
16
|
+
@response = response
|
17
|
+
super 200,
|
18
|
+
"Success, '#{element.codename}' returned",
|
19
|
+
JSON.generate(@response)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|