kontent-ai-delivery 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.md +21 -0
- data/README.md +617 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/delivery/builders/image_transformation_builder.rb +272 -0
- data/lib/delivery/builders/url_builder.rb +123 -0
- data/lib/delivery/client/delivery_client.rb +184 -0
- data/lib/delivery/client/delivery_query.rb +308 -0
- data/lib/delivery/client/request_manager.rb +127 -0
- data/lib/delivery/models/content_item.rb +153 -0
- data/lib/delivery/models/content_type.rb +41 -0
- data/lib/delivery/models/language.rb +29 -0
- data/lib/delivery/models/pagination.rb +22 -0
- data/lib/delivery/models/taxonomy_group.rb +39 -0
- data/lib/delivery/query_parameters/filters.rb +201 -0
- data/lib/delivery/query_parameters/parameter_base.rb +56 -0
- data/lib/delivery/query_parameters/query_string.rb +78 -0
- data/lib/delivery/resolvers/content_link_resolver.rb +102 -0
- data/lib/delivery/resolvers/inline_content_item_resolver.rb +75 -0
- data/lib/delivery/resolvers/linked_item_resolver.rb +43 -0
- data/lib/delivery/responses/delivery_element_response.rb +34 -0
- data/lib/delivery/responses/delivery_item_listing_response.rb +54 -0
- data/lib/delivery/responses/delivery_item_response.rb +40 -0
- data/lib/delivery/responses/delivery_items_feed_response.rb +58 -0
- data/lib/delivery/responses/delivery_language_listing_response.rb +44 -0
- data/lib/delivery/responses/delivery_taxonomy_listing_response.rb +47 -0
- data/lib/delivery/responses/delivery_taxonomy_response.rb +33 -0
- data/lib/delivery/responses/delivery_type_listing_response.rb +46 -0
- data/lib/delivery/responses/delivery_type_response.rb +32 -0
- data/lib/delivery/responses/response_base.rb +39 -0
- data/lib/delivery/tests/401.json +6 -0
- data/lib/delivery/tests/429.json +5 -0
- data/lib/delivery/tests/fake_responder.rb +99 -0
- data/lib/delivery/tests/filtering/items_with_count.json +5385 -0
- data/lib/delivery/tests/filtering/pagination.json +762 -0
- data/lib/delivery/tests/generic/items/about_us.json +277 -0
- data/lib/delivery/tests/generic/items/aeropress_filters.json +156 -0
- data/lib/delivery/tests/generic/items/coffee_processing_techniques.json +566 -0
- data/lib/delivery/tests/generic/items/empty_rich_text.json +24 -0
- data/lib/delivery/tests/generic/items/rich_text_complex_tables.json +81 -0
- data/lib/delivery/tests/generic/items/where_does_coffee_come_from_.json +599 -0
- data/lib/delivery/tests/generic/items.json +5384 -0
- data/lib/delivery/tests/generic/languages.json +24 -0
- data/lib/delivery/tests/generic/taxonomies/manufacturer.json +30 -0
- data/lib/delivery/tests/generic/taxonomies.json +204 -0
- data/lib/delivery/tests/generic/types/brewer/elements/product_status.json +6 -0
- data/lib/delivery/tests/generic/types/brewer.json +89 -0
- data/lib/delivery/tests/generic/types.json +836 -0
- data/lib/delivery/tests/items_feed/articles_feed_1.json +39 -0
- data/lib/delivery/tests/items_feed/articles_feed_2.json +78 -0
- data/lib/delivery/tests/items_feed/articles_feed_3.json +104 -0
- data/lib/kontent-ai-delivery.rb +22 -0
- metadata +221 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'delivery/models/content_item'
|
2
|
+
require 'delivery/responses/response_base'
|
3
|
+
|
4
|
+
module Kontent
|
5
|
+
module Ai
|
6
|
+
module Delivery
|
7
|
+
module Responses
|
8
|
+
# The response of a successful query for a content item.
|
9
|
+
# See https://github.com/kontent-ai/delivery-sdk-ruby#listing-items
|
10
|
+
class DeliveryItemResponse < ResponseBase
|
11
|
+
# A Kontent::Ai::Delivery::ContentItem object from a
|
12
|
+
# Kontent::Ai::Delivery::DeliveryClient.item call.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - Kontent::Ai::Delivery::ContentItem
|
16
|
+
def item
|
17
|
+
@item unless @item.nil?
|
18
|
+
linked_items_resolver = Kontent::Ai::Delivery::Resolvers::LinkedItemResolver.new @response['modular_content'], @content_link_url_resolver, @inline_content_item_resolver
|
19
|
+
@item = Kontent::Ai::Delivery::ContentItem.new(
|
20
|
+
@response,
|
21
|
+
@content_link_url_resolver,
|
22
|
+
@inline_content_item_resolver,
|
23
|
+
linked_items_resolver
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(headers, body, query)
|
28
|
+
@response = JSON.parse(body)
|
29
|
+
@content_link_url_resolver = query.content_link_url_resolver
|
30
|
+
@inline_content_item_resolver = query.inline_content_item_resolver
|
31
|
+
super 200,
|
32
|
+
"Success, '#{item.system.codename}' returned",
|
33
|
+
headers,
|
34
|
+
JSON.generate(@response)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'delivery/models/content_item'
|
2
|
+
require 'delivery/models/pagination'
|
3
|
+
require 'delivery/responses/response_base'
|
4
|
+
|
5
|
+
module Kontent
|
6
|
+
module Ai
|
7
|
+
module Delivery
|
8
|
+
module Responses
|
9
|
+
# The response of a successful query for content items.
|
10
|
+
class DeliveryItemsFeedResponse < ResponseBase
|
11
|
+
# A collection of Kontent::Ai::Delivery::ContentItem objects from
|
12
|
+
# a Kontent::Ai::Delivery::DeliveryClient.items_feed call.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - +Array+ One or more Kontent::Ai::Delivery::ContentItem objects
|
16
|
+
def items
|
17
|
+
@items unless @items.nil?
|
18
|
+
linked_items_resolver = Kontent::Ai::Delivery::Resolvers::LinkedItemResolver.new @response['modular_content'], @content_link_url_resolver, @inline_content_item_resolver
|
19
|
+
items = []
|
20
|
+
@response['items'].each do |n|
|
21
|
+
items << Kontent::Ai::Delivery::ContentItem.new(
|
22
|
+
n,
|
23
|
+
@content_link_url_resolver,
|
24
|
+
@inline_content_item_resolver,
|
25
|
+
linked_items_resolver
|
26
|
+
)
|
27
|
+
end
|
28
|
+
@items = items
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(headers, body, query)
|
32
|
+
@query = query
|
33
|
+
@response = JSON.parse(body)
|
34
|
+
@content_link_url_resolver = query.content_link_url_resolver
|
35
|
+
@inline_content_item_resolver = query.inline_content_item_resolver
|
36
|
+
super 200,
|
37
|
+
"Success, #{items.length} items returned",
|
38
|
+
headers,
|
39
|
+
JSON.generate(@response)
|
40
|
+
end
|
41
|
+
|
42
|
+
def next_result
|
43
|
+
@query.update_continuation continuation_token
|
44
|
+
@query.execute
|
45
|
+
end
|
46
|
+
|
47
|
+
def more_results?
|
48
|
+
!continuation_token.nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
def continuation_token
|
52
|
+
headers[Kontent::Ai::Delivery::DeliveryQuery::HEADER_CONTINUATION]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'delivery/models/language'
|
2
|
+
require 'delivery/responses/response_base'
|
3
|
+
|
4
|
+
module Kontent
|
5
|
+
module Ai
|
6
|
+
module Delivery
|
7
|
+
module Responses
|
8
|
+
# The response of a successful query for project languages.
|
9
|
+
class DeliveryLanguageListingResponse < ResponseBase
|
10
|
+
# Parses the 'pagination' JSON node of the response.
|
11
|
+
#
|
12
|
+
# * *Returns*:
|
13
|
+
# - Kontent::Ai::Delivery::Pagination
|
14
|
+
def pagination
|
15
|
+
@pagination unless @pagination.nil?
|
16
|
+
@pagination = Pagination.new @response['pagination']
|
17
|
+
end
|
18
|
+
|
19
|
+
# Parses the 'languages' JSON node of the response from a
|
20
|
+
# Kontent::Ai::Delivery::DeliveryClient.languages call.
|
21
|
+
#
|
22
|
+
# * *Returns*:
|
23
|
+
# - +Array+ The content types as Kontent::Ai::Delivery::Language objects
|
24
|
+
def languages
|
25
|
+
@languages unless @languages.nil?
|
26
|
+
languages = []
|
27
|
+
@response['languages'].each do |n|
|
28
|
+
languages << Kontent::Ai::Delivery::Language.new(n)
|
29
|
+
end
|
30
|
+
@languages = languages
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(headers, body)
|
34
|
+
@response = JSON.parse(body)
|
35
|
+
super 200,
|
36
|
+
"Success, #{languages.length} languages returned",
|
37
|
+
headers,
|
38
|
+
JSON.generate(@response)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'delivery/models/taxonomy_group'
|
2
|
+
require 'delivery/models/pagination'
|
3
|
+
require 'delivery/responses/response_base'
|
4
|
+
|
5
|
+
module Kontent
|
6
|
+
module Ai
|
7
|
+
module Delivery
|
8
|
+
module Responses
|
9
|
+
# The response of a successful query for taxonomy groups.
|
10
|
+
# See https://github.com/kontent-ai/delivery-sdk-ruby#taxonomy
|
11
|
+
class DeliveryTaxonomyListingResponse < ResponseBase
|
12
|
+
# Parses the 'pagination' JSON node of the response.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - Kontent::Ai::Delivery::Pagination
|
16
|
+
def pagination
|
17
|
+
@pagination unless @pagination.nil?
|
18
|
+
@pagination = Pagination.new @response['pagination']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Parses the 'taxonomies' JSON node of the response from a
|
22
|
+
# Kontent::Ai::Delivery::DeliveryClient.taxonomies call.
|
23
|
+
#
|
24
|
+
# * *Returns*:
|
25
|
+
# - +Array+ The taxonomy groups as Kontent::Ai::Delivery::TaxonomyGroup objects
|
26
|
+
def taxonomies
|
27
|
+
@taxonomies unless @taxonomies.nil?
|
28
|
+
taxonomies = []
|
29
|
+
@response['taxonomies'].each do |n|
|
30
|
+
taxonomies << Kontent::Ai::Delivery::TaxonomyGroup.new(n)
|
31
|
+
end
|
32
|
+
@taxonomies = taxonomies
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(headers, body)
|
36
|
+
@response = JSON.parse(body)
|
37
|
+
|
38
|
+
super 200,
|
39
|
+
"Success, #{taxonomies.length} taxonomies returned",
|
40
|
+
headers,
|
41
|
+
JSON.generate(@response)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'delivery/models/taxonomy_group'
|
2
|
+
require 'delivery/responses/response_base'
|
3
|
+
|
4
|
+
module Kontent
|
5
|
+
module Ai
|
6
|
+
module Delivery
|
7
|
+
module Responses
|
8
|
+
# The response of a successful query for a taxonomy group.
|
9
|
+
# See https://github.com/kontent-ai/delivery-sdk-ruby#taxonomy
|
10
|
+
class DeliveryTaxonomyResponse < ResponseBase
|
11
|
+
# Parses the response from a
|
12
|
+
# Kontent::Ai::Delivery::DeliveryClient.taxonomy call.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - Kontent::Ai::Delivery::TaxonomyGroup
|
16
|
+
def taxonomy
|
17
|
+
@taxonomy unless @taxonomy.nil?
|
18
|
+
@taxonomy = Kontent::Ai::Delivery::TaxonomyGroup.new(@response)
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(headers, body)
|
22
|
+
@response = JSON.parse(body)
|
23
|
+
|
24
|
+
super 200,
|
25
|
+
"Success, '#{taxonomy.system.codename}' returned",
|
26
|
+
headers,
|
27
|
+
JSON.generate(@response)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'delivery/models/content_type'
|
2
|
+
require 'delivery/models/pagination'
|
3
|
+
require 'delivery/responses/response_base'
|
4
|
+
|
5
|
+
module Kontent
|
6
|
+
module Ai
|
7
|
+
module Delivery
|
8
|
+
module Responses
|
9
|
+
# The response of a successful query for content types.
|
10
|
+
# See https://github.com/kontent-ai/delivery-sdk-ruby#retrieving-content-types
|
11
|
+
class DeliveryTypeListingResponse < ResponseBase
|
12
|
+
# Parses the 'pagination' JSON node of the response.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - Kontent::Ai::Delivery::Pagination
|
16
|
+
def pagination
|
17
|
+
@pagination unless @pagination.nil?
|
18
|
+
@pagination = Pagination.new @response['pagination']
|
19
|
+
end
|
20
|
+
|
21
|
+
# Parses the 'types' JSON node of the response from a
|
22
|
+
# Kontent::Ai::Delivery::DeliveryClient.types call.
|
23
|
+
#
|
24
|
+
# * *Returns*:
|
25
|
+
# - +Array+ The content types as Kontent::Ai::Delivery::ContentType objects
|
26
|
+
def types
|
27
|
+
@types unless @types.nil?
|
28
|
+
types = []
|
29
|
+
@response['types'].each do |n|
|
30
|
+
types << Kontent::Ai::Delivery::ContentType.new(n)
|
31
|
+
end
|
32
|
+
@types = types
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(headers, body)
|
36
|
+
@response = JSON.parse(body)
|
37
|
+
super 200,
|
38
|
+
"Success, #{types.length} types returned",
|
39
|
+
headers,
|
40
|
+
JSON.generate(@response)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'delivery/models/content_type'
|
2
|
+
require 'delivery/responses/response_base'
|
3
|
+
|
4
|
+
module Kontent
|
5
|
+
module Ai
|
6
|
+
module Delivery
|
7
|
+
module Responses
|
8
|
+
# The response of a successful query for a content type.
|
9
|
+
# See https://github.com/kontent-ai/delivery-sdk-ruby#retrieving-content-types
|
10
|
+
class DeliveryTypeResponse < ResponseBase
|
11
|
+
# A Kontent::Ai::Delivery::ContentType object from a
|
12
|
+
# Kontent::Ai::Delivery::DeliveryClient.type call.
|
13
|
+
#
|
14
|
+
# * *Returns*:
|
15
|
+
# - Kontent::Ai::Delivery::ContentType
|
16
|
+
def type
|
17
|
+
@type unless @type.nil?
|
18
|
+
@type = Kontent::Ai::Delivery::ContentType.new(@response)
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(headers, body)
|
22
|
+
@response = JSON.parse(body)
|
23
|
+
super 200,
|
24
|
+
"Success, type '#{type.system.codename}' returned",
|
25
|
+
headers,
|
26
|
+
JSON.generate(@response)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Kontent
|
2
|
+
module Ai
|
3
|
+
module Delivery
|
4
|
+
module Responses
|
5
|
+
# Base class for all responses from a
|
6
|
+
# Kontent::Ai::Delivery::DeliveryQuery.execute call.
|
7
|
+
class ResponseBase
|
8
|
+
attr_accessor :http_code,
|
9
|
+
:message,
|
10
|
+
:headers,
|
11
|
+
:json
|
12
|
+
|
13
|
+
# Constructor.
|
14
|
+
#
|
15
|
+
# * *Args*:
|
16
|
+
# - *http_code* (+integer+) The status code returned by the REST request
|
17
|
+
# - *message* (+string+) An informative message about the response, visible when calling +to_s+
|
18
|
+
# - *headers* (+hash+) _optional_ The headers of the REST response
|
19
|
+
# - *json* (+string+) _optional_ The complete, unmodified JSON response from the server
|
20
|
+
def initialize(http_code, message, headers = {}, json = '')
|
21
|
+
self.http_code = http_code
|
22
|
+
self.message = message
|
23
|
+
self.headers = headers
|
24
|
+
self.json = json
|
25
|
+
end
|
26
|
+
|
27
|
+
# Provides an informative message about the success of the request
|
28
|
+
# by combining the status code and message.
|
29
|
+
#
|
30
|
+
# * *Returns*:
|
31
|
+
# - +string+
|
32
|
+
def to_s
|
33
|
+
"Response is status code #{http_code} with message:\n#{message}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
{
|
2
|
+
"message": "Missing or invalid access token. Please include the valid access token value in the Authorization header field as an HTTP bearer authorization scheme.",
|
3
|
+
"request_id": "|89bb1503b14c254a91bd57c135329822.d31c99c5_",
|
4
|
+
"error_code": 3,
|
5
|
+
"specific_code": 0
|
6
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'cgi'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
module Kontent
|
6
|
+
module Ai
|
7
|
+
module Delivery
|
8
|
+
module Tests
|
9
|
+
class FakeResponder
|
10
|
+
IS_SECURE = true # Fake Secure Access is enabled for project
|
11
|
+
CONTINUATION_HEADER_1 = '+RID:~lmJ4ALSekwpBTQAAAAAADA==#RT:1#TRC:100#RTD:NrCNpn14PWTcji51F4ccBWJlYm5geGZqaHBtZWBgYHVmdHVqbnBvamJtAA==#ISV:2#IEO:65551#QCF:1#FPC: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'.freeze
|
12
|
+
CONTINUATION_HEADER_2 = '+RID:~lmJ4ALSekwrtbwAAAAAADA==#RT:2#TRC:200#RTD:NrCNpn14PWTcji51F4ccBWJ2dXBuYnVqZGBxdmNtanRpam9oYGJvZWB2b3F2Y21qdGlqb2hgNDU0ZTJmNgA=#ISV:2#IEO:65551#QCF:1#FPC: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'.freeze
|
13
|
+
CONTINUATION_HEADER_3 = '+RID:~lmJ4ALSekwpBxQAAAAAADA==#RT:3#TRC:300#RTD:NrCNpn14PWTcji51F4ccBWJlYm5geGZqaHBtZWBgYHVmdHVqbnBvamJtAA==#ISV:2#IEO:65551#QCF:1#FPC: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'.freeze
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def get_response(query, url, headers)
|
17
|
+
@query = query
|
18
|
+
if IS_SECURE && !(
|
19
|
+
headers['Authorization'] == "Bearer #{query.secure_key}" ||
|
20
|
+
headers['Authorization'] == "Bearer #{query.preview_key}"
|
21
|
+
)
|
22
|
+
return respond_401
|
23
|
+
end
|
24
|
+
|
25
|
+
url =
|
26
|
+
if @query.should_preview
|
27
|
+
url["https://preview-deliver.kontent.ai/#{query.project_id}".length...url.length]
|
28
|
+
else
|
29
|
+
url["https://deliver.kontent.ai/#{query.project_id}".length...url.length]
|
30
|
+
end
|
31
|
+
|
32
|
+
return respond_429 if @query.code_name == '429'
|
33
|
+
|
34
|
+
qs = url.contains('?') ? url.split('?')[1] : nil
|
35
|
+
|
36
|
+
return respond_feed if query.query_type.eql? Kontent::Ai::Delivery::QUERY_TYPE_ITEMS_FEED
|
37
|
+
|
38
|
+
return respond_filtering qs unless qs.nil? # e.g. /items/about_us?skip=0&limit=5
|
39
|
+
|
40
|
+
respond_generic url # Didn't match other clauses, so response should be located in corresponding filepath
|
41
|
+
end
|
42
|
+
|
43
|
+
def respond_generic(url)
|
44
|
+
path = Pathname.new(File.dirname(__FILE__) + "/generic#{url}.json")
|
45
|
+
OpenStruct.new(
|
46
|
+
headers: '',
|
47
|
+
body: path.read
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
def respond_feed
|
52
|
+
if @query.continuation_exists?
|
53
|
+
if @query.continuation_token.include? '#RT:1#'
|
54
|
+
headers = {Kontent::Ai::Delivery::DeliveryQuery::HEADER_CONTINUATION => CONTINUATION_HEADER_2}
|
55
|
+
path = Pathname.new(File.dirname(__FILE__) + '/items_feed/articles_feed_2.json')
|
56
|
+
else
|
57
|
+
headers = ''
|
58
|
+
path = Pathname.new(File.dirname(__FILE__) + '/items_feed/articles_feed_3.json')
|
59
|
+
end
|
60
|
+
else
|
61
|
+
headers = {Kontent::Ai::Delivery::DeliveryQuery::HEADER_CONTINUATION => CONTINUATION_HEADER_1}
|
62
|
+
path = Pathname.new(File.dirname(__FILE__) + '/items_feed/articles_feed_1.json')
|
63
|
+
end
|
64
|
+
|
65
|
+
OpenStruct.new(
|
66
|
+
headers: headers,
|
67
|
+
body: path.read
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def respond_filtering(query)
|
72
|
+
path =
|
73
|
+
case CGI.unescape query
|
74
|
+
when 'includeTotalCount=1'
|
75
|
+
Pathname.new(File.dirname(__FILE__) + '/filtering/items_with_count.json')
|
76
|
+
when 'skip=0&limit=5'
|
77
|
+
Pathname.new(File.dirname(__FILE__) + '/filtering/pagination.json')
|
78
|
+
end
|
79
|
+
OpenStruct.new(
|
80
|
+
headers: '',
|
81
|
+
body: path.read
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
def respond_429
|
86
|
+
path = Pathname.new(File.dirname(__FILE__) + '/429.json')
|
87
|
+
Kontent::Ai::Delivery::Responses::ResponseBase.new 429, '', '', path.read if path.exist?
|
88
|
+
end
|
89
|
+
|
90
|
+
def respond_401
|
91
|
+
path = Pathname.new(File.dirname(__FILE__) + '/401.json')
|
92
|
+
Kontent::Ai::Delivery::Responses::ResponseBase.new 401, '', '', path.read if path.exist?
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|