Skip to content

Commit c32fe00

Browse files
authored
Merge pull request #597 from intercom/sp/bug_fix
To fix events summary endpoint response
2 parents 0bf8bbe + a6a2460 commit c32fe00

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,14 @@ intercom.events.create(
273273

274274
# Retrieve event list for user with id:'123abc'
275275
intercom.events.find_all("type" => "user", "intercom_user_id" => "123abc")
276+
277+
# Retrieve the event summary for user with id: 'abc' this will return an event object with the following characteristics:
278+
# name - name of the event
279+
# first - time when event first occured.
280+
# last - time when event last occured
281+
# count - number of times the event occured
282+
# description - description of the event
283+
events = intercom.events.find_all(type: 'user',intercom_user_id: 'abc',summary: true)
276284
```
277285

278286
Metadata Objects support a few simple types that Intercom can present on your behalf
@@ -350,6 +358,8 @@ intercom.segments.all.each {|segment| puts "id: #{segment.id} name: #{segment.na
350358
# Iterate over all conversations for your app
351359
intercom.conversations.all.each { |convo| ... }
352360

361+
# The below method of finding conversations by using the find_all method work only for API versions 2.5 and below
362+
353363
# FINDING CONVERSATIONS FOR AN ADMIN
354364
# Iterate over all conversations (open and closed) assigned to an admin
355365
intercom.conversations.find_all(type: 'admin', id: '7').each {|convo| ... }

lib/intercom/base_collection_proxy.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ def deserialize_response_hash(response_hash, block)
4545
Utils.entity_key_from_type(top_level_type)
4646
end
4747
response_hash[top_level_entity_key].each do |object_json|
48-
block.call Lib::TypedJsonDeserializer.new(object_json, @client).deserialize
48+
if top_level_type == 'event.summary'
49+
block.call Lib::TypedJsonDeserializer.new(object_json, @client, top_level_type).deserialize
50+
else
51+
block.call Lib::TypedJsonDeserializer.new(object_json, @client).deserialize
52+
end
4953
end
5054
end
5155

lib/intercom/lib/typed_json_deserializer.rb

+8-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ module Lib
99
class TypedJsonDeserializer
1010
attr_reader :json
1111

12-
def initialize(json, client)
12+
def initialize(json, client, type = nil)
1313
@json = json
1414
@client = client
15+
@type = type
1516
end
1617

1718
def deserialize
@@ -27,7 +28,7 @@ def deserialize
2728
private
2829

2930
def blank_object_type?(object_type)
30-
object_type.nil? || object_type == ''
31+
object_type.nil? || object_type == '' && @type.nil?
3132
end
3233

3334
def list_object_type?(object_type)
@@ -48,7 +49,11 @@ def deserialize_object(object_json)
4849
end
4950

5051
def object_type
51-
@object_type ||= json['type']
52+
if !@type.nil?
53+
@object_type = @type
54+
else
55+
@object_type ||= json['type']
56+
end
5257
end
5358

5459
def object_entity_key

lib/intercom/utils.rb

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def entity_key_from_type(type)
6969

7070
is_list = type.split('.')[1] == 'list'
7171
entity_name = type.split('.')[0]
72+
return Utils.pluralize(entity_name) if entity_name == 'event'
7273
is_list ? Utils.pluralize(entity_name) : entity_name
7374
end
7475
end

spec/unit/intercom/event_spec.rb

+7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@
2222
_(event_names).must_equal %W(invited-friend)
2323
end
2424

25+
it "able to fetch event summary" do
26+
client.expects(:get).with("/events", type: 'user', email: '[email protected]', summary: true).returns(page_of_events(false))
27+
event_names = []
28+
client.events.find_all(type: 'user', email: '[email protected]',summary: true).each { |event| event_names << event.event_name }
29+
_(event_names).must_equal %W(invited-friend)
30+
end
31+
2532
it "keeps iterating if next link" do
2633
client.expects(:get).with("/events", type: 'user', email: '[email protected]').returns(page_of_events(true))
2734
client.expects(:get).with("https://api.intercom.io/events?type=user&intercom_user_id=55a3b&before=144474756550", {}).returns(page_of_events(false))

0 commit comments

Comments
 (0)