Skip to content

Commit eefac08

Browse files
authored
Merge pull request #588 from intercom/seanhealy/addSwitchDE
Add switch + data export api support
2 parents 1ea9431 + 89f7347 commit eefac08

File tree

10 files changed

+138
-0
lines changed

10 files changed

+138
-0
lines changed

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,29 @@ intercom.collections.save(section)
686686
intercom.sections.delete(section)
687687
```
688688

689+
#### Phone Call Redirect (switch)
690+
691+
```ruby
692+
# Create a redirect
693+
redirect = intercom.phone_call_redirect.create(phone_number: "+353871234567")
694+
695+
```
696+
697+
#### Data Content Export
698+
699+
```ruby
700+
# Create a data export
701+
export = intercom.data_content_export.create(created_at_after: 1667566801, created_at_before: 1668085202)
702+
703+
704+
#View a data export
705+
export = intercom.data_content_export.find(id: 'k0e27ohsyvh8ef3m')
706+
707+
# Cancel a data export
708+
export = intercom.data_content_export.cancel('k0e27ohsyvh8ef3m')
709+
710+
```
711+
689712
### Errors
690713

691714
There are different styles for error handling - some people prefer exceptions; some prefer nil and check; some prefer error objects/codes. Balancing these preferences alongside our wish to provide an idiomatic gem has brought us to use the current mechanism of throwing specific exceptions. Our approach in the client is to propagate errors and signal our failure loudly so that erroneous data does not get propagated through our customers' systems - in other words, if you see a `Intercom::ServiceUnavailableError` you know where the problem is.

lib/intercom.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
require 'intercom/service/user'
2222
require 'intercom/service/lead'
2323
require 'intercom/deprecated_resources.rb'
24+
require 'intercom/service/export_content'
25+
require 'intercom/service/phone_call_redirect'
2426
require 'intercom/options'
2527
require 'intercom/client'
2628
require 'intercom/contact'
@@ -46,6 +48,8 @@
4648
require 'intercom/errors'
4749
require 'intercom/visitor'
4850
require 'intercom/data_attribute'
51+
require 'intercom/export_content'
52+
require 'intercom/phone_call_redirect'
4953
require 'json'
5054

5155
##

lib/intercom/client.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ def collections
124124
Intercom::Service::Collection.new(self)
125125
end
126126

127+
def export_content
128+
Intercom::Service::ExportContent.new(self)
129+
end
130+
131+
def phone_call_redirect
132+
Intercom::Service::PhoneCallRedirect.new(self)
133+
end
134+
127135
def get(path, params)
128136
execute_request Intercom::Request.get(path, params)
129137
end

lib/intercom/export_content.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'intercom/traits/api_resource'
2+
3+
module Intercom
4+
class ExportContent
5+
include Traits::ApiResource
6+
end
7+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'intercom/traits/api_resource'
2+
3+
module Intercom
4+
class PhoneCallRedirect
5+
include Traits::ApiResource
6+
end
7+
end

lib/intercom/service/conversation.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ def collection_class
2121
Intercom::Conversation
2222
end
2323

24+
def collection_proxy_class
25+
Intercom::BaseCollectionProxy
26+
end
27+
2428
def mark_read(id)
2529
@client.put("/conversations/#{id}", read: true)
2630
end
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
require 'intercom/service/base_service'
2+
require 'intercom/api_operations/find'
3+
require 'intercom/api_operations/list'
4+
require 'intercom/api_operations/save'
5+
6+
module Intercom
7+
module Service
8+
class ExportContent < BaseService
9+
include ApiOperations::Load
10+
include ApiOperations::List
11+
include ApiOperations::Find
12+
include ApiOperations::Save
13+
14+
def collection_class
15+
Intercom::ExportContent
16+
end
17+
18+
def collection_name
19+
'export/content/data'
20+
end
21+
22+
def cancel(id)
23+
response = @client.post("/export/cancel/#{id}", {})
24+
collection_class.new.from_response(response)
25+
end
26+
27+
end
28+
end
29+
end
30+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'intercom/service/base_service'
2+
require 'intercom/api_operations/save'
3+
4+
module Intercom
5+
module Service
6+
class PhoneCallRedirect < BaseService
7+
include ApiOperations::Save
8+
9+
def collection_class
10+
Intercom::PhoneCallRedirect
11+
end
12+
13+
end
14+
end
15+
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require 'spec_helper'
2+
3+
describe "Intercom::ExportContent" do
4+
let(:client) { Intercom::Client.new(token: 'token') }
5+
let(:job) {
6+
{
7+
job_identifier: "k0e27ohsyvh8ef3m",
8+
status: "no_data",
9+
download_url: "",
10+
download_expires_at: 0
11+
}
12+
}
13+
14+
it "creates an export job" do
15+
client.expects(:post).with("/export/content/data", {"created_at_after" => 1667566801, "created_at_before" => 1668085202}).returns(job)
16+
client.export_content.create({"created_at_after" => 1667566801, "created_at_before" => 1668085202})
17+
end
18+
19+
it "can view an export job" do
20+
client.expects(:get).with("/export/content/data/#{job[:job_identifier]}", {}).returns(job)
21+
client.export_content.find(id: job[:job_identifier])
22+
end
23+
24+
it "Cancels a export job redirect" do
25+
client.expects(:post).with("/export/cancel/#{job[:job_identifier]}", {}).returns(job)
26+
client.export_content.cancel(job[:job_identifier])
27+
end
28+
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
require 'spec_helper'
2+
3+
describe "Intercom::PhoneCallRedirect" do
4+
let(:client) { Intercom::Client.new(token: 'token') }
5+
6+
it "creates a phone redirect" do
7+
8+
client.expects(:post).with("/phone_call_redirect", {phone_number: "+353871234567"})
9+
client.phone_call_redirect.create(phone_number: "+353871234567")
10+
end
11+
12+
end

0 commit comments

Comments
 (0)