intercom 3.5.23 → 3.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e68aeb1127d2cf823cc5dd0ddd659dcd3c87b21
4
- data.tar.gz: 47726ed9aaa657973655766fbde7562aa106f9bd
3
+ metadata.gz: ec8a7ce6c9363737310afd46f571c394f4e324ec
4
+ data.tar.gz: aa4056bdf51ad0423f38b89694c333548450aacb
5
5
  SHA512:
6
- metadata.gz: 22c0957deab7de22f497ace8c4b5e2c51a36719cd12abae4dc83c89525b795b665c04fb62b1a85e537c4e9e9a5ee6a84beef9aad4920e8a3f281bcdd1300f189
7
- data.tar.gz: 579157330addc830b0c64bf48f0721d94f956e30a1248d59380c6284ca32bd2ff43e7b49f6f67db94ac3e75e5074c3020eeb50d2c39741d8ef327c2002472d34
6
+ metadata.gz: 8a05546c944b5c41dc6725244c7c7fd8c7502218c7ac320b70782d47b65d075bc1671547ce610c8eeb972f0bbe8ec30e41fcc0c7c77368e0ec45e24bf13327c9
7
+ data.tar.gz: 106162c9952d8d1bb7f752bae45d53036788d792bffcd7d01248bc724bfa68f94ba48c187c7f357011bfbee60a29bce86890e1466531eab3ee59c7e5e1ae7df2
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.3.7
6
+
7
+ working_directory: ~/intercom-ruby
8
+
9
+ steps:
10
+ - checkout
11
+ - run: bundle install
12
+ - run: bundle exec rake
data/Gemfile CHANGED
@@ -8,7 +8,4 @@ group :development, :test do
8
8
  gem 'json-jruby'
9
9
  gem 'jruby-openssl'
10
10
  end
11
- platforms :ruby_18 do
12
- gem 'json_pure'
13
- end
14
11
  end
data/README.md CHANGED
@@ -22,13 +22,13 @@ This version of the gem is compatible with `Ruby 2.1` and above.
22
22
 
23
23
  Using bundler:
24
24
 
25
- gem 'intercom', '~> 3.5.23'
25
+ gem 'intercom', '~> 3.5.24'
26
26
 
27
27
  ## Basic Usage
28
28
 
29
29
  ### Configure your client
30
30
 
