intercom 3.5.10 → 4.1.2

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.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +35 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +5 -0
  4. data/Gemfile +1 -4
  5. data/README.md +418 -216
  6. data/RELEASING.md +9 -0
  7. data/Rakefile +1 -1
  8. data/changes.txt +141 -0
  9. data/intercom.gemspec +1 -2
  10. data/lib/intercom.rb +34 -19
  11. data/lib/intercom/api_operations/archive.rb +16 -0
  12. data/lib/intercom/api_operations/delete.rb +4 -1
  13. data/lib/intercom/api_operations/find.rb +5 -2
  14. data/lib/intercom/api_operations/find_all.rb +4 -3
  15. data/lib/intercom/api_operations/list.rb +4 -1
  16. data/lib/intercom/api_operations/load.rb +4 -2
  17. data/lib/intercom/api_operations/nested_resource.rb +70 -0
  18. data/lib/intercom/api_operations/request_hard_delete.rb +12 -0
  19. data/lib/intercom/api_operations/save.rb +6 -4
  20. data/lib/intercom/api_operations/scroll.rb +4 -5
  21. data/lib/intercom/api_operations/search.rb +18 -0
  22. data/lib/intercom/article.rb +7 -0
  23. data/lib/intercom/base_collection_proxy.rb +72 -0
  24. data/lib/intercom/client.rb +66 -18
  25. data/lib/intercom/client_collection_proxy.rb +17 -39
  26. data/lib/intercom/collection.rb +7 -0
  27. data/lib/intercom/company.rb +8 -0
  28. data/lib/intercom/contact.rb +22 -3
  29. data/lib/intercom/conversation.rb +5 -0
  30. data/lib/intercom/data_attribute.rb +7 -0
  31. data/lib/intercom/deprecated_leads_collection_proxy.rb +22 -0
  32. data/lib/intercom/deprecated_resources.rb +13 -0
  33. data/lib/intercom/errors.rb +44 -4
  34. data/lib/intercom/extended_api_operations/segments.rb +3 -1
  35. data/lib/intercom/extended_api_operations/tags.rb +3 -1
  36. data/lib/intercom/lead.rb +21 -0
  37. data/lib/intercom/lib/typed_json_deserializer.rb +42 -37
  38. data/lib/intercom/note.rb +4 -0
  39. data/lib/intercom/request.rb +162 -95
  40. data/lib/intercom/scroll_collection_proxy.rb +38 -42
  41. data/lib/intercom/search_collection_proxy.rb +47 -0
  42. data/lib/intercom/section.rb +23 -0
  43. data/lib/intercom/segment.rb +4 -0
  44. data/lib/intercom/service/article.rb +20 -0
  45. data/lib/intercom/service/base_service.rb +13 -0
  46. data/lib/intercom/service/collection.rb +24 -0
  47. data/lib/intercom/service/company.rb +4 -2
  48. data/lib/intercom/service/contact.rb +29 -6
  49. data/lib/intercom/service/conversation.rb +23 -2
  50. data/lib/intercom/service/data_attribute.rb +20 -0
  51. data/lib/intercom/service/event.rb +12 -0
  52. data/lib/intercom/service/lead.rb +41 -0
  53. data/lib/intercom/service/note.rb +4 -8
  54. data/lib/intercom/service/section.rb +7 -0
  55. data/lib/intercom/service/tag.rb +8 -8
  56. data/lib/intercom/service/team.rb +17 -0
  57. data/lib/intercom/service/user.rb +4 -2
  58. data/lib/intercom/service/visitor.rb +15 -6
  59. data/lib/intercom/tag.rb +4 -0
  60. data/lib/intercom/team.rb +7 -0
  61. data/lib/intercom/traits/api_resource.rb +48 -27
  62. data/lib/intercom/traits/dirty_tracking.rb +8 -1
  63. data/lib/intercom/user.rb +12 -3
  64. data/lib/intercom/utils.rb +13 -2
  65. data/lib/intercom/version.rb +1 -1
  66. data/lib/intercom/visitor.rb +0 -2
  67. data/spec/spec_helper.rb +881 -436
  68. data/spec/unit/intercom/admin_spec.rb +2 -2
  69. data/spec/unit/intercom/article_spec.rb +40 -0
  70. data/spec/unit/intercom/base_collection_proxy_spec.rb +30 -0
  71. data/spec/unit/intercom/client_collection_proxy_spec.rb +41 -41
  72. data/spec/unit/intercom/client_spec.rb +76 -9
  73. data/spec/unit/intercom/collection_spec.rb +32 -0
  74. data/spec/unit/intercom/company_spec.rb +29 -21
  75. data/spec/unit/intercom/contact_spec.rb +365 -29
  76. data/spec/unit/intercom/conversation_spec.rb +70 -7
  77. data/spec/unit/intercom/count_spec.rb +4 -4
  78. data/spec/unit/intercom/data_attribute_spec.rb +40 -0
  79. data/spec/unit/intercom/deprecated_leads_collection_proxy_spec.rb +17 -0
  80. data/spec/unit/intercom/event_spec.rb +25 -8
  81. data/spec/unit/intercom/job_spec.rb +24 -24
  82. data/spec/unit/intercom/lead_spec.rb +57 -0
  83. data/spec/unit/intercom/lib/flat_store_spec.rb +22 -20
  84. data/spec/unit/intercom/message_spec.rb +1 -1
  85. data/spec/unit/intercom/note_spec.rb +4 -10
  86. data/spec/unit/intercom/request_spec.rb +150 -9
  87. data/spec/unit/intercom/scroll_collection_proxy_spec.rb +40 -39
  88. data/spec/unit/intercom/search_collection_proxy_spec.rb +60 -0
  89. data/spec/unit/intercom/section_spec.rb +32 -0
  90. data/spec/unit/intercom/segment_spec.rb +2 -2
  91. data/spec/unit/intercom/subscription_spec.rb +5 -6
  92. data/spec/unit/intercom/tag_spec.rb +22 -14
  93. data/spec/unit/intercom/team_spec.rb +21 -0
  94. data/spec/unit/intercom/traits/api_resource_spec.rb +129 -47
  95. data/spec/unit/intercom/user_spec.rb +227 -217
  96. data/spec/unit/intercom/visitor_spec.rb +49 -0
  97. data/spec/unit/intercom_spec.rb +5 -3
  98. metadata +63 -26
  99. data/.travis.yml +0 -6
  100. data/lib/intercom/extended_api_operations/users.rb +0 -16
  101. data/spec/unit/intercom/visitors_spec.rb +0 -61
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Intercom::Visitor' do
4
+ let (:client) { Intercom::Client.new(token: 'token') }
5
+
6
+ it 'can update a visitor with an id' do
7
+ visitor = Intercom::Visitor.new(:id => 'de45ae78gae1289cb')
8
+ client.expects(:put).with('/visitors/de45ae78gae1289cb', 'custom_attributes' => {})
9
+ client.visitors.save(visitor)
10
+ end
11
+
12
+ it 'can get a visitor' do
13
+ visitor = Intercom::Visitor.new(:id => 'de45ae78gae1289cb')
14
+ client.expects(:get).with('/visitors/de45ae78gae1289cb', {}).returns(test_visitor)
15
+ client.visitors.find(id: visitor.id)
16
+ end
17
+
18
+ describe 'converting' do
19
+ let(:visitor) { Intercom::Visitor.from_api(user_id: 'visitor_id') }
20
+ let(:user) { Intercom::Contact.from_api(id: 'user_id', role: 'user') }
21
+
22
+ it 'visitor to user' do
23
+ client.expects(:post).with(
24
+ '/visitors/convert',
25
+ visitor: { user_id: visitor.user_id },
26
+ user: { 'id' => user.id },
27
+ type: 'user'
28
+ ).returns(test_contact)
29
+
30
+ client.visitors.convert(visitor, user)
31
+ end
32
+
33
+ it 'visitor to lead' do
34
+ client.expects(:post).with(
35
+ '/visitors/convert',
36
+ visitor: { user_id: visitor.user_id },
37
+ type: 'lead'
38
+ ).returns(test_contact(role: 'lead'))
39
+
40
+ client.visitors.convert(visitor)
41
+ end
42
+ end
43
+
44
+ it 'deletes a visitor' do
45
+ visitor = Intercom::Visitor.new('id' => '1')
46
+ client.expects(:delete).with('/visitors/1', {}).returns(visitor)
47
+ client.visitors.delete(visitor)
48
+ end
49
+ end
@@ -1,7 +1,9 @@
1
- require "spec_helper"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
2
4
 
