delivery-sdk-ruby 0.16.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/delivery/builders/image_transformation_builder.rb +150 -24
- data/lib/delivery/builders/url_builder.rb +58 -18
- data/lib/delivery/client/delivery_client.rb +57 -0
- data/lib/delivery/client/delivery_query.rb +156 -34
- data/lib/delivery/models/content_item.rb +59 -6
- data/lib/delivery/models/content_type.rb +12 -1
- data/lib/delivery/models/pagination.rb +5 -1
- data/lib/delivery/models/taxonomy_group.rb +12 -1
- data/lib/delivery/query_parameters/filters.rb +67 -0
- data/lib/delivery/query_parameters/parameter_base.rb +14 -4
- data/lib/delivery/query_parameters/query_string.rb +28 -3
- data/lib/delivery/resolvers/content_link_resolver.rb +30 -6
- data/lib/delivery/resolvers/inline_content_item_resolver.rb +26 -5
- data/lib/delivery/resolvers/linked_item_resolver.rb +26 -21
- data/lib/delivery/responses/delivery_element_response.rb +7 -1
- data/lib/delivery/responses/delivery_item_listing_response.rb +12 -2
- data/lib/delivery/responses/delivery_item_response.rb +9 -3
- data/lib/delivery/responses/delivery_taxonomy_listing_response.rb +11 -1
- data/lib/delivery/responses/delivery_taxonomy_response.rb +7 -1
- data/lib/delivery/responses/delivery_type_listing_response.rb +11 -1
- data/lib/delivery/responses/delivery_type_response.rb +7 -1
- data/lib/delivery/responses/response_base.rb +13 -1
- data/lib/delivery/version.rb +1 -1
- metadata +2 -2
@@ -1,9 +1,13 @@
|
|
1
1
|
module KenticoCloud
|
2
2
|
module Delivery
|
3
|
-
# Holds pagination data from
|
3
|
+
# Holds pagination data from listing responses
|
4
4
|
class Pagination
|
5
5
|
attr_accessor :skip, :limit, :count, :next_page
|
6
6
|
|
7
|
+
# Constructor.
|
8
|
+
#
|
9
|
+
# * *Args*:
|
10
|
+
# - *json* (+JSON+) The 'pagination' node of a listing reponse's JSON object
|
7
11
|
def initialize(json)
|
8
12
|
self.skip = json['skip']
|
9
13
|
self.limit = json['limit']
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module KenticoCloud
|
2
2
|
module Delivery
|
3
|
-
# JSON data of a taxonomy group parsed as OpenStruct objects for dynamic use
|
4
3
|
class TaxonomyGroup
|
4
|
+
# Parses the 'terms' JSON node as a dynamic OpenStruct object.
|
5
|
+
#
|
6
|
+
# * *Returns*:
|
7
|
+
# - +OpenStruct+ The terms of the taxonomy group as a dynamic object
|
5
8
|
def terms
|
6
9
|
@terms unless @terms.nil?
|
7
10
|
@terms = JSON.parse(
|
@@ -10,6 +13,10 @@ module KenticoCloud
|
|
10
13
|
)
|
11
14
|
end
|
12
15
|
|
16
|
+
# Parses the 'system' JSON node as a dynamic OpenStruct object.
|
17
|
+
#
|
18
|
+
# * *Returns*:
|
19
|
+
# - +OpenStruct+ The system properties of the taxonomy group
|
13
20
|
def system
|
14
21
|
@system unless @system.nil?
|
15
22
|
@system = JSON.parse(
|
@@ -18,6 +25,10 @@ module KenticoCloud
|
|
18
25
|
)
|
19
26
|
end
|
20
27
|
|
28
|
+
# Constructor.
|
29
|
+
#
|
30
|
+
# * *Args*:
|
31
|
+
# - *json* (+JSON+) A JSON node representing a taxonomy group
|
21
32
|
def initialize(source)
|
22
33
|
@source = source
|
23
34
|
end
|
@@ -4,7 +4,14 @@ module KenticoCloud
|
|
4
4
|
module Delivery
|
5
5
|
module QueryParameters
|
6
6
|
# Provides the base class for filter implementations.
|
7
|
+
# See https://developer.kenticocloud.com/v1/reference#content-filtering
|
7
8
|
class Filter < ParameterBase
|
9
|
+
# Constructor.
|
10
|
+
#
|
11
|
+
# * *Args*:
|
12
|
+
# - *key* (+string+) The field to filter upon
|
13
|
+
# - *operator* (+string+) The Kentico Cloud filter being applied to the field, in brackets
|
14
|
+
# - *values* (+Object+) One or more values which will appear as the value of the query string parameter
|
8
15
|
def initialize(key, operator, values)
|
9
16
|
super(key, operator, values)
|
10
17
|
end
|
@@ -19,6 +26,12 @@ class String
|
|
19
26
|
# element or system attribute has a value that contains all the specified
|
20
27
|
# values. This filter is applicable to array values only, such as sitemap
|
21
28
|
# location or value of Linked Items, Taxonomy and Multiple choice content elements.
|
29
|
+
#
|
30
|
+
# * *Args*:
|
31
|
+
# - +Object+ One or more objects representing the values that must appear in the field
|
32
|
+
#
|
33
|
+
# * *Returns*:
|
34
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
22
35
|
def all(*args)
|
23
36
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[all]', *args)
|
24
37
|
end
|
@@ -27,6 +40,12 @@ class String
|
|
27
40
|
# element or system attribute has a value that contains any the specified
|
28
41
|
# values. This filter is applicable to array values only, such as sitemap
|
29
42
|
# location or value of Linked Items, Taxonomy and Multiple choice content elements.
|
43
|
+
#
|
44
|
+
# * *Args*:
|
45
|
+
# - +Object+ One or more objects representing the values that may appear in the field
|
46
|
+
#
|
47
|
+
# * *Returns*:
|
48
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
30
49
|
def any(*args)
|
31
50
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[any]', *args)
|
32
51
|
end
|
@@ -35,12 +54,24 @@ class String
|
|
35
54
|
# or system attribute has a value that contains the specified value.
|
36
55
|
# This filter is applicable to array values only, such as sitemap location or value
|
37
56
|
# of Linked Items, Taxonomy and Multiple choice content elements.
|
57
|
+
#
|
58
|
+
# * *Args*:
|
59
|
+
# - +Object+ An object representing the value that must appear in the field
|
60
|
+
#
|
61
|
+
# * *Returns*:
|
62
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
38
63
|
def contains(*args)
|
39
64
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[contains]', *args)
|
40
65
|
end
|
41
66
|
|
42
67
|
# Represents a filter that matches a content item if the specified
|
43
68
|
# content element or system attribute has the specified value.
|
69
|
+
#
|
70
|
+
# * *Args*:
|
71
|
+
# - +Object+ An object representing the value that must equal the value in the field
|
72
|
+
#
|
73
|
+
# * *Returns*:
|
74
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
44
75
|
def eq(*args)
|
45
76
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '', *args)
|
46
77
|
end
|
@@ -48,6 +79,12 @@ class String
|
|
48
79
|
# Represents a filter that matches a content item if the specified content
|
49
80
|
# element or system attribute has a value that is greater than the
|
50
81
|
# specified value.
|
82
|
+
#
|
83
|
+
# * *Args*:
|
84
|
+
# - +Object+ An object representing the lowest possible value of the field, non-inclusive
|
85
|
+
#
|
86
|
+
# * *Returns*:
|
87
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
51
88
|
def gt(*args)
|
52
89
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[gt]', *args)
|
53
90
|
end
|
@@ -55,6 +92,12 @@ class String
|
|
55
92
|
# Represents a filter that matches a content item if the specified content
|
56
93
|
# element or system attribute has a value that is greater than or equal to
|
57
94
|
# the specified value.
|
95
|
+
#
|
96
|
+
# * *Args*:
|
97
|
+
# - +Object+ An object representing the lowest possible value of the field
|
98
|
+
#
|
99
|
+
# * *Returns*:
|
100
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
58
101
|
def gt_or_eq(*args)
|
59
102
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[gte]', *args)
|
60
103
|
end
|
@@ -62,6 +105,12 @@ class String
|
|
62
105
|
# Represents a filter that matches a content item if the specified
|
63
106
|
# content element or system attribute has a value that matches a
|
64
107
|
# value in the specified list.
|
108
|
+
#
|
109
|
+
# * *Args*:
|
110
|
+
# - +Object+ One or more objects representing the required values of the field
|
111
|
+
#
|
112
|
+
# * *Returns*:
|
113
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
65
114
|
def in(*args)
|
66
115
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[in]', *args)
|
67
116
|
end
|
@@ -69,6 +118,12 @@ class String
|
|
69
118
|
# Represents a filter that matches a content item if the specified content
|
70
119
|
# element or system attribute has a value that is less than the
|
71
120
|
# specified value.
|
121
|
+
#
|
122
|
+
# * *Args*:
|
123
|
+
# - +Object+ An object representing the highest possible value of the field, non-inclusive
|
124
|
+
#
|
125
|
+
# * *Returns*:
|
126
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
72
127
|
def lt(*args)
|
73
128
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[lt]', *args)
|
74
129
|
end
|
@@ -76,6 +131,12 @@ class String
|
|
76
131
|
# Represents a filter that matches a content item if the specified content
|
77
132
|
# element or system attribute has a value that is less than or equal to
|
78
133
|
# the specified value.
|
134
|
+
#
|
135
|
+
# * *Args*:
|
136
|
+
# - +Object+ An object representing the highest possible value of the field
|
137
|
+
#
|
138
|
+
# * *Returns*:
|
139
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
79
140
|
def lt_or_eq(*args)
|
80
141
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[lte]', *args)
|
81
142
|
end
|
@@ -83,6 +144,12 @@ class String
|
|
83
144
|
# Represents a filter that matches a content item if the specified
|
84
145
|
# content element or system attribute has a value that falls within
|
85
146
|
# the specified range of values (both inclusive).
|
147
|
+
#
|
148
|
+
# * *Args*:
|
149
|
+
# - +Object+ An object representing the lowest and highest possible values of the field
|
150
|
+
#
|
151
|
+
# * *Returns*:
|
152
|
+
# - KenticoCloud::Delivery::QueryParameters::Filter
|
86
153
|
def range(*args)
|
87
154
|
KenticoCloud::Delivery::QueryParameters::Filter.new(self, '[range]', *args)
|
88
155
|
end
|
@@ -1,14 +1,18 @@
|
|
1
1
|
module KenticoCloud
|
2
2
|
module Delivery
|
3
|
-
# Contains static methods for adding parameters to a DeliveryQuery
|
4
|
-
# as well as the Filter class.
|
5
3
|
module QueryParameters
|
6
|
-
# Base class for all parameters added to a DeliveryQuery
|
7
|
-
#
|
4
|
+
# Base class for all parameters added to a DeliveryQuery. All
|
5
|
+
# QueryParameters will appear in the query string.
|
8
6
|
class ParameterBase
|
9
7
|
attr_accessor :key
|
10
8
|
SEPARATOR = CGI.escape(',')
|
11
9
|
|
10
|
+
# Constructor.
|
11
|
+
#
|
12
|
+
# * *Args*:
|
13
|
+
# - *key* (+string+) The field to filter upon
|
14
|
+
# - *operator* (+string+) The Kentico Cloud filter being applied to the field, in brackets
|
15
|
+
# - *values* (+Object+) One or more values which will appear as the value of the query string parameter
|
12
16
|
def initialize(key, operator, values)
|
13
17
|
self.key = key
|
14
18
|
values = [values] unless values.respond_to? :each
|
@@ -16,6 +20,12 @@ module KenticoCloud
|
|
16
20
|
@operator = operator
|
17
21
|
end
|
18
22
|
|
23
|
+
# Converts the object into a valid query string parameter for use in
|
24
|
+
# a request to Delivery. The key, operator, and values are all escaped
|
25
|
+
# and if there are multiple values, they are joined with commas.
|
26
|
+
#
|
27
|
+
# * *Returns*:
|
28
|
+
# - +string+ A query string parameter without any additional characters (e.g. '&')
|
19
29
|
def provide_query_string_parameter
|
20
30
|
escaped_values = []
|
21
31
|
@values.each { |n| escaped_values << CGI.escape(n.to_s) }
|
@@ -3,15 +3,18 @@ require 'delivery/query_parameters/parameter_base'
|
|
3
3
|
module KenticoCloud
|
4
4
|
module Delivery
|
5
5
|
module QueryParameters
|
6
|
+
# Represents the entire query string for a request to Delivery.
|
6
7
|
class QueryString
|
7
8
|
def initialize
|
8
9
|
@params = []
|
9
10
|
end
|
10
11
|
|
11
12
|
# Adds a parameter to the query string
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
13
|
+
#
|
14
|
+
# * *Args*:
|
15
|
+
# - *param* (+Object+) Either a string representing the key for the parameter, or a complete KenticoCloud::Delivery::QueryParameters::ParameterBase object
|
16
|
+
# - *values* (+string+) A string or array of strings representing the values for the parameter
|
17
|
+
# - *operator* (+string+) Kentico Cloud filtering parameter, placed after the key, before the equal sign
|
15
18
|
def set_param(param, values = '', operator = '')
|
16
19
|
parameter_base =
|
17
20
|
if param.is_a? String
|
@@ -30,18 +33,40 @@ module KenticoCloud
|
|
30
33
|
@params << parameter_base
|
31
34
|
end
|
32
35
|
|
36
|
+
# Removes all parameters from the query string with a matching key.
|
37
|
+
#
|
38
|
+
# * *Args*:
|
39
|
+
# - *key* (+string+) Parameter key
|
33
40
|
def remove_param(key)
|
34
41
|
@params.delete_if { |i| i.key.eql? key }
|
35
42
|
end
|
36
43
|
|
44
|
+
# Returns all parameters from the query string with a matching key.
|
45
|
+
#
|
46
|
+
# * *Args*:
|
47
|
+
# - *key* (+string+) Parameter key
|
48
|
+
#
|
49
|
+
# * *Returns*:
|
50
|
+
# - +Object+ One or more KenticoCloud::Delivery::QueryParameters::ParameterBase objects
|
37
51
|
def param(key)
|
38
52
|
@params.select { |p| p.key.eql? key }
|
39
53
|
end
|
40
54
|
|
55
|
+
# Checks whether there are any parameters defined.
|
56
|
+
#
|
57
|
+
# * *Returns*:
|
58
|
+
# - +bool+ True if there are no parameters set.
|
41
59
|
def empty?
|
42
60
|
@params.empty?
|
43
61
|
end
|
44
62
|
|
63
|
+
# Generates a full query string based on the set parameters, with the
|
64
|
+
# required '?' character at the start. Accomplished by calling the
|
65
|
+
# KenticoCloud::Delivery::QueryParameters::ParameterBase.provide_query_string_parameter
|
66
|
+
# method for each parameter.
|
67
|
+
#
|
68
|
+
# * *Returns*:
|
69
|
+
# - +string+ A complete query string
|
45
70
|
def to_s
|
46
71
|
'?' + @params.map(&:provide_query_string_parameter).join('&')
|
47
72
|
end
|
@@ -4,15 +4,21 @@ module KenticoCloud
|
|
4
4
|
module Delivery
|
5
5
|
module Resolvers
|
6
6
|
# Locates <a data-item-id=""> tags in content and calls a user-defined method
|
7
|
-
# to supply the href for content item links
|
7
|
+
# to supply the href for content item links.
|
8
|
+
# See https://github.com/Kentico/delivery-sdk-ruby#resolving-links
|
8
9
|
class ContentLinkResolver
|
9
10
|
def initialize(callback = nil)
|
10
11
|
@callback = callback
|
11
12
|
end
|
12
13
|
|
13
|
-
# Resolves all links in the content
|
14
|
-
#
|
15
|
-
#
|
14
|
+
# Resolves all links in the content.
|
15
|
+
#
|
16
|
+
# * *Args*:
|
17
|
+
# - *content* (+string+) The string value stored in the element
|
18
|
+
# - *links* (+Array+) The collection of links from an element's 'links' JSON node
|
19
|
+
#
|
20
|
+
# * *Returns*:
|
21
|
+
# - +string+ The original content passed, with all links resolved
|
16
22
|
def resolve(content, links)
|
17
23
|
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
18
24
|
links = links.map { |link| ContentLink.new link }
|
@@ -26,7 +32,14 @@ module KenticoCloud
|
|
26
32
|
|
27
33
|
# Accepts a tag found in the content and tries to locate matching
|
28
34
|
# source link from JSON response. If found, resolves URL and returns
|
29
|
-
# the tag with generated HREF
|
35
|
+
# the tag with generated HREF.
|
36
|
+
#
|
37
|
+
# * *Args*:
|
38
|
+
# - *tag* (+string+) A <a data-item-id=""> tag found in the content
|
39
|
+
# - *links* (+Array+) The collection of links from an element's 'links' JSON node, converted to KenticoCloud::Delivery::Resolvers::ContentLink objects
|
40
|
+
#
|
41
|
+
# * *Returns*:
|
42
|
+
# - +string+ The <a data-item-id=""> tag with an HREF generated by the +provide_url+ method
|
30
43
|
def resolve_tag(tag, links)
|
31
44
|
matches = links.select { |link| link.id == tag['data-item-id'].to_s }
|
32
45
|
url = provide_url matches
|
@@ -34,7 +47,14 @@ module KenticoCloud
|
|
34
47
|
tag
|
35
48
|
end
|
36
49
|
|
37
|
-
#
|
50
|
+
# Uses the +resolve_link+ method to generate a URL for a ContentLink
|
51
|
+
# object.
|
52
|
+
#
|
53
|
+
# * *Args*:
|
54
|
+
# - *matches* (+Array+) The ContentLink objects with an ID matching a particular <a data-item-id=""> tag
|
55
|
+
#
|
56
|
+
# * *Returns*:
|
57
|
+
# - +string+ A url if a link was found in source links, otherwise '/404'
|
38
58
|
def provide_url(matches)
|
39
59
|
if !matches.empty?
|
40
60
|
if @callback.nil?
|
@@ -52,6 +72,10 @@ module KenticoCloud
|
|
52
72
|
class ContentLink
|
53
73
|
attr_accessor :code_name, :type, :url_slug, :id
|
54
74
|
|
75
|
+
# Constructor.
|
76
|
+
#
|
77
|
+
# * *Args*:
|
78
|
+
# - *link* (+JSON+) One link from an element's 'links' JSON node
|
55
79
|
def initialize(link)
|
56
80
|
self.id = link[0]
|
57
81
|
self.code_name = link[1]['codename']
|
@@ -3,16 +3,22 @@ require 'nokogiri'
|
|
3
3
|
module KenticoCloud
|
4
4
|
module Delivery
|
5
5
|
module Resolvers
|
6
|
-
# Locates <object data-type="item"> tags in content and calls a user-defined
|
7
|
-
# to supply the
|
6
|
+
# Locates <object data-type="item"> tags in content and calls a user-defined
|
7
|
+
# method to supply the output for the content item.
|
8
|
+
# See https://github.com/Kentico/delivery-sdk-ruby#resolving-inline-content
|
8
9
|
class InlineContentItemResolver
|
9
10
|
def initialize(callback = nil)
|
10
11
|
@callback = callback
|
11
12
|
end
|
12
13
|
|
13
|
-
# Resolves all inline content items in the content
|
14
|
-
#
|
15
|
-
#
|
14
|
+
# Resolves all inline content items in the content.
|
15
|
+
#
|
16
|
+
# * *Args*:
|
17
|
+
# - *content* (+string+) The string value stored in the element
|
18
|
+
# - *inline_items* (+Array+) ContentItems referenced by the content from the 'modular_content' JSON node
|
19
|
+
#
|
20
|
+
# * *Returns*:
|
21
|
+
# - +string+ The original content passed, with all <object data-type="item"> replaced with custom output
|
16
22
|
def resolve(content, inline_items)
|
17
23
|
doc = Nokogiri::HTML.parse(content).xpath('//body')
|
18
24
|
tags = doc.xpath('//object[@type="application/kenticocloud"][@data-type="item"]')
|
@@ -32,11 +38,26 @@ module KenticoCloud
|
|
32
38
|
|
33
39
|
# Accepts a tag found in the content and tries to locate matching
|
34
40
|
# ContentItem from JSON response.
|
41
|
+
#
|
42
|
+
# * *Args*:
|
43
|
+
# - *tag* (+string+) A <object data-type="item"> tag found in the content
|
44
|
+
# - *inline_items* (+Array+) ContentItems referenced by the content from the 'modular_content' JSON node
|
45
|
+
#
|
46
|
+
# * *Returns*:
|
47
|
+
# - +string+ The custom output generated by the +provide_output+ method
|
35
48
|
def resolve_tag(tag, inline_items)
|
36
49
|
matches = inline_items.select { |item| item.system.codename == tag['data-codename'].to_s }
|
37
50
|
provide_output matches
|
38
51
|
end
|
39
52
|
|
53
|
+
# Generates custom output for a content item using the +resolve_item+
|
54
|
+
# method.
|
55
|
+
#
|
56
|
+
# * *Args*:
|
57
|
+
# - *matches* (+Array+) The ContentItems from the 'modular_content' JSON node which match the code name of a particular <object data-type="item"> tag
|
58
|
+
#
|
59
|
+
# * *Returns*:
|
60
|
+
# - +string+ The custom output generated by the +resolve_item+ method
|
40
61
|
def provide_output(matches)
|
41
62
|
if !matches.empty?
|
42
63
|
if @callback.nil?
|
@@ -1,29 +1,34 @@
|
|
1
1
|
module KenticoCloud
|
2
2
|
module Delivery
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
module Resolvers
|
4
|
+
# Resolves a content item by its codename. It contains the modular content
|
5
|
+
# of item/items response.
|
6
|
+
class LinkedItemResolver
|
7
|
+
def initialize(modular_content, content_link_url_resolver, inline_content_item_resolver)
|
8
|
+
@modular_content = modular_content
|
9
|
+
@content_link_url_resolver = content_link_url_resolver
|
10
|
+
@inline_content_item_resolver = inline_content_item_resolver
|
11
|
+
@resolved_items = {}
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
# Resolves a content item. If the link for a codename was resolved
|
15
|
+
# before, it returns the same instance of ContentItem.
|
16
|
+
#
|
17
|
+
# * *Args*:
|
18
|
+
# - *codename* (+string+) Codename of the content item
|
19
|
+
#
|
20
|
+
# * *Return*:
|
21
|
+
# - KenticoCloud::Delivery::ContentItem
|
22
|
+
def resolve(codename)
|
23
|
+
@resolved_items[codename] ||= resolve_item(codename)
|
24
|
+
end
|
21
25
|
|
22
|
-
|
26
|
+
private
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
28
|
+
def resolve_item(codename)
|
29
|
+
item = @modular_content.values.find { |i| i['system']['codename'] == codename }
|
30
|
+
ContentItem.new JSON.parse(JSON.generate(item)), @content_link_url_resolver, @inline_content_item_resolver, self
|
31
|
+
end
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|