intercom 3.5.3 → 3.5.4
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 +4 -4
- data/README.md +1 -1
- data/changes.txt +3 -0
- data/lib/intercom/api_operations/scroll.rb +16 -0
- data/lib/intercom/scroll_collection_proxy.rb +83 -0
- data/lib/intercom/service/user.rb +2 -0
- data/lib/intercom/version.rb +1 -1
- data/spec/spec_helper.rb +8 -0
- data/spec/unit/intercom/scroll_collection_proxy_spec.rb +56 -0
- 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: 65f8ee35be573105827b5e3b6241d07154e0a075
|
4
|
+
data.tar.gz: 5a61122d948cd69ea4d2b6ddade7ab6a614de8a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74f22fb60b9c7ac2b65eaa1921be6cb44a18c1862254ba961f3f6bb57187cfbf56f56c555e241ac7681a6cd79ef28f11329b5c9dc5c0a49368710bcfaad85df9
|
7
|
+
data.tar.gz: 4561b5bdf72b92be0a91eebd9ad049239d5682b5b37b4f3f93e41a3cd8a5faa3a861a2d9f51a3ecdb1924e24cedadcc2cf756ab69553eb3570deafa244257141
|
data/README.md
CHANGED
data/changes.txt
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'intercom/scroll_collection_proxy'
|
2
|
+
|
3
|
+
module Intercom
|
4
|
+
module ApiOperations
|
5
|
+
module Scroll
|
6
|
+
|
7
|
+
def scroll()
|
8
|
+
collection_name = Utils.resource_class_to_collection_name(collection_class)
|
9
|
+
finder_details = {}
|
10
|
+
finder_details[:url] = "/#{collection_name}"
|
11
|
+
ScrollCollectionProxy.new(collection_name, finder_details: finder_details, client: @client)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "intercom/utils"
|
2
|
+
require "ext/sliceable_hash"
|
3
|
+
|
4
|
+
module Intercom
|
5
|
+
class ScrollCollectionProxy
|
6
|
+
|
7
|
+
attr_reader :resource_name, :scroll_url, :resource_class, :scroll_param, :records
|
8
|
+
|
9
|
+
def initialize(resource_name, finder_details: {}, client:)
|
10
|
+
@resource_name = resource_name
|
11
|
+
@resource_class = Utils.constantize_resource_name(resource_name)
|
12
|
+
@scroll_url = (finder_details[:url] || "/#{@resource_name}") + '/scroll'
|
13
|
+
@client = client
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def next(scroll_parameter=nil)
|
18
|
+
@records = []
|
19
|
+
if not scroll_parameter
|
20
|
+
#First time so do initial get without scroll_param
|
21
|
+
response_hash = @client.get(@scroll_url, '')
|
22
|
+
else
|
23
|
+
#Not first call so use get next page
|
24
|
+
response_hash = @client.get(@scroll_url, scroll_param: scroll_parameter)
|
25
|
+
end
|
26
|
+
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response_hash
|
27
|
+
@scroll_param = extract_scroll_param(response_hash)
|
28
|
+
top_level_entity_key = deserialize_response_hash(response_hash)
|
29
|
+
response_hash[top_level_entity_key] = response_hash[top_level_entity_key].map do |object_json|
|
30
|
+
Lib::TypedJsonDeserializer.new(object_json).deserialize
|
31
|
+
end
|
32
|
+
@records = response_hash[@resource_name]
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def each(&block)
|
37
|
+
scroll_param = nil
|
38
|
+
loop do
|
39
|
+
if not scroll_param
|
40
|
+
response_hash = @client.get(@scroll_url, '')
|
41
|
+
else
|
42
|
+
response_hash = @client.get(@scroll_url, scroll_param: scroll_param)
|
43
|
+
end
|
44
|
+
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response_hash
|
45
|
+
response_hash[deserialize_response_hash(response_hash)].each do |object_json|
|
46
|
+
block.call Lib::TypedJsonDeserializer.new(object_json).deserialize
|
47
|
+
end
|
48
|
+
scroll_param = extract_scroll_param(response_hash)
|
49
|
+
break if not records_present?(response_hash)
|
50
|
+
end
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def [](target_index)
|
55
|
+
self.each_with_index do |item, index|
|
56
|
+
return item if index == target_index
|
57
|
+
end
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
|
61
|
+
include Enumerable
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def deserialize_response_hash(response_hash)
|
66
|
+
top_level_type = response_hash.delete('type')
|
67
|
+
if resource_name == 'subscriptions'
|
68
|
+
top_level_entity_key = 'items'
|
69
|
+
else
|
70
|
+
top_level_entity_key = Utils.entity_key_from_type(top_level_type)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def records_present?(response_hash)
|
75
|
+
(response_hash[@resource_name].length > 0)
|
76
|
+
end
|
77
|
+
|
78
|
+
def extract_scroll_param(response_hash)
|
79
|
+
return nil unless records_present?(response_hash)
|
80
|
+
response_hash['scroll_param']
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'intercom/service/base_service'
|
2
2
|
require 'intercom/api_operations/load'
|
3
3
|
require 'intercom/api_operations/list'
|
4
|
+
require 'intercom/api_operations/scroll'
|
4
5
|
require 'intercom/api_operations/find'
|
5
6
|
require 'intercom/api_operations/find_all'
|
6
7
|
require 'intercom/api_operations/save'
|
@@ -14,6 +15,7 @@ module Intercom
|
|
14
15
|
class User < BaseService
|
15
16
|
include ApiOperations::Load
|
16
17
|
include ApiOperations::List
|
18
|
+
include ApiOperations::Scroll
|
17
19
|
include ApiOperations::Find
|
18
20
|
include ApiOperations::FindAll
|
19
21
|
include ApiOperations::Save
|
data/lib/intercom/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -216,6 +216,14 @@ def page_of_users(include_next_link= false)
|
|
216
216
|
}
|
217
217
|
end
|
218
218
|
|
219
|
+
def users_scroll(include_users= false)
|
220
|
+
{
|
221
|
+
"type"=>"user.list",
|
222
|
+
"scroll_param"=> ("da6bbbac-25f6-4f07-866b-b911082d7"),
|
223
|
+
"users"=> (include_users ? [test_user("user1@example.com"), test_user("user2@example.com"), test_user("user3@example.com")] : []),
|
224
|
+
}
|
225
|
+
end
|
226
|
+
|
219
227
|
def users_pagination(include_next_link=false, per_page=0, page=0, total_pages=0, total_count=0, user_list=[])
|
220
228
|
{
|
221
229
|
"type"=>"user.list",
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Intercom::ScrollCollectionProxy do
|
4
|
+
let (:client) { Intercom::Client.new(app_id: 'app_id', api_key: 'api_key') }
|
5
|
+
|
6
|
+
it "stops iterating if no users returned" do
|
7
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(false))
|
8
|
+
emails = []
|
9
|
+
client.users.scroll.each { |user| emails << user.email }
|
10
|
+
emails.must_equal %W()
|
11
|
+
end
|
12
|
+
|
13
|
+
it "keeps iterating if users returned" do
|
14
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(true))
|
15
|
+
client.expects(:get).with('/users/scroll', {:scroll_param => 'da6bbbac-25f6-4f07-866b-b911082d7'}).returns(users_scroll(false))
|
16
|
+
emails = []
|
17
|
+
client.users.scroll.each { |user| emails << user.email }
|
18
|
+
end
|
19
|
+
|
20
|
+
it "supports indexed array access" do
|
21
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(true))
|
22
|
+
client.users.scroll[0].email.must_equal 'user1@example.com'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "supports map" do
|
26
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(true))
|
27
|
+
client.expects(:get).with('/users/scroll', {:scroll_param => 'da6bbbac-25f6-4f07-866b-b911082d7'}).returns(users_scroll(false))
|
28
|
+
emails = client.users.scroll.map { |user| user.email }
|
29
|
+
emails.must_equal %W(user1@example.com user2@example.com user3@example.com)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns one page scroll" do
|
33
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(true))
|
34
|
+
scroll = client.users.scroll.next
|
35
|
+
emails = []
|
36
|
+
scroll.records.each {|usr| emails << usr.email}
|
37
|
+
emails.must_equal %W(user1@example.com user2@example.com user3@example.com)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "keeps iterating if called with scroll_param" do
|
41
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(true))
|
42
|
+
client.expects(:get).with('/users/scroll', {:scroll_param => 'da6bbbac-25f6-4f07-866b-b911082d7'}).returns(users_scroll(true))
|
43
|
+
scroll = client.users.scroll.next
|
44
|
+
scroll = client.users.scroll.next('da6bbbac-25f6-4f07-866b-b911082d7')
|
45
|
+
emails =[]
|
46
|
+
scroll.records.each {|usr| puts usr.email}
|
47
|
+
end
|
48
|
+
|
49
|
+
it "works with an empty list" do
|
50
|
+
client.expects(:get).with("/users/scroll", '').returns(users_scroll(false))
|
51
|
+
scroll = client.users.scroll.next
|
52
|
+
emails = []
|
53
|
+
scroll.records.each {|usr| emails << usr.email}
|
54
|
+
emails.must_equal %W()
|
55
|
+
end
|
56
|
+
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.
|
4
|
+
version: 3.5.4
|
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: 2016-08-
|
18
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: minitest
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/intercom/api_operations/list.rb
|
140
140
|
- lib/intercom/api_operations/load.rb
|
141
141
|
- lib/intercom/api_operations/save.rb
|
142
|
+
- lib/intercom/api_operations/scroll.rb
|
142
143
|
- lib/intercom/client.rb
|
143
144
|
- lib/intercom/client_collection_proxy.rb
|
144
145
|
- lib/intercom/company.rb
|
@@ -159,6 +160,7 @@ files:
|
|
159
160
|
- lib/intercom/note.rb
|
160
161
|
- lib/intercom/options.rb
|
161
162
|
- lib/intercom/request.rb
|
163
|
+
- lib/intercom/scroll_collection_proxy.rb
|
162
164
|
- lib/intercom/segment.rb
|
163
165
|
- lib/intercom/service/admin.rb
|
164
166
|
- lib/intercom/service/base_service.rb
|
@@ -198,6 +200,7 @@ files:
|
|
198
200
|
- spec/unit/intercom/message_spec.rb
|
199
201
|
- spec/unit/intercom/note_spec.rb
|
200
202
|
- spec/unit/intercom/request_spec.rb
|
203
|
+
- spec/unit/intercom/scroll_collection_proxy_spec.rb
|
201
204
|
- spec/unit/intercom/segment_spec.rb
|
202
205
|
- spec/unit/intercom/subscription_spec.rb
|
203
206
|
- spec/unit/intercom/tag_spec.rb
|
@@ -244,6 +247,7 @@ test_files:
|
|
244
247
|
- spec/unit/intercom/message_spec.rb
|
245
248
|
- spec/unit/intercom/note_spec.rb
|
246
249
|
- spec/unit/intercom/request_spec.rb
|
250
|
+
- spec/unit/intercom/scroll_collection_proxy_spec.rb
|
247
251
|
- spec/unit/intercom/segment_spec.rb
|
248
252
|
- spec/unit/intercom/subscription_spec.rb
|
249
253
|
- spec/unit/intercom/tag_spec.rb
|