3
5
  describe Intercom do
4
- it "has a version number" do
5
- Intercom::VERSION.must_match(/\d+\.\d+\.\d+/)
6
+ it 'has a version number' do
7
+ _(Intercom::VERSION).must_match(/\d+\.\d+\.\d+/)
6
8
  end
7
9
  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: 3.5.10
4
+ version: 4.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben McRedmond
@@ -12,10 +12,10 @@ authors:
12
12
  - Declan McGrath
13
13
  - Jamie Osler
14
14
  - Bob Long
15
- autorequire:
15
+ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2017-01-10 00:00:00.000000000 Z
18
+ date: 2020-10-30 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: minitest
@@ -31,6 +31,20 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '5.4'
34
+ - !ruby/object:Gem::Dependency
35
+ name: m
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.5.0
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.5.0
34
48
  - !ruby/object:Gem::Dependency
35
49
  name: rake
36
50
  requirement: !ruby/object:Gem::Requirement
@@ -87,20 +101,6 @@ dependencies:
87
101
  - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
- - !ruby/object:Gem::Dependency
91
- name: json
92
- requirement: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '1.8'
97
- type: :runtime
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '1.8'
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: gem-release
106
106
  requirement: !ruby/object:Gem::Requirement
@@ -131,12 +131,14 @@ executables: []
131
131
  extensions: []
