Skip to content

Commit 3c9805b

Browse files
Merge pull request #69 from intercom/penguin/add_support_for_events
Added support for Events
2 parents 04ad1bb + 2dc20fc commit 3c9805b

File tree

10 files changed

+114
-63
lines changed

10 files changed

+114
-63
lines changed

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,54 @@ Intercom::Impression.create(:email => "[email protected]", :location => "/path/in/
8282
Intercom::Note.create(:email => "[email protected]", :body => "This is the text of the note")
8383
```
8484

85+
#### Events
86+
The simplest way to create an event is directly on the user
87+
```ruby
88+
user = Intercom::User.find_by_email("[email protected]")
89+
user.track_event("invited-friend")
90+
```
91+
92+
For more control create events through Intercom::Event
93+
```ruby
94+
Intercom::Event.create(:event_name => "invited-friend", :user => user)
95+
96+
# With an explicit event creation date
97+
Intercom::Event.create(:event_name => "invited-friend", :user => user, :created_at => 1391691571)
98+
99+
# With metadata
100+
Intercom::Event.create(:event_name => "invited-friend", :user => user,
101+
metadata => {
102+
:invitee_email => '[email protected]',
103+
:invite_code => 'ADDAFRIEND'
104+
}
105+
)
106+
```
107+
108+
Metadata Objects support a few simple types that Intercom can present on your behalf
109+
110+
```ruby
111+
Intercom::Event.create(:event_name => "placed-order", :user => current_user,
112+
metadata => {
113+
:order_date => Time.now.to_i,
114+
:stripe_invoice => 'inv_3434343434',
115+
:order_number => {
116+
:value => '3434-3434',
117+
:url => 'https://example.org/orders/3434-3434'
118+
},
119+
price: {
120+
:currency => 'usd',
121+
:amount => 2999
122+
}
123+
}
124+
)
125+
```
126+
127+
The metadata key values in the example are treated as follows-
128+
- order_date: a Date (key ends with '_date').
129+
- stripe_invoice: The identifier of the Stripe invoice (has a 'stripe_invoice' key)
130+
- order_number: a Rich Link (value contains 'url' and 'value' keys)
131+
- price: An Amount in US Dollars (value contains 'amount' and 'currency' keys)
132+
85133
### Errors
86134
```ruby
87135
Intercom::AuthenticationError

changes.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
0.3.0
2+
- Renamed UserEvents to Events
3+
14
0.2.0
25
- Add UserEvents.
36

intercom.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ require "intercom/version"
66
Gem::Specification.new do |spec|
77
spec.name = "intercom"
88
spec.version = Intercom::VERSION
9-
spec.authors = ["Ben McRedmond", "Ciaran Lee", "Darragh Curran", "Jeff Gardner", "Kyle Daigle"]
10-
9+
spec.authors = ["Ben McRedmond", "Ciaran Lee", "Darragh Curran", "Jeff Gardner", "Kyle Daigle", "Declan McGrath", "Jamie Osler"]
10+
1111
spec.homepage = "https://www.intercom.io"
1212
spec.summary = %q{Ruby bindings for the Intercom API}
1313
spec.description = %Q{Intercom (https://www.intercom.io) is a customer relationship management and messaging tool for web app owners. This library wraps the api provided by Intercom. See http://docs.intercom.io/api for more details. }

lib/intercom.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
require "intercom/note"
77
require "intercom/tag"
88
require "intercom/request"
9-
require "intercom/user_event"
9+
require "intercom/event"
1010
require "json"
1111

1212
##
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,46 @@
55
module Intercom
66

77
##
8-
# Represents a User Event
8+
# Represents an Event
99
#
10-
# A user event consists of an event_name and a user the event applies to. The user is identified via email or id.
10+
# An event consists of an event_name and a user the event applies to. The user is identified via email or id.
1111
# Additionally, a created timestamp is required.
1212
#
1313
# == Examples
1414
#
15-
# user_event = Intercom::UserEvent.create(:event_name => "post", :user => current_user, :created_at => Time.now)
15+
# event = Intercom::Event.create(:event_name => "post", :user => current_user, :created_at => Time.now)
1616
#
1717
# You can also create an user-event and save it like this:
18-
# user_event = Intercom::UserEvent.new
19-
# user_event.event_name = "publish-post"
20-
# user_event.user = current_user
21-
# user_event.created_at = Time.now
22-
# user_event.metadata = {
18+
# event = Intercom::Event.new
19+
# event.event_name = "publish-post"
20+
# event.user = current_user
21+
# event.created_at = Time.now
22+
# event.metadata = {
2323
# :title => 'Gravity Review',
2424
# :link => 'https://example.org/posts/22',
2525
# :comments => 'https://example.org/posts/22/comments'
2626
# }
27-
# user_event.save
27+
# event.save
2828
#
2929
# == Batch
3030
#
31-
# User events can be created in batches, and sent as one request. To do some, create user events
31+
# Events can be created in batches, and sent as one request. To do some, create events
3232
# without calling .create, as follows:
3333
#
34-
# user_event = Intercom::UserEvent.new
35-
# user_event.event_name = "publish-post"
36-
# user_event.user = current_user
34+
# event = Intercom::Event.new
35+
# event.event_name = "publish-post"
36+
# event.user = current_user
3737
#
3838
# Then pass them to the save_batch_events class method, along with an (optional) default user:
3939
#
40-
# Intercom::UserEvent.save_batch_events(events, default_user)
40+
# Intercom::Event.save_batch_events(events, default_user)
4141
#
4242
# Any events without a user will be assigned to the default_user.
4343
#
4444
# Note: if you do not supply a created time, the current time in UTC will be used. Events that have the same
4545
# user, name, and created time (to second granularity) may be treated as duplicates by the server.
4646

47-
class UserEvent
47+
class Event
4848
extend RequiresParameters
4949
include HashableObject
5050

@@ -56,24 +56,24 @@ def initialize(attributes={})
5656
end
5757

5858
##
59-
# Creates a new User Event using params and saves it
59+
# Creates a new Event using params and saves it
6060
# @see #save
6161
def self.create(params)
6262
params[:created_at] ||= Time.now
6363
requires_parameters(params, %W(event_name user created_at))
64-
UserEvent.new(params).save
64+
Event.new(params).save
6565
end
6666

6767
##
68-
# Save the User Event
68+
# Save the Event
6969
def save
7070
raise ArgumentError.new("Missing User") if user.nil?
71-
UserEvent.save_batch_events([self])
71+
Event.save_batch_events([self])
7272
self
7373
end
7474

7575
##
76-
# Save a list of User Events, with an optional base_user
76+
# Save a list of Events, with an optional base_user
7777
def self.save_batch_events(events, base_user=nil)
7878
hash = { :type => 'event.list', :data => []}
7979
hash[:user] = user_hash(base_user) if base_user
@@ -92,7 +92,7 @@ def self.post_to_intercom(hash)
9292
end
9393

9494
def user_hash
95-
UserEvent.user_hash(user)
95+
Event.user_hash(user)
9696
end
9797

9898
def event_hash

lib/intercom/user.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,13 +337,13 @@ def companies=(companies)
337337
end
338338

339339
##
340-
# Creates a UserEvent for the given User
340+
# Creates an Event for the given User
341341
# @param {Hash} options, keys for :created_at (Unix timestamp) and metadata
342-
def log_event(event_name, options={})
342+
def track_event(event_name, options={})
343343
attributes = {:event_name => event_name, :user => self}
344344
attributes[:created_at] = options[:created_at] unless options[:created_at].nil?
345345
attributes[:metadata] = options[:metadata] unless options[:metadata].nil?
346-
UserEvent.create(attributes)
346+
Event.create(attributes)
347347
end
348348

349349
protected

lib/intercom/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Intercom #:nodoc:
2-
VERSION = "0.2.3"
2+
VERSION = "0.3.0"
33
end

spec/integration/intercom_api_integration_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,35 +76,35 @@ def fixture(name)
7676
note.user.email.must_equal "[email protected]"
7777
end
7878

79-
it "should create a user event" do
79+
it "should create an event" do
8080
FakeWeb.register_uri(:get, %r(v1/users\?email=), :body => fixture('v1-user'))
8181
user = Intercom::User.find(:email => "[email protected]")
8282
FakeWeb.register_uri(:post, %r(/events), :status => ["202", "Created"])
83-
Intercom::UserEvent.create(:event_name => "signup", :created_at => 1391691571, :user => user).event_name.must_equal "signup"
83+
Intercom::Event.create(:event_name => "signup", :created_at => 1391691571, :user => user).event_name.must_equal "signup"
8484
end
8585

86-
it "should create batch user events" do
86+
it "should create batch events" do
8787
FakeWeb.register_uri(:get, %r(v1/users\?email=), :body => fixture('v1-user'))
8888
user = Intercom::User.find(:email => "[email protected]")
8989

90-
first_event = Intercom::UserEvent.new
90+
first_event = Intercom::Event.new
9191
first_event.event_name = "first event"
9292
first_event.created_at = Time.now
9393
first_event.user = user
9494

95-
second_event = Intercom::UserEvent.new
95+
second_event = Intercom::Event.new
9696
second_event.event_name = "second event"
9797
second_event.created_at = Time.now
9898

9999
FakeWeb.register_uri(:post, %r(/events), :status => ["202", "Created"])
100-
Intercom::UserEvent.save_batch_events([first_event, second_event], user)
100+
Intercom::Event.save_batch_events([first_event, second_event], user)
101101
end
102102

103-
it "should create a user event from a user" do
103+
it "should create an event from a user" do
104104
FakeWeb.register_uri(:get, %r(v1/users\?email=), :body => fixture('v1-user'))
105105
user = Intercom::User.find(:email => "[email protected]")
106106
FakeWeb.register_uri(:post, %r(/events), :status => ["202", "Created"])
107-
user.log_event("signup").event_name.must_equal "signup"
107+
user.track_event("signup").event_name.must_equal "signup"
108108
end
109109

110110
it "should failover to good endpoint when first one is un-reachable" do
@@ -131,4 +131,4 @@ def fixture(name)
131131
proc { Intercom::User.find(:email => "[email protected]")}.must_raise Intercom::BadGatewayError
132132

133133
end
134-
end
134+
end
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
require 'spec_helper'
22

3-
describe "Intercom::UserEvent" do
3+
describe "Intercom::Event" do
44

55
let (:user) {Intercom::User.new("email" => "[email protected]", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")}
66
let (:created_time) {Time.now - 300}
77

8-
it "creates a user event" do
8+
it "creates an event" do
99
Intercom.expects(:post).with("/events",
1010
{ :type => 'event.list',
1111
:data => [ {:event_name => "signup", :created => created_time.to_i, :type => 'event',
1212
:user => { :user_id => user.user_id},
1313
}]}).returns(:status => 200)
1414

15-
Intercom::UserEvent.create({ :event_name => "signup", :user => user, :created_at => created_time })
15+
Intercom::Event.create({ :event_name => "signup", :user => user, :created_at => created_time })
1616
end
1717

1818
it 'automatically adds a created time upon creation' do
@@ -21,22 +21,22 @@
2121
:data => [ {:event_name => "sale of item", :created => Time.now.to_i, :type => 'event', :user => { :user_id => user.user_id}
2222
}]}).returns(:status => 200)
2323

24-
Intercom::UserEvent.create({ :event_name => "sale of item", :user => user })
24+
Intercom::Event.create({ :event_name => "sale of item", :user => user })
2525
end
2626

27-
it "creates a user event with metadata" do
27+
it "creates an event with metadata" do
2828
Intercom.expects(:post).with("/events",
2929
{ :type => 'event.list',
3030
:data => [ {:event_name => "signup", :created => created_time.to_i, :type => 'event', :user => { :user_id => user.user_id}, :metadata => { :something => "here"}
3131
}]}).returns(:status => 200)
32-
Intercom::UserEvent.create({ :event_name => "signup", :user => user, :created_at => created_time, :metadata => { :something => "here"} })
32+
Intercom::Event.create({ :event_name => "signup", :user => user, :created_at => created_time, :metadata => { :something => "here"} })
3333
end
3434

3535
it 'fails when no user supplied' do
36-
user_event = Intercom::UserEvent.new
37-
user_event.event_name = "some event"
38-
user_event.created_at = Time.now
39-
proc { user_event.save }.must_raise ArgumentError, "Missing User"
36+
event = Intercom::Event.new
37+
event.event_name = "some event"
38+
event.created_at = Time.now
39+
proc { event.save }.must_raise ArgumentError, "Missing User"
4040
end
4141

4242
it 'uses the user.email if no user.id found' do
@@ -47,24 +47,24 @@
4747
:user => { :email => user2.email}
4848
}]}).returns(:status => 200)
4949