31
- > If you already have a personal access token you can find it [here](https://app.intercom.io/a/apps/_/settings/personal-access-token). If you want to create or learn more about personal access tokens then you can find more info [here](https://developers.intercom.io/docs/personal-access-tokens).
31
+ > If you already have a personal access token you can find it [here](https://app.intercom.io/developers/_/access-token). If you want to create or learn more about personal access tokens then you can find more info [here](https://developers.intercom.io/docs/personal-access-tokens).
32
32
 
33
33
  ```ruby
34
34
  # With an OAuth or Personal Access token:
@@ -27,6 +27,15 @@ module Intercom
27
27
  # Check that you have set Intercom.token correctly.
28
28
  class AuthenticationError < IntercomError; end
29
29
 
30
+ # Raised when the token provided is linked to a deleted application.
31
+ class AppSuspendedError < AuthenticationError; end
32
+
33
+ # Raised when the token provided has been revoked.
34
+ class TokenRevokedError < AuthenticationError; end
35
+
36
+ # Raised when the token provided can't be decoded, and is most likely invalid.
37
+ class TokenUnauthorizedError < AuthenticationError; end
38
+
30
39
  # Raised when something goes wrong on within the Intercom API service.
31
40
  class ServerError < IntercomError; end
32
41
 
@@ -74,7 +74,8 @@ module Intercom
74
74
  parsed_body
75
75
  rescue Intercom::RateLimitExceeded => e
76
76
  if @handle_rate_limit
77
- sleep (@rate_limit_details[:reset_at] - Time.now.utc).ceil
77
+ seconds_to_retry = (@rate_limit_details[:reset_at] - Time.now.utc).ceil
78
+ sleep seconds_to_retry unless seconds_to_retry < 0
78
79
  retry unless (retries -=1).zero?
79
80
  else
80
81
  raise e
@@ -109,7 +110,7 @@ module Intercom
109
110
  rate_limit_details = {}
110
111
  rate_limit_details[:limit] = response['X-RateLimit-Limit'].to_i if response['X-RateLimit-Limit']
111
112
  rate_limit_details[:remaining] = response['X-RateLimit-Remaining'].to_i if response['X-RateLimit-Remaining']
112
- rate_limit_details[:reset_at] = Time.at(response['X-RateLimit-Reset'].to_i) if response['X-RateLimit-Reset']
113
+ rate_limit_details[:reset_at] = Time.parse(response['X-RateLimit-Reset']) if response['X-RateLimit-Reset']
113
114
  @rate_limit_details = rate_limit_details
114
115
  end
115
116
 
@@ -151,6 +152,12 @@ module Intercom
151
152
  case error_code
152
153
  when 'unauthorized', 'forbidden', 'token_not_found'
153
154
  raise Intercom::AuthenticationError.new(error_details['message'], error_context)
155
+ when 'token_suspended'
156
+ raise Intercom::AppSuspendedError.new(error_details['message'], error_context)
157
+ when 'token_revoked'
158
+ raise Intercom::TokenRevokedError.new(error_details['message'], error_context)
159
+ when 'token_unauthorized'
160
+ raise Intercom::TokenUnauthorizedError.new(error_details['message'], error_context)
154
161
  when "bad_request", "missing_parameter", 'parameter_invalid', 'parameter_not_found'
155
162
  raise Intercom::BadRequestError.new(error_details['message'], error_context)
156
163
  when "not_restorable"
@@ -1,3 +1,3 @@
1
1
  module Intercom #:nodoc:
2
- VERSION = "3.5.23"
2
+ VERSION = "3.5.24"
3
3
  end
@@ -235,7 +235,7 @@ def users_scroll(include_users= false)
235
235
  }
236
236
  end
237
237
 
238
- def users_pagination(include_next_link=false, per_page=0, page=0, total_pages=0, total_count=0, user_list=[])
238
+ def users_pagination(include_next_link:, per_page:, page:, total_pages:, total_count:, user_list:)
239
239
  {
240
240
  "type"=>"user.list",
241
241
  "pages"=>
@@ -38,21 +38,21 @@ describe Intercom::ClientCollectionProxy do
38
38
  test_user("user4@example.com"), test_user("user5@example.com"), test_user("user6@example.com"),
39
39
  test_user("user7@example.com"), test_user("user8@example.com"), test_user("user9@example.com"),
40
40
  test_user("user10@example.com")]
41
- client.expects(:get).with("/users", {:type=>'users', :per_page => 10, :page => 1}).returns(users_pagination(false, per_page=10, page=1, total_pages=1, total_count=10, user_list=users))
41
+ client.expects(:get).with("/users", {:type=>'users', :per_page => 10, :page => 1}).returns(users_pagination(include_next_link: false, per_page: 10, page: 1, total_pages: 1, total_count: 10, user_list: users))
42
42
  result = client.users.find_all(:type=>'users', :per_page => 10, :page => 1).map {|user| user.email }
43
43
  result.must_equal %W(user1@example.com user2@example.com user3@example.com user4@example.com user5@example.com user6@example.com user7@example.com user8@example.com user9@example.com user10@example.com)
44
44
  end
45
45
 
46
46
  it "supports multi page pagination" do
47
47
  users = [test_user("user3@example.com"), test_user("user4@example.com")]
48
- client.expects(:get).with("/users", {:type=>'users', :per_page => 2, :page => 3}).returns(users_pagination(true, per_page=2, page=3, total_pages=5, total_count=10, user_list=users))
48
+ client.expects(:get).with("/users", {:type=>'users', :per_page => 2, :page => 3}).returns(users_pagination(include_next_link: true, per_page: 2, page: 3, total_pages: 5, total_count: 10, user_list: users))
49
49
  result = client.users.find_all(:type=>'users', :per_page => 2, :page => 3).map {|user| user.email }
50
50
  result.must_equal %W(user3@example.com user4@example.com)
51
51
  end
52
52
 
53
53
  it "works with page out of range request" do
54
54
  users = []
55
- client.expects(:get).with("/users", {:type=>'users', :per_page => 2, :page => 30}).returns(users_pagination(true, per_page=2, page=30, total_pages=2, total_count=3, user_list=users))
55
+ client.expects(:get).with("/users", {:type=>'users', :per_page => 2, :page => 30}).returns(users_pagination(include_next_link: true, per_page: 2, page: 30, total_pages: 2, total_count: 3, user_list: users))
56
56
  result = client.users.find_all(:type=>'users', :per_page => 2, :page => 30).map {|user| user.email }
57
57
  result.must_equal %W()
58
58
  end
@@ -62,7 +62,7 @@ describe Intercom::ClientCollectionProxy do
62
62
  time_increment=1000
63
63
  users = [test_user_dates(email="user1@example.com", created_at=test_date), test_user_dates(email="user2@example.com", created_at=test_date-time_increment),
64
64
  test_user_dates(email="user3@example.com", created_at=test_date-2*time_increment), test_user_dates(email="user4@example.com", created_at=test_date-3*time_increment)]
65
- client.expects(:get).with("/users", {:type=>'users', :per_page => 4, :page => 5, :order => "asc", :sort => "created_at"}).returns(users_pagination(true, per_page=4, page=5, total_pages=6, total_count=30, user_list=users))
65
+ client.expects(:get).with("/users", {:type=>'users', :per_page => 4, :page => 5, :order => "asc", :sort => "created_at"}).returns(users_pagination(include_next_link: true, per_page: 4, page: 5, total_pages: 6, total_count: 30, user_list: users))
66
66
  result = client.users.find_all(:type=>'users', :per_page => 4, :page => 5, :order => "asc", :sort => "created_at").map(&:email)
67
67
  result.must_equal %W(user1@example.com user2@example.com user3@example.com user4@example.com)
68
68
  end
@@ -72,7 +72,7 @@ describe Intercom::ClientCollectionProxy do
72
72
  time_increment=1000
73
73
  users = [test_user_dates(email="user4@example.com", created_at=3*test_date), test_user_dates(email="user3@example.com", created_at=test_date-2*time_increment),
74
74
  test_user_dates(email="user2@example.com", created_at=test_date-time_increment), test_user_dates(email="user1@example.com", created_at=test_date)]
75
- client.expects(:get).with("/users", {:type=>'users', :per_page => 4, :page => 5, :order => "desc", :sort => "created_at"}).returns(users_pagination(true, per_page=4, page=5, total_pages=6, total_count=30, user_list=users))
75
+ client.expects(:get).with("/users", {:type=>'users', :per_page => 4, :page => 5, :order => "desc", :sort => "created_at"}).returns(users_pagination(include_next_link: true, per_page: 4, page: 5, total_pages: 6, total_count: 30, user_list: users))
76
76
  result = client.users.find_all(:type=>'users', :per_page => 4, :page => 5, :order => "desc", :sort => "created_at").map {|user| user.email }
77
77
  result.must_equal %W(user4@example.com user3@example.com user2@example.com user1@example.com)
78
78
  end
@@ -61,6 +61,17 @@ describe 'Intercom::Request' do
61
61
  req.execute(target_base_url=uri, username: "ted", secret: "")
62
62
  end
63
63
 
64
+ it 'should not sleep if rate limit reset time has passed' do
65
+ # Use webmock to mock the HTTP request
66
+ stub_request(:any, uri).\
67
+ to_return(status: [429, "Too Many Requests"], headers: { 'X-RateLimit-Reset' => Time.parse("February 25 2010").utc }).\
68
+ then.to_return(status: [200, "OK"])
69
+ req = Intercom::Request.get(uri, "")
70
+ req.handle_rate_limit=true
71
+ req.expects(:sleep).never.with(any_parameters)
72
+ req.execute(target_base_url=uri, username: "ted", secret: "")
73
+ end
74
+
64
75
  end
65
76
 
66
77
 
@@ -239,7 +239,7 @@ describe "Intercom::User" do
239
239
  it "allows setting dates to nil without converting them to 0" do
240
240
  client.expects(:post).with("/users", {"email" => "jo@example.com", 'custom_attributes' => {}, "remote_created_at" => nil}).returns({"email" => "jo@example.com"})
241
241
  user = client.users.create("email" => "jo@example.com", "remote_created_at" => nil)
242
- user.remote_created_at.must_equal nil
242
+ assert_nil user.remote_created_at
243
243
  end
244
244
 
245
245
  it "sets/gets rw keys" do
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: 3.5.23
4
+ version: 3.5.24
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: 2017-12-04 00:00:00.000000000 Z
18
+ date: 2018-05-10 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: minitest
@@ -131,6 +131,7 @@ executables: []
131
131
  extensions: []
132
132
  extra_rdoc_files: []
133
133
  files:
134
+ - ".circleci/config.yml"
134
135
  - ".github/ISSUE_TEMPLATE.md"
135
136
  - ".gitignore"
136
137
  - ".travis.yml"
@@ -140,7 +141,6 @@ files:
140
141
  - RELEASING.md
141
142
  - Rakefile
142
143
  - changes.txt
143
- - circle.yml
144
144
  - intercom.gemspec
145
145
  - lib/data/cacert.pem
146
146
  - lib/ext/sliceable_hash.rb
data/circle.yml DELETED
@@ -1,6 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.1.0
4
- test:
5
- post:
6
- - bundle exec rake