132
132
  extra_rdoc_files: []
133
133
  files:
134
+ - ".circleci/config.yml"
134
135
  - ".github/ISSUE_TEMPLATE.md"
136
+ - ".github/PULL_REQUEST_TEMPLATE.md"
135
137
  - ".gitignore"
136
- - ".travis.yml"
137
138
  - Gemfile
138
139
  - MIT-LICENSE
139
140
  - README.md
141
+ - RELEASING.md
140
142
  - Rakefile
141
143
  - changes.txt
142
144
  - intercom.gemspec
@@ -144,6 +146,7 @@ files:
144
146
  - lib/ext/sliceable_hash.rb
145
147
  - lib/intercom.rb
146
148
  - lib/intercom/admin.rb
149
+ - lib/intercom/api_operations/archive.rb
147
150
  - lib/intercom/api_operations/bulk/load_error_feed.rb
148
151
  - lib/intercom/api_operations/bulk/submit.rb
149
152
  - lib/intercom/api_operations/convert.rb
@@ -152,20 +155,29 @@ files:
152
155
  - lib/intercom/api_operations/find_all.rb
153
156
  - lib/intercom/api_operations/list.rb
154
157
  - lib/intercom/api_operations/load.rb
158
+ - lib/intercom/api_operations/nested_resource.rb
159
+ - lib/intercom/api_operations/request_hard_delete.rb
155
160
  - lib/intercom/api_operations/save.rb
156
161
  - lib/intercom/api_operations/scroll.rb
162
+ - lib/intercom/api_operations/search.rb
163
+ - lib/intercom/article.rb
164
+ - lib/intercom/base_collection_proxy.rb
157
165
  - lib/intercom/client.rb
158
166
  - lib/intercom/client_collection_proxy.rb
167
+ - lib/intercom/collection.rb
159
168
  - lib/intercom/company.rb
160
169
  - lib/intercom/contact.rb
161
170
  - lib/intercom/conversation.rb
162
171
  - lib/intercom/count.rb
172
+ - lib/intercom/data_attribute.rb
173
+ - lib/intercom/deprecated_leads_collection_proxy.rb
174
+ - lib/intercom/deprecated_resources.rb
163
175
  - lib/intercom/errors.rb
164
176
  - lib/intercom/event.rb
165
177
  - lib/intercom/extended_api_operations/segments.rb
166
178
  - lib/intercom/extended_api_operations/tags.rb
167
- - lib/intercom/extended_api_operations/users.rb
168
179
  - lib/intercom/job.rb
180
+ - lib/intercom/lead.rb
169
181
  - lib/intercom/lib/dynamic_accessors.rb
170
182
  - lib/intercom/lib/dynamic_accessors_on_method_missing.rb
171
183
  - lib/intercom/lib/flat_store.rb
@@ -175,24 +187,33 @@ files:
175
187
  - lib/intercom/options.rb
176
188
  - lib/intercom/request.rb
177
189
  - lib/intercom/scroll_collection_proxy.rb
190
+ - lib/intercom/search_collection_proxy.rb
191
+ - lib/intercom/section.rb
178
192
  - lib/intercom/segment.rb
179
193
  - lib/intercom/service/admin.rb
194
+ - lib/intercom/service/article.rb
180
195
  - lib/intercom/service/base_service.rb
196
+ - lib/intercom/service/collection.rb
181
197
  - lib/intercom/service/company.rb
