kontent-delivery-sdk-ruby 2.0.22 → 2.0.24

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +21 -21
  3. data/README.md +603 -602
  4. data/bin/console +14 -14
  5. data/bin/setup +8 -8
  6. data/lib/delivery/builders/image_transformation_builder.rb +272 -272
  7. data/lib/delivery/builders/url_builder.rb +123 -123
  8. data/lib/delivery/client/delivery_client.rb +184 -184
  9. data/lib/delivery/client/delivery_query.rb +302 -302
  10. data/lib/delivery/client/request_manager.rb +126 -127
  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/language.rb +29 -29
  14. data/lib/delivery/models/pagination.rb +22 -22
  15. data/lib/delivery/models/taxonomy_group.rb +39 -39
  16. data/lib/delivery/query_parameters/filters.rb +201 -201
  17. data/lib/delivery/query_parameters/parameter_base.rb +56 -56
  18. data/lib/delivery/query_parameters/query_string.rb +78 -78
  19. data/lib/delivery/resolvers/content_link_resolver.rb +102 -102
  20. data/lib/delivery/resolvers/inline_content_item_resolver.rb +75 -75
  21. data/lib/delivery/resolvers/linked_item_resolver.rb +43 -37
  22. data/lib/delivery/responses/delivery_element_response.rb +34 -34
  23. data/lib/delivery/responses/delivery_item_listing_response.rb +54 -54
  24. data/lib/delivery/responses/delivery_item_response.rb +40 -40
  25. data/lib/delivery/responses/delivery_items_feed_response.rb +58 -58
  26. data/lib/delivery/responses/delivery_language_listing_response.rb +44 -44
  27. data/lib/delivery/responses/delivery_taxonomy_listing_response.rb +47 -47
  28. data/lib/delivery/responses/delivery_taxonomy_response.rb +33 -33
  29. data/lib/delivery/responses/delivery_type_listing_response.rb +46 -46
  30. data/lib/delivery/responses/delivery_type_response.rb +32 -32
  31. data/lib/delivery/responses/response_base.rb +39 -39
  32. data/lib/delivery/tests/401.json +5 -5
  33. data/lib/delivery/tests/429.json +4 -4
  34. data/lib/delivery/tests/fake_responder.rb +99 -105
  35. data/lib/delivery/tests/filtering/items_with_count.json +5384 -5384
  36. data/lib/delivery/tests/filtering/pagination.json +761 -761
  37. data/lib/delivery/tests/generic/items.json +5383 -5383
  38. data/lib/delivery/tests/generic/items/about_us.json +276 -276
  39. data/lib/delivery/tests/generic/items/aeropress_filters.json +155 -155
  40. data/lib/delivery/tests/generic/items/coffee_processing_techniques.json +565 -565
  41. data/lib/delivery/tests/generic/items/where_does_coffee_come_from_.json +598 -598
  42. data/lib/delivery/tests/generic/languages.json +23 -23
  43. data/lib/delivery/tests/generic/taxonomies.json +203 -203
  44. data/lib/delivery/tests/generic/taxonomies/manufacturer.json +29 -29
  45. data/lib/delivery/tests/generic/types.json +835 -835
  46. data/lib/delivery/tests/generic/types/brewer.json +88 -88
  47. data/lib/delivery/tests/generic/types/brewer/elements/product_status.json +5 -5
  48. data/lib/delivery/tests/items_feed/articles_feed_1.json +39 -39
  49. data/lib/delivery/tests/items_feed/articles_feed_2.json +78 -78
  50. data/lib/delivery/tests/items_feed/articles_feed_3.json +104 -104
  51. data/lib/kontent-delivery-sdk-ruby.rb +22 -22
  52. metadata +13 -32
