intercom 3.9.5 → 4.0.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 +5 -5
- data/README.md +235 -222
- data/Rakefile +1 -1
- data/changes.txt +3 -0
- data/lib/intercom.rb +27 -22
- data/lib/intercom/api_operations/archive.rb +2 -1
- data/lib/intercom/api_operations/delete.rb +16 -0
- data/lib/intercom/api_operations/find.rb +5 -2
- data/lib/intercom/api_operations/find_all.rb +4 -3
- data/lib/intercom/api_operations/list.rb +4 -1
- data/lib/intercom/api_operations/load.rb +4 -2
- data/lib/intercom/api_operations/nested_resource.rb +70 -0
- data/lib/intercom/api_operations/save.rb +5 -4
- data/lib/intercom/api_operations/scroll.rb +4 -5
- data/lib/intercom/api_operations/search.rb +3 -2
- data/lib/intercom/base_collection_proxy.rb +72 -0
- data/lib/intercom/client.rb +20 -25
- data/lib/intercom/client_collection_proxy.rb +17 -39
- data/lib/intercom/company.rb +8 -0
- data/lib/intercom/contact.rb +21 -3
- data/lib/intercom/conversation.rb +4 -0
- data/lib/intercom/data_attribute.rb +7 -0
- data/lib/intercom/deprecated_leads_collection_proxy.rb +22 -0
- data/lib/intercom/deprecated_resources.rb +13 -0
- data/lib/intercom/errors.rb +3 -0
- data/lib/intercom/extended_api_operations/segments.rb +3 -1
- data/lib/intercom/extended_api_operations/tags.rb +3 -1
- data/lib/intercom/lead.rb +21 -0
- data/lib/intercom/lib/typed_json_deserializer.rb +42 -37
- data/lib/intercom/note.rb +4 -0
- data/lib/intercom/request.rb +37 -33
- data/lib/intercom/scroll_collection_proxy.rb +33 -38
- data/lib/intercom/search_collection_proxy.rb +30 -65
- data/lib/intercom/service/base_service.rb +7 -0
- data/lib/intercom/service/company.rb +0 -12
- data/lib/intercom/service/contact.rb +21 -10
- data/lib/intercom/service/conversation.rb +12 -3
- data/lib/intercom/service/data_attribute.rb +20 -0
- data/lib/intercom/service/lead.rb +41 -0
- data/lib/intercom/service/note.rb +4 -8
- data/lib/intercom/service/subscription.rb +2 -2
- data/lib/intercom/service/tag.rb +9 -9
- data/lib/intercom/service/visitor.rb +17 -8
- data/lib/intercom/tag.rb +4 -0
- data/lib/intercom/traits/api_resource.rb +28 -17
- data/lib/intercom/user.rb +12 -3
- data/lib/intercom/utils.rb +13 -2
- data/lib/intercom/version.rb +1 -1
- data/lib/intercom/visitor.rb +0 -2
- data/spec/spec_helper.rb +738 -513
- data/spec/unit/intercom/admin_spec.rb +2 -2
- data/spec/unit/intercom/base_collection_proxy_spec.rb +30 -0
- data/spec/unit/intercom/client_collection_proxy_spec.rb +41 -41
- data/spec/unit/intercom/client_spec.rb +25 -26
- data/spec/unit/intercom/company_spec.rb +13 -15
- data/spec/unit/intercom/contact_spec.rb +289 -33
- data/spec/unit/intercom/conversation_spec.rb +29 -7
- data/spec/unit/intercom/count_spec.rb +4 -4
- data/spec/unit/intercom/data_attribute_spec.rb +40 -0
- data/spec/unit/intercom/deprecated_leads_collection_proxy_spec.rb +17 -0
- data/spec/unit/intercom/event_spec.rb +9 -11
- data/spec/unit/intercom/job_spec.rb +24 -24
- data/spec/unit/intercom/lead_spec.rb +57 -0
- data/spec/unit/intercom/lib/flat_store_spec.rb +22 -20
- data/spec/unit/intercom/message_spec.rb +1 -1
- data/spec/unit/intercom/note_spec.rb +4 -10
- data/spec/unit/intercom/request_spec.rb +1 -1
- data/spec/unit/intercom/scroll_collection_proxy_spec.rb +40 -39
- data/spec/unit/intercom/search_collection_proxy_spec.rb +32 -28
- data/spec/unit/intercom/segment_spec.rb +2 -2
- data/spec/unit/intercom/subscription_spec.rb +5 -6
- data/spec/unit/intercom/tag_spec.rb +22 -14
- data/spec/unit/intercom/team_spec.rb +2 -2
- data/spec/unit/intercom/traits/api_resource_spec.rb +53 -51
- data/spec/unit/intercom/user_spec.rb +224 -226
- data/spec/unit/intercom/visitor_spec.rb +49 -0
- data/spec/unit/intercom_spec.rb +5 -3
- metadata +22 -7
- data/lib/intercom/customer.rb +0 -10
- data/lib/intercom/service/customer.rb +0 -14
- data/spec/unit/intercom/visitors_spec.rb +0 -61
@@ -1,71 +1,49 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
attr_reader :resource_name, :finder_url, :resource_class
|
7
|
-
|
8
|
-
def initialize(resource_name, finder_details: {}, client:)
|
9
|
-
@resource_name = resource_name
|
10
|
-
@resource_class = Utils.constantize_resource_name(resource_name)
|
11
|
-
@finder_url = (finder_details[:url] || "/#{@resource_name}")
|
12
|
-
@finder_params = (finder_details[:params] || {})
|
13
|
-
@client = client
|
14
|
-
end
|
3
|
+
require 'intercom/utils'
|
4
|
+
require 'intercom/base_collection_proxy'
|
15
5
|
|
6
|
+
module Intercom
|
7
|
+
class ClientCollectionProxy < BaseCollectionProxy
|
16
8
|
def each(&block)
|
17
9
|
next_page = nil
|
18
10
|
current_page = nil
|
19
11
|
loop do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
response_hash = @client.get(@finder_url, @finder_params)
|
24
|
-
end
|
25
|
-
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response_hash
|
12
|
+
response_hash = fetch(next_page)
|
13
|
+
raise Intercom::HttpError, 'Http Error - No response entity returned' unless response_hash
|
14
|
+
|
26
15
|
current_page = extract_current_page(response_hash)
|
27
16
|
deserialize_response_hash(response_hash, block)
|
28
17
|
next_page = extract_next_link(response_hash)
|
29
|
-
break if next_page.nil?
|
18
|
+
break if next_page.nil? || (@params[:page] && (current_page >= @params[:page]))
|
30
19
|
end
|
31
20
|
self
|
32
21
|
end
|
33
22
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
23
|
+
def fetch(next_page)
|
24
|
+
if next_page
|
25
|
+
@client.get(next_page, {})
|
26
|
+
else
|
27
|
+
@client.get(@url, @params)
|
37
28
|
end
|
38
|
-
nil
|
39
29
|
end
|
40
30
|
|
41
|
-
include Enumerable
|
42
|
-
|
43
31
|
private
|
44
32
|
|
45
|
-
def deserialize_response_hash(response_hash, block)
|
46
|
-
top_level_type = response_hash.delete('type')
|
47
|
-
if resource_name == 'subscriptions'
|
48
|
-
top_level_entity_key = 'items'
|
49
|
-
else
|
50
|
-
top_level_entity_key = Utils.entity_key_from_type(top_level_type)
|
51
|
-
end
|
52
|
-
response_hash[top_level_entity_key].each do |object_json|
|
53
|
-
block.call Lib::TypedJsonDeserializer.new(object_json).deserialize
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
33
|
def paging_info_present?(response_hash)
|
58
34
|
!!(response_hash['pages'] && response_hash['pages']['type'])
|
59
35
|
end
|
60
36
|
|
61
37
|
def extract_next_link(response_hash)
|
62
38
|
return nil unless paging_info_present?(response_hash)
|
39
|
+
|
63
40
|
paging_info = response_hash.delete('pages')
|
64
|
-
paging_info[
|
41
|
+
paging_info['next']
|
65
42
|
end
|
66
43
|
|
67
44
|
def extract_current_page(response_hash)
|
68
45
|
return nil unless paging_info_present?(response_hash)
|
46
|
+
|
69
47
|
response_hash['pages']['page']
|
70
48
|
end
|
71
49
|
end
|
data/lib/intercom/company.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
require 'intercom/traits/incrementable_attributes'
|
2
2
|
require 'intercom/traits/api_resource'
|
3
|
+
require 'intercom/api_operations/nested_resource'
|
3
4
|
|
4
5
|
module Intercom
|
5
6
|
class Company
|
6
7
|
include Traits::IncrementableAttributes
|
7
8
|
include Traits::ApiResource
|
9
|
+
include ApiOperations::NestedResource
|
10
|
+
|
11
|
+
nested_resource_methods :contact, operations: %i[list]
|
12
|
+
|
13
|
+
def self.collection_proxy_class
|
14
|
+
Intercom::ClientCollectionProxy
|
15
|
+
end
|
8
16
|
|
9
17
|
def identity_vars ; [:id, :company_id] ; end
|
10
18
|
def flat_store_attributes ; [:custom_attributes] ; end
|
data/lib/intercom/contact.rb
CHANGED
@@ -1,11 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'intercom/traits/incrementable_attributes'
|
1
4
|
require 'intercom/traits/api_resource'
|
5
|
+
require 'intercom/api_operations/nested_resource'
|
2
6
|
|
3
7
|
module Intercom
|
4
8
|
class Contact
|
9
|
+
include Traits::IncrementableAttributes
|
5
10
|
include Traits::ApiResource
|
11
|
+
include ApiOperations::NestedResource
|
12
|
+
|
13
|
+
nested_resource_methods :tag, operations: %i[add delete list]
|
14
|
+
nested_resource_methods :note, operations: %i[create list]
|
15
|
+
nested_resource_methods :company, operations: %i[add delete list]
|
16
|
+
|
17
|
+
def self.collection_proxy_class
|
18
|
+
Intercom::BaseCollectionProxy
|
19
|
+
end
|
20
|
+
|
21
|
+
def identity_vars
|
22
|
+
[:id]
|
23
|
+
end
|
6
24
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
25
|
+
def flat_store_attributes
|
26
|
+
[:custom_attributes]
|
27
|
+
end
|
10
28
|
end
|
11
29
|
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'intercom/traits/api_resource'
|
2
|
+
require 'intercom/api_operations/nested_resource'
|
2
3
|
|
3
4
|
module Intercom
|
4
5
|
class Conversation
|
5
6
|
include Traits::ApiResource
|
7
|
+
include ApiOperations::NestedResource
|
8
|
+
|
9
|
+
nested_resource_methods :tag, operations: %i[add delete]
|
6
10
|
end
|
7
11
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Intercom
|
4
|
+
class DeprecatedLeadsCollectionProxy < ClientCollectionProxy
|
5
|
+
def fetch(next_page)
|
6
|
+
response_hash = if next_page
|
7
|
+
@client.get(next_page, {})
|
8
|
+
else
|
9
|
+
@client.get(@url, @params)
|
10
|
+
end
|
11
|
+
transform(response_hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
def transform(response_hash)
|
15
|
+
response_hash['type'] = 'lead.list'
|
16
|
+
leads_list = response_hash.delete('contacts')
|
17
|
+
leads_list.each { |lead| lead['type'] = 'lead' }
|
18
|
+
response_hash['leads'] = leads_list
|
19
|
+
response_hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/intercom/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'intercom/client_collection_proxy'
|
2
4
|
require 'intercom/utils'
|
3
5
|
|
@@ -6,7 +8,7 @@ module Intercom
|
|
6
8
|
module Segments
|
7
9
|
def by_segment(id)
|
8
10
|
collection_name = Utils.resource_class_to_collection_name(collection_class)
|
9
|
-
ClientCollectionProxy.new(collection_name,
|
11
|
+
ClientCollectionProxy.new(collection_name, collection_class, details: { url: "/#{collection_name}?segment_id=#{id}" }, client: @client)
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'intercom/client_collection_proxy'
|
2
4
|
require 'intercom/utils'
|
3
5
|
|
@@ -6,7 +8,7 @@ module Intercom
|
|
6
8
|
module Tags
|
7
9
|
def by_tag(id)
|
8
10
|
collection_name = Utils.resource_class_to_collection_name(collection_class)
|
9
|
-
ClientCollectionProxy.new(collection_name,
|
11
|
+
ClientCollectionProxy.new(collection_name, collection_class, details: { url: "/#{collection_name}?tag_id=#{id}" }, client: @client)
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'intercom/traits/api_resource'
|
4
|
+
|
5
|
+
module Intercom
|
6
|
+
class Lead
|
7
|
+
include Traits::ApiResource
|
8
|
+
|
9
|
+
def identity_vars
|
10
|
+
%i[email user_id]
|
11
|
+
end
|
12
|
+
|
13
|
+
def flat_store_attributes
|
14
|
+
[:custom_attributes]
|
15
|
+
end
|
16
|
+
|
17
|
+
def update_verb
|
18
|
+
'put'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,54 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'intercom/utils'
|
2
4
|
|
3
5
|
module Intercom
|
4
6
|
module Lib
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
# Responsibility: To decide whether we are deserializing a collection or an
|
8
|
+
# entity of a particular type and to dispatch deserialization
|
9
|
+
class TypedJsonDeserializer
|
10
|
+
attr_reader :json
|
11
|
+
|
12
|
+
def initialize(json, client)
|
13
|
+
@json = json
|
14
|
+
@client = client
|
15
|
+
end
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
17
|
+
def deserialize
|
18
|
+
if blank_object_type?(object_type)
|
19
|
+
raise DeserializationError, 'No type field was found to facilitate deserialization'
|
20
|
+
elsif list_object_type?(object_type)
|
21
|
+
deserialize_collection(json[object_entity_key])
|
22
|
+
else # singular object type
|
23
|
+
deserialize_object(json)
|
22
24
|
end
|
25
|
+
end
|
23
26
|
|
24
|
-
|
27
|
+
private
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
def blank_object_type?(object_type)
|
30
|
+
object_type.nil? || object_type == ''
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
def list_object_type?(object_type)
|
34
|
+
object_type.end_with?('.list')
|
35
|
+
end
|
33
36
|
|
34
|
-
|
35
|
-
|
36
|
-
collection_json.map { |item_json| TypedJsonDeserializer.new(item_json).deserialize }
|
37
|
-
end
|
37
|
+
def deserialize_collection(collection_json)
|
38
|
+
return [] if collection_json.nil?
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
entity_class.from_api(object_json)
|
42
|
-
end
|
40
|
+
collection_json.map { |item_json| TypedJsonDeserializer.new(item_json, @client).deserialize }
|
41
|
+
end
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
def deserialize_object(object_json)
|
44
|
+
entity_class = Utils.constantize_singular_resource_name(object_entity_key)
|
45
|
+
deserialized = entity_class.from_api(object_json)
|
46
|
+
deserialized.client = @client
|
47
|
+
deserialized
|
48
|
+
end
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
def object_type
|
51
|
+
@object_type ||= json['type']
|
52
|
+
end
|
51
53
|
|
54
|
+
def object_entity_key
|
55
|
+
@object_entity_key ||= Utils.entity_key_from_type(object_type)
|
52
56
|
end
|
57
|
+
end
|
53
58
|
end
|
54
59
|
end
|
data/lib/intercom/note.rb
CHANGED
data/lib/intercom/request.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'cgi'
|
2
4
|
require 'net/https'
|
3
5
|
|
@@ -23,17 +25,18 @@ module Intercom
|
|
23
25
|
private def method_with_body(http_method, path, params)
|
24
26
|
request = http_method.send(:new, path, default_headers)
|
25
27
|
request.body = params.to_json
|
26
|
-
request[
|
28
|
+
request['Content-Type'] = 'application/json'
|
27
29
|
request
|
28
30
|
end
|
29
31
|
|
30
32
|
private def default_headers
|
31
|
-
{'Accept-Encoding' => 'gzip, deflate', 'Accept' => 'application/vnd.intercom.3+json', 'User-Agent' => "Intercom-Ruby/#{Intercom::VERSION}"}
|
33
|
+
{ 'Accept-Encoding' => 'gzip, deflate', 'Accept' => 'application/vnd.intercom.3+json', 'User-Agent' => "Intercom-Ruby/#{Intercom::VERSION}" }
|
32
34
|
end
|
33
35
|
|
34
36
|
private def append_query_string_to_url(url, params)
|
35
37
|
return url if params.empty?
|
36
|
-
|
38
|
+
|
39
|
+
query_string = params.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
|
37
40
|
url + "?#{query_string}"
|
38
41
|
end
|
39
42
|
end
|
@@ -46,11 +49,11 @@ module Intercom
|
|
46
49
|
|
47
50
|
attr_accessor :handle_rate_limit
|
48
51
|
|
49
|
-
def execute(target_base_url=nil,
|
52
|
+
def execute(target_base_url = nil, token:, read_timeout: 90, open_timeout: 30, api_version: nil)
|
50
53
|
retries = 3
|
51
54
|
base_uri = URI.parse(target_base_url)
|
52
55
|
set_common_headers(net_http_method, base_uri)
|
53
|
-
|
56
|
+
set_auth_header(net_http_method, token)
|
54
57
|
set_api_version(net_http_method, api_version) if api_version
|
55
58
|
begin
|
56
59
|
client(base_uri, read_timeout: read_timeout, open_timeout: open_timeout).start do |http|
|
@@ -71,7 +74,7 @@ module Intercom
|
|
71
74
|
if @handle_rate_limit
|
72
75
|
seconds_to_retry = (@rate_limit_details[:reset_at] - Time.now.utc).ceil
|
73
76
|
if (retries -= 1) < 0
|
74
|
-
raise Intercom::RateLimitExceeded
|
77
|
+
raise Intercom::RateLimitExceeded, 'Rate limit retries exceeded. Please examine current API Usage.'
|
75
78
|
else
|
76
79
|
sleep seconds_to_retry unless seconds_to_retry < 0
|
77
80
|
retry
|
@@ -80,11 +83,11 @@ module Intercom
|
|
80
83
|
raise e
|
81
84
|
end
|
82
85
|
rescue Timeout::Error
|
83
|
-
raise Intercom::ServiceUnavailableError
|
86
|
+
raise Intercom::ServiceUnavailableError, 'Service Unavailable [request timed out]'
|
84
87
|
end
|
85
88
|
end
|
86
89
|
rescue Timeout::Error
|
87
|
-
raise Intercom::ServiceConnectionError
|
90
|
+
raise Intercom::ServiceConnectionError, 'Failed to connect to service [connection attempt timed out]'
|
88
91
|
end
|
89
92
|
end
|
90
93
|
|
@@ -114,8 +117,9 @@ module Intercom
|
|
114
117
|
end
|
115
118
|
|
116
119
|
private def decode(content_encoding, body)
|
117
|
-
return body if
|
118
|
-
|
120
|
+
return body if !body || body.empty? || content_encoding != 'gzip'
|
121
|
+
|
122
|
+
Zlib::GzipReader.new(StringIO.new(body)).read.force_encoding('utf-8')
|
119
123
|
end
|
120
124
|
|
121
125
|
private def json_parse_response(str, code)
|
@@ -123,7 +127,7 @@ module Intercom
|
|
123
127
|
|
124
128
|
JSON.parse(str)
|
125
129
|
rescue JSON::ParserError
|
126
|
-
msg = <<~MSG.gsub(/[[:space:]]+/,
|
130
|
+
msg = <<~MSG.gsub(/[[:space:]]+/, ' ').strip # #squish from ActiveSuppor
|
127
131
|
Expected a JSON response body. Instead got '#{str}'
|
128
132
|
with status code '#{code}'.
|
129
133
|
MSG
|
@@ -139,12 +143,12 @@ module Intercom
|
|
139
143
|
@rate_limit_details = rate_limit_details
|
140
144
|
end
|
141
145
|
|
142
|
-
private def set_common_headers(method,
|
146
|
+
private def set_common_headers(method, _base_uri)
|
143
147
|
method.add_field('AcceptEncoding', 'gzip, deflate')
|
144
148
|
end
|
145
149
|
|
146
|
-
private def
|
147
|
-
method.
|
150
|
+
private def set_auth_header(method, token)
|
151
|
+
method.add_field('Authorization', "Bearer #{token}")
|
148
152
|
end
|
149
153
|
|
150
154
|
private def set_api_version(method, api_version)
|
@@ -155,21 +159,21 @@ module Intercom
|
|
155
159
|
code = res.code.to_i
|
156
160
|
|
157
161
|
if code == 404
|
158
|
-
raise Intercom::ResourceNotFound
|
162
|
+
raise Intercom::ResourceNotFound, 'Resource Not Found'
|
159
163
|
elsif code == 401
|
160
|
-
raise Intercom::AuthenticationError
|
164
|
+
raise Intercom::AuthenticationError, 'Unauthorized'
|
161
165
|
elsif code == 403
|
162
|
-
raise Intercom::AuthenticationError
|
166
|
+
raise Intercom::AuthenticationError, 'Forbidden'
|
163
167
|
elsif code == 429
|
164
|
-
raise Intercom::RateLimitExceeded
|
168
|
+
raise Intercom::RateLimitExceeded, 'Rate Limit Exceeded'
|
165
169
|
elsif code == 500
|
166
|
-
raise Intercom::ServerError
|
170
|
+
raise Intercom::ServerError, 'Server Error'
|
167
171
|
elsif code == 502
|
168
|
-
raise Intercom::BadGatewayError
|
172
|
+
raise Intercom::BadGatewayError, 'Bad Gateway Error'
|
169
173
|
elsif code == 503
|
170
|
-
raise Intercom::ServiceUnavailableError
|
174
|
+
raise Intercom::ServiceUnavailableError, 'Service Unavailable'
|
171
175
|
elsif code == 504
|
172
|
-
raise Intercom::GatewayTimeoutError
|
176
|
+
raise Intercom::GatewayTimeoutError, 'Gateway Timeout'
|
173
177
|
end
|
174
178
|
end
|
175
179
|
|
@@ -180,10 +184,10 @@ module Intercom
|
|
180
184
|
error_field = error_details['field']
|
181
185
|
parsed_http_code = (http_code > 0 ? http_code : nil)
|
182
186
|
error_context = {
|
183
|
-
:
|
184
|
-
:
|
185
|
-
:
|
186
|
-
:
|
187
|
+
http_code: parsed_http_code,
|
188
|
+
application_error_code: error_code,
|
189
|
+
field: error_field,
|
190
|
+
request_id: error_list_details['request_id']
|
187
191
|
}
|
188
192
|
case error_code
|
189
193
|
when 'unauthorized', 'forbidden', 'token_not_found'
|
@@ -194,19 +198,19 @@ module Intercom
|
|
194
198
|
raise Intercom::TokenRevokedError.new(error_details['message'], error_context)
|
195
199
|
when 'token_unauthorized'
|
196
200
|
raise Intercom::TokenUnauthorizedError.new(error_details['message'], error_context)
|
197
|
-
when
|
201
|
+
when 'bad_request', 'missing_parameter', 'parameter_invalid', 'parameter_not_found'
|
198
202
|
raise Intercom::BadRequestError.new(error_details['message'], error_context)
|
199
|
-
when
|
203
|
+
when 'not_restorable'
|
200
204
|
raise Intercom::BlockedUserError.new(error_details['message'], error_context)
|
201
|
-
when
|
205
|
+
when 'not_found', 'company_not_found'
|
202
206
|
raise Intercom::ResourceNotFound.new(error_details['message'], error_context)
|
203
|
-
when
|
207
|
+
when 'admin_not_found'
|
204
208
|
raise Intercom::AdminNotFound.new(error_details['message'], error_context)
|
205
|
-
when
|
209
|
+
when 'rate_limit_exceeded'
|
206
210
|
raise Intercom::RateLimitExceeded.new(error_details['message'], error_context)
|
207
|
-
when
|
211
|
+
when 'custom_data_limit_reached'
|
208
212
|
raise Intercom::CDALimitReachedError.new(error_details['message'], error_context)
|
209
|
-
when
|
213
|
+
when 'invalid_document'
|
210
214
|
raise Intercom::InvalidDocumentError.new(error_details['message'], error_context)
|
211
215
|
when 'service_unavailable'
|
212
216
|
raise Intercom::ServiceUnavailableError.new(error_details['message'], error_context)
|