Skip to content

Commit d8c74c4

Browse files
committed
Merge pull request #109 from nurazem/add_subscriptions
Add support for Subscriptions
2 parents cfb7816 + 6dbcb92 commit d8c74c4

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

lib/intercom.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
require "intercom/admin"
1111
require "intercom/count"
1212
require "intercom/request"
13+
require "intercom/subscription"
1314
require "intercom/notification"
1415
require "intercom/utils"
1516
require "intercom/errors"

lib/intercom/collection_proxy.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ def resource_class; @resource_class; end
4747

4848
def deserialize_response_hash(response_hash, block)
4949
top_level_type = response_hash.delete('type')
50-
top_level_entity_key = Utils.entity_key_from_type(top_level_type)
50+
if resource_name == 'subscriptions'
51+
top_level_entity_key = 'items'
52+
else
53+
top_level_entity_key = Utils.entity_key_from_type(top_level_type)
54+
end
5155
response_hash[top_level_entity_key].each do |object_json|
5256
block.call Lib::TypedJsonDeserializer.new(object_json).deserialize
5357
end

lib/intercom/subscription.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'intercom/api_operations/list'
2+
require 'intercom/api_operations/find_all'
3+
require 'intercom/api_operations/save'
4+
require 'intercom/api_operations/delete'
5+
require 'intercom/traits/api_resource'
6+
7+
module Intercom
8+
class Subscription
9+
include ApiOperations::List
10+
include ApiOperations::Find
11+
include ApiOperations::Save
12+
include ApiOperations::Delete
13+
include Traits::ApiResource
14+
end
15+
end

spec/spec_helper.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,33 @@ def test_conversation_notification
262262
}
263263
end
264264

265+
def test_subscription
266+
{"request"=>
267+
{"type"=>"notification_subscription",
268+
"id"=>"nsub_123456789",
269+
"created_at"=>1410368642,
270+
"updated_at"=>1410368642,
271+
"service_type"=>"web",
272+
"app_id"=>"3qmk5gyg",
273+
"url"=>
274+
"http://example.com",
275+
"self"=>
276+
"https://api.intercom.io/subscriptions/nsub_123456789",
277+
"topics"=>["user.created", "conversation.user.replied", "conversation.admin.replied"],
278+
"active"=>true,
279+
"metadata"=>{},
280+
"hub_secret"=>nil,
281+
"mode"=>"point",
282+
"links"=>
283+
{"sent"=>
284+
"https://api.intercom.io/subscriptions/nsub_123456789/sent",
285+
"retry"=>
286+
"https://api.intercom.io/subscriptions/nsub_123456789/retry",
287+
"errors"=>
288+
"https://api.intercom.io/subscriptions/nsub_123456789/errors"},
289+
"notes"=>[]}}
290+
end
291+
265292
def error_on_modify_frozen
266293
RUBY_VERSION =~ /1.8/ ? TypeError : RuntimeError
267294
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
require 'spec_helper'
2+
3+
describe "Intercom::Subscription" do
4+
it "gets a subscription" do
5+
Intercom.expects(:get).with("/subscriptions/nsub_123456789", {}).returns(test_subscription)
6+
subscription = Intercom::Subscription.find(:id => "nsub_123456789")
7+
subscription.request.topics[0].must_equal "user.created"
8+
subscription.request.topics[1].must_equal "conversation.user.replied"
9+
end
10+
11+
it "creates a subscription" do
12+
Intercom.expects(:post).with("/subscriptions", {'url' => "http://example.com", 'topics' => ["user.created"]}).returns(test_subscription)
13+
subscription = Intercom::Subscription.create(:url => "http://example.com", :topics => ["user.created"])
14+
subscription.request.topics[0].must_equal "user.created"
15+
subscription.request.url.must_equal "http://example.com"
16+
end
17+
18+
end

0 commit comments

Comments
 (0)