182
198
  - lib/intercom/service/contact.rb
183
199
  - lib/intercom/service/conversation.rb
184
200
  - lib/intercom/service/count.rb
201
+ - lib/intercom/service/data_attribute.rb
185
202
  - lib/intercom/service/event.rb
186
203
  - lib/intercom/service/job.rb
204
+ - lib/intercom/service/lead.rb
187
205
  - lib/intercom/service/message.rb
188
206
  - lib/intercom/service/note.rb
207
+ - lib/intercom/service/section.rb
189
208
  - lib/intercom/service/segment.rb
190
209
  - lib/intercom/service/subscription.rb
191
210
  - lib/intercom/service/tag.rb
211
+ - lib/intercom/service/team.rb
192
212
  - lib/intercom/service/user.rb
193
213
  - lib/intercom/service/visitor.rb
194
214
  - lib/intercom/subscription.rb
195
215
  - lib/intercom/tag.rb
216
+ - lib/intercom/team.rb
196
217
  - lib/intercom/traits/api_resource.rb
197
218
  - lib/intercom/traits/dirty_tracking.rb
198
219
  - lib/intercom/traits/incrementable_attributes.rb
@@ -202,31 +223,40 @@ files:
202
223
  - lib/intercom/visitor.rb
203
224
  - spec/spec_helper.rb
204
225
  - spec/unit/intercom/admin_spec.rb
226
+ - spec/unit/intercom/article_spec.rb
227
+ - spec/unit/intercom/base_collection_proxy_spec.rb
205
228
  - spec/unit/intercom/client_collection_proxy_spec.rb
206
229
  - spec/unit/intercom/client_spec.rb
230
+ - spec/unit/intercom/collection_spec.rb
207
231
  - spec/unit/intercom/company_spec.rb
208
232
  - spec/unit/intercom/contact_spec.rb
209
233
  - spec/unit/intercom/conversation_spec.rb
210
234
  - spec/unit/intercom/count_spec.rb
235
+ - spec/unit/intercom/data_attribute_spec.rb
236
+ - spec/unit/intercom/deprecated_leads_collection_proxy_spec.rb
211
237
  - spec/unit/intercom/event_spec.rb
212
238
  - spec/unit/intercom/job_spec.rb
239
+ - spec/unit/intercom/lead_spec.rb
213
240
  - spec/unit/intercom/lib/flat_store_spec.rb
214
241
  - spec/unit/intercom/message_spec.rb
215
242
  - spec/unit/intercom/note_spec.rb
216
243
  - spec/unit/intercom/request_spec.rb
217
244
  - spec/unit/intercom/scroll_collection_proxy_spec.rb
245
+ - spec/unit/intercom/search_collection_proxy_spec.rb
246
+ - spec/unit/intercom/section_spec.rb
218
247
  - spec/unit/intercom/segment_spec.rb
219
248
  - spec/unit/intercom/subscription_spec.rb
220
249
  - spec/unit/intercom/tag_spec.rb
250
+ - spec/unit/intercom/team_spec.rb
221
251
  - spec/unit/intercom/traits/api_resource_spec.rb
222
252
  - spec/unit/intercom/user_spec.rb
223
- - spec/unit/intercom/visitors_spec.rb
253
+ - spec/unit/intercom/visitor_spec.rb
224
254
  - spec/unit/intercom_spec.rb
225
255
  homepage: https://www.intercom.io
226
256
  licenses:
227
257
  - MIT
228
258
  metadata: {}
229
- post_install_message:
259
+ post_install_message:
230
260
  rdoc_options: []
231
261
  require_paths:
232
262
  - lib
@@ -241,32 +271,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
271
  - !ruby/object:Gem::Version
242
272
  version: '0'
243
273
  requirements: []
244
- rubyforge_project: intercom
245
- rubygems_version: 2.4.8
246
- signing_key:
274
+ rubygems_version: 3.0.3
275
+ signing_key:
247
276
  specification_version: 4
248
277
  summary: Ruby bindings for the Intercom API
249
278
  test_files:
250
279
  - spec/spec_helper.rb
251
280
  - spec/unit/intercom/admin_spec.rb
281
+ - spec/unit/intercom/article_spec.rb
282
+ - spec/unit/intercom/base_collection_proxy_spec.rb
252
283
  - spec/unit/intercom/client_collection_proxy_spec.rb
253
284
  - spec/unit/intercom/client_spec.rb
285
+ - spec/unit/intercom/collection_spec.rb
254
286
  - spec/unit/intercom/company_spec.rb