50-
Intercom::UserEvent.create({ :event_name => "signup", :user => user2, :created_at => created_time })
50+
Intercom::Event.create({ :event_name => "signup", :user => user2, :created_at => created_time })
5151
end
5252

5353
describe 'while batching events' do
5454

5555
let (:event1) do
56-
user_event = Intercom::UserEvent.new
57-
user_event.event_name = "first event"
58-
user_event.created_at = Time.now
59-
user_event.user = user
60-
user_event
56+
event = Intercom::Event.new
57+
event.event_name = "first event"
58+
event.created_at = Time.now
59+
event.user = user
60+
event
6161
end
6262

6363
let (:event2) do
64-
user_event = Intercom::UserEvent.new
65-
user_event.event_name = "second event"
66-
user_event.created_at = Time.now
67-
user_event
64+
event = Intercom::Event.new
65+
event.event_name = "second event"
66+
event.created_at = Time.now
67+
event
6868
end
6969

7070
it 'creates batched events' do
@@ -77,7 +77,7 @@
7777
:type => 'event'},
7878
],
7979
:user => { :user_id => user.user_id}}).returns(:status => 200)
80-
Intercom::UserEvent.save_batch_events([event1, event2], user)
80+
Intercom::Event.save_batch_events([event1, event2], user)
8181
end
8282
end
8383
end

spec/unit/intercom/user_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,12 @@
263263
second_company_as_hash["created_at"].must_equal time.to_i
264264
end
265265

266-
it "logs user events" do
266+
it "tracks events" do
267267
user = Intercom::User.new("email" => "[email protected]", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")
268-
Intercom::UserEvent.expects(:create).with(:event_name => 'registration', :user => user)
269-
event = user.log_event('registration')
268+
Intercom::Event.expects(:create).with(:event_name => 'registration', :user => user)
269+
event = user.track_event('registration')
270270

271-
Intercom::UserEvent.expects(:create).with(:event_name => 'another', :user => user, :created_at => 1391691571)
272-
event = user.log_event("another", {:created_at => 1391691571})
271+
Intercom::Event.expects(:create).with(:event_name => 'another', :user => user, :created_at => 1391691571)
272+
event = user.track_event("another", {:created_at => 1391691571})
273273
end
274274
end

0 commit comments

Comments
 (0)