intercom 2.2.4 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/changes.txt +5 -0
- data/lib/intercom/api_operations/find.rb +1 -0
- data/lib/intercom/api_operations/load.rb +1 -0
- data/lib/intercom/collection_proxy.rb +1 -0
- data/lib/intercom/errors.rb +3 -0
- data/lib/intercom/request.rb +19 -5
- data/lib/intercom/version.rb +1 -1
- data/spec/unit/intercom/company_spec.rb +23 -0
- data/spec/unit/intercom/request_spec.rb +10 -0
- data/spec/unit/intercom/user_spec.rb +1 -28
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 513076550f366c50ddd55f25cf420c9e28ed4a67
|
4
|
+
data.tar.gz: fe6b1eb608e712aa9094035dc14b73e3c7005315
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a3d1a25d2f82c0e88b51c84172b966eeb35d3866a3ba66e5f197522c6e79710baf155166813514f17df91a14fda47e34f479d4632b94191d01b083684343a70
|
7
|
+
data.tar.gz: d90da12671da821d98af3c53009a64adb3425af83a407a428983bb926610c85b64f25171c620682b37271666d81e23562d234db518dcaa29c4bd8608db0705a2
|
data/README.md
CHANGED
@@ -19,7 +19,7 @@ Additionally, the new version uses Ruby 2.
|
|
19
19
|
|
20
20
|
Using bundler:
|
21
21
|
|
22
|
-
gem 'intercom', "~> 2.
|
22
|
+
gem 'intercom', "~> 2.3.0"
|
23
23
|
|
24
24
|
## Basic Usage
|
25
25
|
|
@@ -328,7 +328,7 @@ user = payload.model
|
|
328
328
|
Note that models generated from webhook notifications might differ slightly from models directly acquired via the API. If this presents a problem, calling `payload.load` will load the model from the API using the `id` field.
|
329
329
|
|
330
330
|
### Errors
|
331
|
-
You do not need to deal with the HTTP response from an API call directly. If there is an unsuccessful response then an error that is a subclass of Intercom:Error will be raised. If desired, you can get at the http_code of an Intercom::Error via
|
331
|
+
You do not need to deal with the HTTP response from an API call directly. If there is an unsuccessful response then an error that is a subclass of Intercom:Error will be raised. If desired, you can get at the http_code of an Intercom::Error via its `http_code` method.
|
332
332
|
|
333
333
|
The list of different error subclasses are listed below. As they all inherit off Intercom::Error you can choose to rescue Intercom::Error or
|
334
334
|
else rescue the more specific error subclass.
|
@@ -343,6 +343,7 @@ Intercom::BadRequestError
|
|
343
343
|
Intercom::RateLimitExceeded
|
344
344
|
Intercom::AttributeNotSetError # Raised when you try to call a getter that does not exist on an object
|
345
345
|
Intercom::MultipleMatchingUsersError
|
346
|
+
Intercom::HttpError # Raised when response object is unexpectedly nil
|
346
347
|
```
|
347
348
|
|
348
349
|
### Rate Limiting
|
data/changes.txt
CHANGED
@@ -21,6 +21,7 @@ module Intercom
|
|
21
21
|
else
|
22
22
|
response_hash = Intercom.get(@finder_url, @finder_params)
|
23
23
|
end
|
24
|
+
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response_hash
|
24
25
|
deserialize_response_hash(response_hash, block)
|
25
26
|
next_page = extract_next_link(response_hash)
|
26
27
|
break if next_page.nil?
|
data/lib/intercom/errors.rb
CHANGED
@@ -43,6 +43,9 @@ module Intercom
|
|
43
43
|
|
44
44
|
# Raised when you try to call a non-setter method that does not exist on an object
|
45
45
|
class Intercom::AttributeNotSetError < IntercomError ; end
|
46
|
+
|
47
|
+
# Raised when unexpected nil returned from server
|
48
|
+
class Intercom::HttpError < IntercomError ; end
|
46
49
|
|
47
50
|
#
|
48
51
|
# Non-public errors (internal to the gem)
|
data/lib/intercom/request.rb
CHANGED
@@ -62,11 +62,8 @@ module Intercom
|
|
62
62
|
begin
|
63
63
|
response = http.request(net_http_method)
|
64
64
|
set_rate_limit_details(response)
|
65
|
-
|
66
|
-
|
67
|
-
parsed_body = JSON.parse(decoded)
|
68
|
-
raise_application_errors_on_failure(parsed_body, response.code.to_i) if parsed_body['type'] == 'error.list'
|
69
|
-
end
|
65
|
+
decoded_body = decode_body(response)
|
66
|
+
parsed_body = parse_body(decoded_body, response)
|
70
67
|
raise_errors_on_failure(response)
|
71
68
|
parsed_body
|
72
69
|
rescue Timeout::Error
|
@@ -77,6 +74,23 @@ module Intercom
|
|
77
74
|
raise Intercom::ServiceConnectionError.new('Failed to connect to service [connection attempt timed out]')
|
78
75
|
end
|
79
76
|
end
|
77
|
+
|
78
|
+
def decode_body(response)
|
79
|
+
decode(response['content-encoding'], response.body)
|
80
|
+
end
|
81
|
+
|
82
|
+
def parse_body(decoded_body, response)
|
83
|
+
parsed_body = nil
|
84
|
+
unless decoded_body.strip.empty?
|
85
|
+
begin
|
86
|
+
parsed_body = JSON.parse(decoded_body)
|
87
|
+
rescue JSON::ParserError => e
|
88
|
+
raise_errors_on_failure(response)
|
89
|
+
end
|
90
|
+
raise_application_errors_on_failure(parsed_body, response.code.to_i) if parsed_body['type'] == 'error.list'
|
91
|
+
end
|
92
|
+
parsed_body
|
93
|
+
end
|
80
94
|
|
81
95
|
def set_rate_limit_details(response)
|
82
96
|
rate_limit_details = {}
|
data/lib/intercom/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Intercom::Company do
|
4
|
+
|
5
|
+
describe 'when no response raises error' do
|
6
|
+
it 'on find' do
|
7
|
+
Intercom.expects(:get).with("/companies", {:company_id => '4'}).returns(nil)
|
8
|
+
proc {company = Intercom::Company.find(:company_id => '4')}.must_raise Intercom::HttpError
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'on find_all' do
|
12
|
+
Intercom.expects(:get).with("/companies", {}).returns(nil)
|
13
|
+
proc {Intercom::Company.all.each {|company| }}.must_raise Intercom::HttpError
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'on load' do
|
17
|
+
Intercom.expects(:get).with("/companies", {:company_id => '4'}).returns({'type' =>'user', 'id' =>'aaaaaaaaaaaaaaaaaaaaaaaa', 'company_id' => '4', 'name' => 'MyCo'})
|
18
|
+
company = Intercom::Company.find(:company_id => '4')
|
19
|
+
Intercom.expects(:get).with('/companies/aaaaaaaaaaaaaaaaaaaaaaaa', {}).returns(nil)
|
20
|
+
proc {company.load}.must_raise Intercom::HttpError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
describe 'Intercom::Request' do
|
5
|
+
it 'raises an error when a html error page rendered' do
|
6
|
+
response = OpenStruct.new(:code => 500)
|
7
|
+
req = Intercom::Request.new('path/', 'GET')
|
8
|
+
proc {req.parse_body('<html>somethjing</html>', response)}.must_raise(Intercom::ServerError)
|
9
|
+
end
|
10
|
+
end
|
@@ -219,32 +219,5 @@ describe "Intercom::User" do
|
|
219
219
|
it "returns the total number of users" do
|
220
220
|
Intercom::Count.expects(:user_count).returns('count_info')
|
221
221
|
Intercom::User.count
|
222
|
-
end
|
223
|
-
|
224
|
-
##TODO: Investigate
|
225
|
-
#it "converts company created_at values to unix timestamps" do
|
226
|
-
# time = Time.now
|
227
|
-
|
228
|
-
# user = Intercom::User.new("companies" => [
|
229
|
-
# { "created_at" => time },
|
230
|
-
# { "created_at" => time.to_i }
|
231
|
-
# ])
|
232
|
-
|
233
|
-
# as_hash = user.to_hash
|
234
|
-
# require 'ruby-debug' ; debugger
|
235
|
-
# first_company_as_hash = as_hash["companies"][0]
|
236
|
-
# second_company_as_hash = as_hash["companies"][1]
|
237
|
-
|
238
|
-
# first_company_as_hash["created_at"].must_equal time.to_i
|
239
|
-
# second_company_as_hash["created_at"].must_equal time.to_i
|
240
|
-
#end
|
241
|
-
|
242
|
-
# it "tracks events" do
|
243
|
-
# user = Intercom::User.new("email" => "jim@example.com", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")
|
244
|
-
# Intercom::Event.expects(:create).with(:event_name => 'registration', :user => user)
|
245
|
-
# event = user.track_event('registration')
|
246
|
-
|
247
|
-
# Intercom::Event.expects(:create).with(:event_name => 'another', :user => user, :created_at => 1391691571)
|
248
|
-
# event = user.track_event("another", {:created_at => 1391691571})
|
249
|
-
# end
|
222
|
+
end
|
250
223
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: intercom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben McRedmond
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2014-10-
|
18
|
+
date: 2014-10-21 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: minitest
|
@@ -156,11 +156,13 @@ files:
|
|
156
156
|
- spec/spec_helper.rb
|
157
157
|
- spec/unit/intercom/admin_spec.rb
|
158
158
|
- spec/unit/intercom/collection_proxy_spec.rb
|
159
|
+
- spec/unit/intercom/company_spec.rb
|
159
160
|
- spec/unit/intercom/event_spec.rb
|
160
161
|
- spec/unit/intercom/lib/flat_store_spec.rb
|
161
162
|
- spec/unit/intercom/message_spec.rb
|
162
163
|
- spec/unit/intercom/note_spec.rb
|
163
164
|
- spec/unit/intercom/notification_spec.rb
|
165
|
+
- spec/unit/intercom/request_spec.rb
|
164
166
|
- spec/unit/intercom/subscription_spec.rb
|
165
167
|
- spec/unit/intercom/tag_spec.rb
|
166
168
|
- spec/unit/intercom/traits/api_resource_spec.rb
|
@@ -194,11 +196,13 @@ test_files:
|
|
194
196
|
- spec/spec_helper.rb
|
195
197
|
- spec/unit/intercom/admin_spec.rb
|
196
198
|
- spec/unit/intercom/collection_proxy_spec.rb
|
199
|
+
- spec/unit/intercom/company_spec.rb
|
197
200
|
- spec/unit/intercom/event_spec.rb
|
198
201
|
- spec/unit/intercom/lib/flat_store_spec.rb
|
199
202
|
- spec/unit/intercom/message_spec.rb
|
200
203
|
- spec/unit/intercom/note_spec.rb
|
201
204
|
- spec/unit/intercom/notification_spec.rb
|
205
|
+
- spec/unit/intercom/request_spec.rb
|
202
206
|
- spec/unit/intercom/subscription_spec.rb
|
203
207
|
- spec/unit/intercom/tag_spec.rb
|
204
208
|
- spec/unit/intercom/traits/api_resource_spec.rb
|