255
287
  - spec/unit/intercom/contact_spec.rb
256
288
  - spec/unit/intercom/conversation_spec.rb
257
289
  - spec/unit/intercom/count_spec.rb
290
+ - spec/unit/intercom/data_attribute_spec.rb
291
+ - spec/unit/intercom/deprecated_leads_collection_proxy_spec.rb
258
292
  - spec/unit/intercom/event_spec.rb
259
293
  - spec/unit/intercom/job_spec.rb
294
+ - spec/unit/intercom/lead_spec.rb
260
295
  - spec/unit/intercom/lib/flat_store_spec.rb
261
296
  - spec/unit/intercom/message_spec.rb
262
297
  - spec/unit/intercom/note_spec.rb
263
298
  - spec/unit/intercom/request_spec.rb
264
299
  - spec/unit/intercom/scroll_collection_proxy_spec.rb
300
+ - spec/unit/intercom/search_collection_proxy_spec.rb
301
+ - spec/unit/intercom/section_spec.rb
265
302
  - spec/unit/intercom/segment_spec.rb
266
303
  - spec/unit/intercom/subscription_spec.rb
267
304
  - spec/unit/intercom/tag_spec.rb
305
+ - spec/unit/intercom/team_spec.rb
268
306
  - spec/unit/intercom/traits/api_resource_spec.rb
269
307
  - spec/unit/intercom/user_spec.rb
270
- - spec/unit/intercom/visitors_spec.rb
308
+ - spec/unit/intercom/visitor_spec.rb
271
309
  - spec/unit/intercom_spec.rb
272
- has_rdoc:
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- rvm:
4
- - 2.1.0
5
- - 2.2.0
6
- - 2.3.3
@@ -1,16 +0,0 @@
1
- require 'intercom/client_collection_proxy'
2
- require 'intercom/utils'
3
-
4
- module Intercom
5
- module ExtendedApiOperations
6
- module Users
7
- def users(id)
8
- collection_name = Utils.resource_class_to_collection_name(collection_class)
9
- finder_details = {}
10
- finder_details[:url] = "/#{collection_name}/#{id}/users"
11
- finder_details[:params] = {}
12
- ClientCollectionProxy.new("users", finder_details: finder_details, client: @client)
13
- end
14
- end
15
- end
16
- end
@@ -1,61 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Intercom::Visitors" do
4
- let (:client) { Intercom::Client.new(app_id: 'app_id', api_key: 'api_key') }
5
-
6
- it 'should be listable' do
7
- proxy = client.visitors.all
8
- proxy.resource_name.must_equal 'visitors'
9
- proxy.finder_url.must_equal '/visitors'
10
- proxy.resource_class.must_equal Intercom::Visitor
11
- end
12
-
13
- it 'can update a visitor with an id' do
14
- visitor = Intercom::Visitor.new(:id => "de45ae78gae1289cb")
15
- client.expects(:put).with("/visitors/de45ae78gae1289cb", {'custom_attributes' => {}})
16
- client.visitors.save(visitor)
17
- end
18
-
19
- describe 'converting' do
20
- let(:visitor) { Intercom::Visitor.from_api(user_id: 'visitor_id') }
21
- let(:user) { Intercom::User.from_api(id: 'user_id') }
22
-
23
- it 'visitor to user' do
24
- client.expects(:post).with(
25
- "/visitors/convert",
26
- {
27
- visitor: { user_id: visitor.user_id },
28
- user: { 'id' => user.id },
29
- type:'user'
30
- }
31
- ).returns(test_user)
32
-
33
- client.visitors.convert(visitor, user)
34
- end
35
-
36
- it 'visitor to lead' do
37
- client.expects(:post).with(
38
- "/visitors/convert",
39
- {
40
- visitor: { user_id: visitor.user_id },
41
- type:'lead'
42
- }
43
- ).returns(test_user)
44
-
45
- client.visitors.convert(visitor)
46
- end
47
- end
48
-
49
- it "returns a ClientCollectionProxy for all without making any requests" do
50
- client.expects(:execute_request).never
51
- all = client.visitors.all
52
- all.must_be_instance_of(Intercom::ClientCollectionProxy)
53
- end
54
-
55
- it "deletes a visitor" do
56
- visitor = Intercom::Visitor.new("id" => "1")
57
- client.expects(:delete).with("/visitors/1", {}).returns(visitor)
58
- client.visitors.delete(visitor)
59
- end
60
-
61
- end