@@ -1,56 +1,56 @@
1
- require 'cgi'
2
-
3
- module Kentico
4
- module Kontent
5
- module Delivery
6
- module QueryParameters
7
- # Base class for all parameters added to a DeliveryQuery. All
8
- # QueryParameters will appear in the query string.
9
- class ParameterBase
10
- attr_accessor :key
11
- SEPARATOR = CGI::escape(',')
12
-
13
- # Constructor.
14
- #
15
- # * *Args*:
16
- # - *key* (+string+) The field to filter upon
17
- # - *operator* (+string+) The Kentico Kontent filter being applied to the field, in brackets
18
- # - *values* (+Object+) One or more values which will appear as the value of the query string parameter
19
- # - *eq_sign* (+boolean+) If false, the equals sign is not generated in the parameter
20
- def initialize(key, operator, values, eq_sign = true)
21
- self.key = key
22
- values = [values] unless values.respond_to? :each
23
- @values = values
24
- @operator = operator
25
- @eq_sign = eq_sign
26
- end
27
-
28
- # Converts the object into a valid query string parameter for use in
29
- # a request to Delivery. The key, operator, and values are all escaped
30
- # and if there are multiple values, they are joined with commas.
31
- #
32
- # * *Returns*:
33
- # - +string+ A query string parameter without any additional characters (e.g. '&')
34
- def provide_query_string_parameter
35
- escaped_values = []
36
- @values.each { |n| escaped_values << CGI.escape(n.to_s) }
37
- if @eq_sign
38
- format(
39
- '%<k>s%<o>s=%<v>s',
40
- k: CGI.escape(key),
41
- o: CGI.escape(@operator),
42
- v: escaped_values.join(SEPARATOR)
43
- )
44
- else
45
- format(
46
- '%<k>s%<o>s',
47
- k: CGI.escape(key),
48
- o: CGI.escape(@operator)
49
- )
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
1
+ require 'cgi'
2
+
3
+ module Kentico
4
+ module Kontent
5
+ module Delivery
6
+ module QueryParameters
7
+ # Base class for all parameters added to a DeliveryQuery. All
8
+ # QueryParameters will appear in the query string.
9
+ class ParameterBase
10
+ attr_accessor :key
11
+ SEPARATOR = CGI::escape(',')
12
+
13
+ # Constructor.
14
+ #
15
+ # * *Args*:
16
+ # - *key* (+string+) The field to filter upon
17
+ # - *operator* (+string+) The Kentico Kontent filter being applied to the field, in brackets
18
+ # - *values* (+Object+) One or more values which will appear as the value of the query string parameter
19
+ # - *eq_sign* (+boolean+) If false, the equals sign is not generated in the parameter
20
+ def initialize(key, operator, values, eq_sign = true)
21
+ self.key = key
22
+ values = [values] unless values.respond_to? :each
23
+ @values = values
24
+ @operator = operator
25
+ @eq_sign = eq_sign
26
+ end
27
+
28
+ # Converts the object into a valid query string parameter for use in
29
+ # a request to Delivery. The key, operator, and values are all escaped
30
+ # and if there are multiple values, they are joined with commas.
31
+ #
32
+ # * *Returns*:
33
+ # - +string+ A query string parameter without any additional characters (e.g. '&')
34
+ def provide_query_string_parameter
35
+ escaped_values = []
36
+ @values.each { |n| escaped_values << CGI.escape(n.to_s) }
37
+ if @eq_sign
38
+ format(
39
+ '%<k>s%<o>s=%<v>s',
40
+ k: CGI.escape(key),
41
+ o: CGI.escape(@operator),
42
+ v: escaped_values.join(SEPARATOR)
43
+ )
44
+ else
45
+ format(
46
+ '%<k>s%<o>s',
47
+ k: CGI.escape(key),
48
+ o: CGI.escape(@operator)
49
+ )
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,78 +1,78 @@
1
- require 'delivery/query_parameters/parameter_base'
2
-
3
- module Kentico
4
- module Kontent
5
- module Delivery
6
- module QueryParameters
7
- # Represents the entire query string for a request to Delivery.
8
- class QueryString
9
- def initialize
10
- @params = []
11
- end
12
-
13
- # Adds a parameter to the query string
14
- #
15
- # * *Args*:
16
- # - *param* (+Object+) Either a string representing the key for the parameter, or a complete Kentico::Kontent::Delivery::QueryParameters::ParameterBase object
17
- # - *values* (+string+) A string or array of strings representing the values for the parameter
18
- # - *operator* (+string+) Kentico Kontent filtering parameter, placed after the key, before the equal sign
19
- def set_param(param, values = '', operator = '')
20
- parameter_base =
21
- if param.is_a? String
22
- Kentico::Kontent::Delivery::QueryParameters::ParameterBase.new(
23
- param,
24
- operator,
25
- values
26
- )
27
- else
28
- param
29
- end
30
- # Ensure we have a ParameterBase object
31
- return unless parameter_base.respond_to? 'provide_query_string_parameter'
32
-
33
- remove_param parameter_base.key
34
- @params << parameter_base
35
- end
36
-
37
- # Removes all parameters from the query string with a matching key.
38
- #
39
- # * *Args*:
40
- # - *key* (+string+) Parameter key
41
- def remove_param(key)
42
- @params.delete_if { |i| i.key.eql? key }
43
- end
44
-
45
- # Returns all parameters from the query string with a matching key.
46
- #
47
- # * *Args*:
48
- # - *key* (+string+) Parameter key
49
- #
50
- # * *Returns*:
51
- # - +Object+ One or more Kentico::Kontent::Delivery::QueryParameters::ParameterBase objects
52
- def param(key)
53
- @params.select { |p| p.key.eql? key }
54
- end
55
-
56
- # Checks whether there are any parameters defined.
57
- #
58
- # * *Returns*:
59
- # - +bool+ True if there are no parameters set.
60
- def empty?
61
- @params.empty?
62
- end
63
-
64
- # Generates a full query string based on the set parameters, with the
65
- # required '?' character at the start. Accomplished by calling the
66
- # Kentico::Kontent::Delivery::QueryParameters::ParameterBase.provide_query_string_parameter
67
- # method for each parameter.
68
- #
69
- # * *Returns*:
70
- # - +string+ A complete query string
71
- def to_s
72
- '?' + @params.map(&:provide_query_string_parameter).join('&')
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
1
+ require 'delivery/query_parameters/parameter_base'
2
+
3
+ module Kentico
4
+ module Kontent
5
+ module Delivery
6
+ module QueryParameters
7
+ # Represents the entire query string for a request to Delivery.
8
+ class QueryString
9
+ def initialize
10
+ @params = []
11
+ end
12
+
13
+ # Adds a parameter to the query string
14
+ #
15
+ # * *Args*:
16
+ # - *param* (+Object+) Either a string representing the key for the parameter, or a complete Kentico::Kontent::Delivery::QueryParameters::ParameterBase object
17
+ # - *values* (+string+) A string or array of strings representing the values for the parameter
18
+ # - *operator* (+string+) Kentico Kontent filtering parameter, placed after the key, before the equal sign
19
+ def set_param(param, values = '', operator = '')
20
+ parameter_base =
21
+ if param.is_a? String
22
+ Kentico::Kontent::Delivery::QueryParameters::ParameterBase.new(
23
+ param,
24
+ operator,
25
+ values
26
+ )
27
+ else
28
+ param
29
+ end
30
+ # Ensure we have a ParameterBase object
31
+ return unless parameter_base.respond_to? 'provide_query_string_parameter'
32
+
33
+ remove_param parameter_base.key
34
+ @params << parameter_base
35
+ end
36
+
37
+ # Removes all parameters from the query string with a matching key.
38
+ #
39
+ # * *Args*:
40
+ # - *key* (+string+) Parameter key
41
+ def remove_param(key)
42
+ @params.delete_if { |i| i.key.eql? key }
43
+ end
44
+
45
+ # Returns all parameters from the query string with a matching key.
46
+ #
47
+ # * *Args*:
48
+ # - *key* (+string+) Parameter key
49
+ #
50
+ # * *Returns*:
51
+ # - +Object+ One or more Kentico::Kontent::Delivery::QueryParameters::ParameterBase objects
52
+ def param(key)
53
+ @params.select { |p| p.key.eql? key }
54
+ end
55
+
56
+ # Checks whether there are any parameters defined.
57
+ #
58
+ # * *Returns*:
59
+ # - +bool+ True if there are no parameters set.
60
+ def empty?
61
+ @params.empty?
62
+ end
63
+
64
+ # Generates a full query string based on the set parameters, with the
65
+ # required '?' character at the start. Accomplished by calling the
66
+ # Kentico::Kontent::Delivery::QueryParameters::ParameterBase.provide_query_string_parameter
67
+ # method for each parameter.
68
+ #
69
+ # * *Returns*:
70
+ # - +string+ A complete query string
71
+ def to_s
72
+ '?' + @params.map(&:provide_query_string_parameter).join('&')
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,102 +1,102 @@
1
- require 'nokogiri'
2
-
3
- module Kentico
4
- module Kontent
5
- module Delivery
6
- module Resolvers
7
- # Locates <a data-item-id=""> tags in content and calls a user-defined method
8
- # to supply the href for content item links.
9
- # See https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-links
10
- class ContentLinkResolver
11
- # Constructor.
12
- #
13
- # * *Args*:
14
- # - *found_handler* (+lambda+) _optional_ Method to be called when resolving a content link and the content item is present in the response
15
- # - *not_found_handler* (+lambda+) _optional_ Method to be called when resolving a content link and the content item isn't present in the response
16
- def initialize(found_handler = nil, not_found_handler = nil)
17
- @found_handler = found_handler
18
- @not_found = not_found_handler
19
- end
20
-
21
- # Resolves all links in the content.
22
- #
23
- # * *Args*:
24
- # - *content* (+string+) The string value stored in the element
25
- # - *links* (+Array+) The collection of links from an element's 'links' JSON node
26
- #
27
- # * *Returns*:
28
- # - +string+ The original content passed, with all links resolved
29
- def resolve(content, links)
30
- doc = Nokogiri::HTML.parse(content).xpath('//body')
31
- links = links.map { |link| ContentLink.new link }
32
- tags = doc.xpath('//a[@data-item-id]')
33
- # This line performs the link resolving and replaces the tags in doc
34
- tags.map { |tag| resolve_tag tag, links }
35
- doc.to_xhtml
36
- end
37
-
38
- private
39
-
40
- # Accepts a tag found in the content and tries to locate matching
41
- # source link from JSON response. If found, resolves URL and returns
42
- # the tag with generated HREF.
43
- #
44
- # * *Args*:
45
- # - *tag* (+string+) A <a data-item-id=""> tag found in the content
46
- # - *links* (+Array+) The collection of links from an element's 'links' JSON node, converted to Kentico::Kontent::Delivery::Resolvers::ContentLink objects
47
- #
48
- # * *Returns*:
49
- # - +string+ The <a data-item-id=""> tag with an HREF generated by the +provide_url+ method
50
- def resolve_tag(tag, links)
51
- matches = links.select { |link| link.id == tag['data-item-id'].to_s }
52
- url = provide_url matches, tag['data-item-id']
53
- tag['href'] = url
54
- tag
55
- end
56
-
57
- # Uses the +resolve_link+ method to generate a URL for a ContentLink
58
- # object, or +resolve_404+ if the content item was not present in the
59
- # response.
60
- #
61
- # * *Args*:
62
- # - *matches* (+Array+) The ContentLink objects with an ID matching a particular <a data-item-id=""> tag
63
- # - *id* (+string+) The ID of the <a data-item-id=""> tag being resolved
64
- #
65
- # * *Returns*:
66
- # - +string+ A url to the item or 404 page
67
- def provide_url(matches, id)
68
- if matches.empty?
69
- if @not_found_handler.nil?
70
- resolve_404 id
71
- else
72
- @not_found_handler.call id
73
- end
74
- else
75
- if @found_handler.nil?
76
- resolve_link matches[0]
77
- else
78
- @found_handler.call matches[0]
79
- end
80
- end
81
- end
82
- end
83
-
84
- # Model for links from the JSON response
85
- class ContentLink
86
- attr_accessor :code_name, :type, :url_slug, :id
87
-
88
- # Constructor.
89
- #
90
- # * *Args*:
91
- # - *link* (+JSON+) One link from an element's 'links' JSON node
92
- def initialize(link)
93
- self.id = link[0]
94
- self.code_name = link[1]['codename']
95
- self.type = link[1]['type']
96
- self.url_slug = link[1]['url_slug']
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
1
+ require 'nokogiri'
2
+
3
+ module Kentico
4
+ module Kontent
5
+ module Delivery
6
+ module Resolvers
7
+ # Locates <a data-item-id=""> tags in content and calls a user-defined method
8
+ # to supply the href for content item links.
9
+ # See https://github.com/Kentico/kontent-delivery-sdk-ruby#resolving-links
10
+ class ContentLinkResolver
11
+ # Constructor.
12
+ #
13
+ # * *Args*:
14
+ # - *found_handler* (+lambda+) _optional_ Method to be called when resolving a content link and the content item is present in the response
15
+ # - *not_found_handler* (+lambda+) _optional_ Method to be called when resolving a content link and the content item isn't present in the response
16
+ def initialize(found_handler = nil, not_found_handler = nil)
17
+ @found_handler = found_handler
18
+ @not_found = not_found_handler
19
+ end
20
+
21
+ # Resolves all links in the content.
22
+ #
23
+ # * *Args*:
24
+ # - *content* (+string+) The string value stored in the element
25
+ # - *links* (+Array+) The collection of links from an element's 'links' JSON node
26
+ #
27
+ # * *Returns*:
28
+ # - +string+ The original content passed, with all links resolved
29
+ def resolve(content, links)
30
+ doc = Nokogiri::HTML.parse(content).xpath('//body')
31
+ links = links.map { |link| ContentLink.new link }
32
+ tags = doc.xpath('//a[@data-item-id]')
33
+ # This line performs the link resolving and replaces the tags in doc
34
+ tags.map { |tag| resolve_tag tag, links }
35
+ doc.to_xhtml
36
+ end
37
+
38
+ private
39
+
40
+ # Accepts a tag found in the content and tries to locate matching
41
+ # source link from JSON response. If found, resolves URL and returns
42
+ # the tag with generated HREF.
43
+ #
44
+ # * *Args*:
45
+ # - *tag* (+string+) A <a data-item-id=""> tag found in the content
46
+ # - *links* (+Array+) The collection of links from an element's 'links' JSON node, converted to Kentico::Kontent::Delivery::Resolvers::ContentLink objects
47
+ #
48
+ # * *Returns*:
49
+ # - +string+ The <a data-item-id=""> tag with an HREF generated by the +provide_url+ method
50
+ def resolve_tag(tag, links)
51
+ matches = links.select { |link| link.id == tag['data-item-id'].to_s }
52
+ url = provide_url matches, tag['data-item-id']
53
+ tag['href'] = url
54
+ tag
55
+ end
56
+
57
+ # Uses the +resolve_link+ method to generate a URL for a ContentLink
58
+ # object, or +resolve_404+ if the content item was not present in the
59
+ # response.
60
+ #
61
+ # * *Args*:
62
+ # - *matches* (+Array+) The ContentLink objects with an ID matching a particular <a data-item-id=""> tag
63
+ # - *id* (+string+) The ID of the <a data-item-id=""> tag being resolved
64
+ #
65
+ # * *Returns*:
66
+ # - +string+ A url to the item or 404 page
67
+ def provide_url(matches, id)
68
+ if matches.empty?
69
+ if @not_found_handler.nil?
70
+ resolve_404 id
71
+ else
72
+ @not_found_handler.call id
73
+ end
74
+ else
75
+ if @found_handler.nil?
76
+ resolve_link matches[0]
77
+ else
78
+ @found_handler.call matches[0]
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ # Model for links from the JSON response
85
+ class ContentLink
86
+ attr_accessor :code_name, :type, :url_slug, :id
87
+
88
+ # Constructor.
89
+ #
90
+ # * *Args*:
91
+ # - *link* (+JSON+) One link from an element's 'links' JSON node
92
+ def initialize(link)
93
+ self.id = link[0]
94
+ self.code_name = link[1]['codename']
95
+ self.type = link[1]['type']
96
+ self.url_slug = link[1]['url_slug']
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end