intercom 2.5.4 → 3.0.0b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -2
  3. data/README.md +97 -118
  4. data/changes.txt +3 -0
  5. data/intercom.gemspec +1 -1
  6. data/lib/intercom.rb +13 -153
  7. data/lib/intercom/admin.rb +0 -2
  8. data/lib/intercom/api_operations/convert.rb +5 -5
  9. data/lib/intercom/api_operations/delete.rb +4 -6
  10. data/lib/intercom/api_operations/find.rb +9 -15
  11. data/lib/intercom/api_operations/find_all.rb +16 -21
  12. data/lib/intercom/api_operations/list.rb +4 -10
  13. data/lib/intercom/api_operations/load.rb +6 -6
  14. data/lib/intercom/api_operations/save.rb +23 -28
  15. data/lib/intercom/client.rb +95 -0
  16. data/lib/intercom/{collection_proxy.rb → client_collection_proxy.rb} +5 -8
  17. data/lib/intercom/company.rb +0 -16
  18. data/lib/intercom/contact.rb +0 -11
  19. data/lib/intercom/conversation.rb +0 -10
  20. data/lib/intercom/event.rb +0 -2
  21. data/lib/intercom/extended_api_operations/segments.rb +13 -0
  22. data/lib/intercom/extended_api_operations/tags.rb +4 -5
  23. data/lib/intercom/extended_api_operations/users.rb +3 -5
  24. data/lib/intercom/message.rb +0 -2
  25. data/lib/intercom/note.rb +1 -10
  26. data/lib/intercom/options.rb +11 -0
  27. data/lib/intercom/request.rb +9 -5
  28. data/lib/intercom/segment.rb +0 -7
  29. data/lib/intercom/service/admin.rb +14 -0
  30. data/lib/intercom/service/base_service.rb +21 -0
  31. data/lib/intercom/service/company.rb +28 -0
  32. data/lib/intercom/service/contact.rb +22 -0
  33. data/lib/intercom/service/conversation.rb +31 -0
  34. data/lib/intercom/service/event.rb +14 -0
  35. data/lib/intercom/service/message.rb +14 -0
  36. data/lib/intercom/service/note.rb +22 -0
  37. data/lib/intercom/service/segment.rb +16 -0
  38. data/lib/intercom/service/subscription.rb +21 -0
  39. data/lib/intercom/service/tag.rb +30 -0
  40. data/lib/intercom/service/user.rb +28 -0
  41. data/lib/intercom/subscription.rb +0 -8
  42. data/lib/intercom/tag.rb +0 -16
  43. data/lib/intercom/user.rb +0 -16
  44. data/lib/intercom/utils.rb +0 -1
  45. data/lib/intercom/version.rb +1 -1
  46. data/spec/spec_helper.rb +117 -0
  47. data/spec/unit/intercom/admin_spec.rb +11 -4
  48. data/spec/unit/intercom/client_collection_proxy_spec.rb +35 -0
  49. data/spec/unit/intercom/client_spec.rb +21 -0
  50. data/spec/unit/intercom/company_spec.rb +24 -11
  51. data/spec/unit/intercom/contact_spec.rb +7 -5
  52. data/spec/unit/intercom/conversation_spec.rb +28 -0
  53. data/spec/unit/intercom/event_spec.rb +6 -5
  54. data/spec/unit/intercom/message_spec.rb +9 -8
  55. data/spec/unit/intercom/note_spec.rb +9 -2
  56. data/spec/unit/intercom/segment_spec.rb +12 -0
  57. data/spec/unit/intercom/subscription_spec.rb +7 -5
  58. data/spec/unit/intercom/tag_spec.rb +13 -7
  59. data/spec/unit/intercom/user_spec.rb +41 -33
  60. data/spec/unit/intercom_spec.rb +0 -83
  61. metadata +30 -20
  62. data/lib/intercom/api_operations/count.rb +0 -16
  63. data/lib/intercom/count.rb +0 -21
  64. data/lib/intercom/extended_api_operations/reply.rb +0 -16
  65. data/lib/intercom/generic_handlers/base_handler.rb +0 -22
  66. data/lib/intercom/generic_handlers/count.rb +0 -59
  67. data/lib/intercom/generic_handlers/tag.rb +0 -71
  68. data/lib/intercom/generic_handlers/tag_find_all.rb +0 -47
  69. data/lib/intercom/notification.rb +0 -20
  70. data/lib/intercom/traits/generic_handler_binding.rb +0 -29
  71. data/spec/unit/intercom/collection_proxy_spec.rb +0 -34
  72. data/spec/unit/intercom/notification_spec.rb +0 -68
@@ -1,9 +1,7 @@
1
- require 'intercom/api_operations/save'
2
1
  require 'intercom/traits/api_resource'
3
2
 
4
3
  module Intercom
5
4
  class Event
6
- include ApiOperations::Save
7
5
  include Traits::ApiResource
8
6
  end
9
7
  end
@@ -0,0 +1,13 @@
1
+ require 'intercom/traits/api_resource'
2
+ require 'intercom/client_collection_proxy'
3
+
4
+ module Intercom
5
+ module ExtendedApiOperations
6
+ module Segments
7
+ def by_segment(id)
8
+ collection_name = Utils.resource_class_to_collection_name(collection_class)
9
+ ClientCollectionProxy.new(collection_name, finder_details: {url: "/#{collection_name}?segment_id=#{id}"}, client: @client)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,14 +1,13 @@
1
1
  require 'intercom/traits/api_resource'
2
+ require 'intercom/client_collection_proxy'
2
3
 
3
4
  module Intercom
4
5
  module ExtendedApiOperations
5
6
  module Tags
6
-
7
- def tags
8
- collection_name = Utils.resource_class_to_collection_name(self.class)
9
- self.id ? Intercom::Tag.send("find_all_for_#{collection_name}", :id => id) : []
7
+ def by_tag(id)
8
+ collection_name = Utils.resource_class_to_collection_name(collection_class)
9
+ ClientCollectionProxy.new(collection_name, finder_details: {url: "/#{collection_name}?tag_id=#{id}"}, client: @client)
10
10
  end
11
-
12
11
  end
13
12
  end
14
13
  end
@@ -3,15 +3,13 @@ require 'intercom/traits/api_resource'
3
3
  module Intercom
4
4
  module ExtendedApiOperations
5
5
  module Users
6
-
7
- def users
8
- collection_name = Utils.resource_class_to_collection_name(self.class)
6
+ def users(id)
7
+ collection_name = Utils.resource_class_to_collection_name(collection_class)
9
8
  finder_details = {}
10
9
  finder_details[:url] = "/#{collection_name}/#{id}/users"
11
10
  finder_details[:params] = {}
12
- CollectionProxy.new("users", finder_details)
11
+ ClientCollectionProxy.new("users", finder_details: finder_details, client: @client)
13
12
  end
14
-
15
13
  end
16
14
  end
17
15
  end
@@ -1,9 +1,7 @@
1
- require 'intercom/api_operations/save'
2
1
  require 'intercom/traits/api_resource'
3
2
 
4
3
  module Intercom
5
4
  class Message
6
- include ApiOperations::Save
7
5
  include Traits::ApiResource
8
6
  end
9
7
  end
@@ -1,17 +1,8 @@
1
- require 'intercom/api_operations/save'
2
- require 'intercom/api_operations/list'
3
- require 'intercom/api_operations/find_all'
4
- require 'intercom/api_operations/find'
5
- require 'intercom/api_operations/load'
1
+
6
2
  require 'intercom/traits/api_resource'
7
3
 
8
4
  module Intercom
9
5
  class Note
10
- include ApiOperations::Save
11
- include ApiOperations::List
12
- include ApiOperations::FindAll
13
- include ApiOperations::Find
14
- include ApiOperations::Load
15
6
  include Traits::ApiResource
16
7
  end
17
8
  end
@@ -0,0 +1,11 @@
1
+ module Intercom
2
+ module Options
3
+ def options(*opts)
4
+ previous = nil
5
+ opts.each do |opt|
6
+ previous = opt.call(self)
7
+ end
8
+ previous
9
+ end
10
+ end
11
+ end
@@ -3,7 +3,7 @@ require 'net/https'
3
3
 
4
4
  module Intercom
5
5
  class Request
6
- attr_accessor :path, :net_http_method
6
+ attr_accessor :path, :net_http_method, :rate_limit_details
7
7
 
8
8
  def initialize(path, net_http_method)
9
9
  self.path = path
@@ -11,10 +11,13 @@ module Intercom
11
11
  end
12
12
 
13
13
  def set_common_headers(method, base_uri)
14
- method.basic_auth(CGI.unescape(base_uri.user), CGI.unescape(base_uri.password))
15
14
  method.add_field('AcceptEncoding', 'gzip, deflate')
16
15
  end
17
16
 
17
+ def set_basic_auth(method, username, secret)
18
+ method.basic_auth(CGI.unescape(username), CGI.unescape(secret))
19
+ end
20
+
18
21
  def self.get(path, params)
19
22
  new(path, Net::HTTP::Get.new(append_query_string_to_url(path, params), default_headers))
20
23
  end
@@ -54,9 +57,10 @@ module Intercom
54
57
  net
55
58
  end
56
59
 
57
- def execute(target_base_url=nil)
60
+ def execute(target_base_url=nil, username:, secret: nil)
58
61
  base_uri = URI.parse(target_base_url)
59
62
  set_common_headers(net_http_method, base_uri)
63
+ set_basic_auth(net_http_method, username, secret)
60
64
  begin
61
65
  client(base_uri).start do |http|
62
66
  begin
@@ -74,7 +78,7 @@ module Intercom
74
78
  raise Intercom::ServiceConnectionError.new('Failed to connect to service [connection attempt timed out]')
75
79
  end
76
80
  end
77
-
81
+
78
82
  def decode_body(response)
79
83
  decode(response['content-encoding'], response.body)
80
84
  end
@@ -96,7 +100,7 @@ module Intercom
96
100
  rate_limit_details[:limit] = response['X-RateLimit-Limit'].to_i if response['X-RateLimit-Limit']
97
101
  rate_limit_details[:remaining] = response['X-RateLimit-Remaining'].to_i if response['X-RateLimit-Remaining']
98
102
  rate_limit_details[:reset_at] = Time.at(response['X-RateLimit-Reset'].to_i) if response['X-RateLimit-Reset']
99
- Intercom.rate_limit_details = rate_limit_details
103
+ @rate_limit_details = rate_limit_details
100
104
  end
101
105
 
102
106
  def decode(content_encoding, body)
@@ -1,14 +1,7 @@
1
- require 'intercom/api_operations/count'
2
- require 'intercom/api_operations/find'
3
- require 'intercom/api_operations/save'
4
1
  require 'intercom/traits/api_resource'
5
2
 
6
3
  module Intercom
7
4
  class Segment
8
- include ApiOperations::List
9
- include ApiOperations::Find
10
- include ApiOperations::Save
11
- include ApiOperations::Count
12
5
  include Traits::ApiResource
13
6
  end
14
7
  end
@@ -0,0 +1,14 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/list'
3
+
4
+ module Intercom
5
+ module Service
6
+ class Admin < BaseService
7
+ include ApiOperations::List
8
+
9
+ def collection_class
10
+ Intercom::Admin
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module Intercom
2
+ module Service
3
+ class BaseService
4
+ attr_reader :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def collection_class
11
+ raise NotImplementedError
12
+ end
13
+
14
+ def from_api(api_response)
15
+ object = collection_class.new
16
+ object.from_response(api_response)
17
+ object
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/list'
3
+ require 'intercom/api_operations/find'
4
+ require 'intercom/api_operations/find_all'
5
+ require 'intercom/api_operations/save'
6
+ require 'intercom/api_operations/load'
7
+ require 'intercom/extended_api_operations/users'
8
+ require 'intercom/extended_api_operations/tags'
9
+ require 'intercom/extended_api_operations/segments'
10
+
11
+ module Intercom
12
+ module Service
13
+ class Company < BaseService
14
+ include ApiOperations::Find
15
+ include ApiOperations::FindAll
16
+ include ApiOperations::Load
17
+ include ApiOperations::List
18
+ include ApiOperations::Save
19
+ include ExtendedApiOperations::Users
20
+ include ExtendedApiOperations::Tags
21
+ include ExtendedApiOperations::Segments
22
+
23
+ def collection_class
24
+ Intercom::Company
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/load'
3
+ require 'intercom/api_operations/find'
4
+ require 'intercom/api_operations/find_all'
5
+ require 'intercom/api_operations/save'
6
+ require 'intercom/api_operations/convert'
7
+
8
+ module Intercom
9
+ module Service
10
+ class Contact < BaseService
11
+ include ApiOperations::Load
12
+ include ApiOperations::Find
13
+ include ApiOperations::FindAll
14
+ include ApiOperations::Save
15
+ include ApiOperations::Convert
16
+
17
+ def collection_class
18
+ Intercom::Contact
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/find_all'
3
+ require 'intercom/api_operations/find'
4
+ require 'intercom/api_operations/load'
5
+ require 'intercom/api_operations/save'
6
+
7
+ module Intercom
8
+ module Service
9
+ class Conversation < BaseService
10
+ include ApiOperations::FindAll
11
+ include ApiOperations::Find
12
+ include ApiOperations::Load
13
+ include ApiOperations::Save
14
+
15
+ def collection_class
16
+ Intercom::Conversation
17
+ end
18
+
19
+ def mark_read(id)
20
+ @client.put("/conversations/#{id}", read: true)
21
+ end
22
+
23
+ def reply(reply_data)
24
+ id = reply_data.delete(:id)
25
+ collection_name = Utils.resource_class_to_collection_name(collection_class)
26
+ response = @client.post("/#{collection_name}/#{id}/reply", reply_data.merge(:conversation_id => id))
27
+ collection_class.new.from_response(response)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/save'
3
+
4
+ module Intercom
5
+ module Service
6
+ class Event < BaseService
7
+ include ApiOperations::Save
8
+
9
+ def collection_class
10
+ Intercom::Event
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/save'
3
+
4
+ module Intercom
5
+ module Service
6
+ class Message < BaseService
7
+ include ApiOperations::Save
8
+
9
+ def collection_class
10
+ Intercom::Message
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/list'
3
+ require 'intercom/api_operations/find_all'
4
+ require 'intercom/api_operations/find'
5
+ require 'intercom/api_operations/load'
6
+ require 'intercom/api_operations/save'
7
+
8
+ module Intercom
9
+ module Service
10
+ class Note < BaseService
11
+ include ApiOperations::Save
12
+ include ApiOperations::List
13
+ include ApiOperations::FindAll
14
+ include ApiOperations::Find
15
+ include ApiOperations::Load
16
+
17
+ def collection_class
18
+ Intercom::Note
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/list'
3
+ require 'intercom/api_operations/find'
4
+
5
+ module Intercom
6
+ module Service
7
+ class Segment < BaseService
8
+ include ApiOperations::List
9
+ include ApiOperations::Find
10
+
11
+ def collection_class
12
+ Intercom::Segment
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ require 'intercom/api_operations/list'
2
+ require 'intercom/api_operations/find_all'
3
+ require 'intercom/api_operations/find'
4
+ require 'intercom/api_operations/save'
5
+ require 'intercom/api_operations/delete'
6
+
7
+ module Intercom
8
+ module Service
9
+ class Subscription < BaseService
10
+ include ApiOperations::List
11
+ include ApiOperations::Find
12
+ include ApiOperations::FindAll
13
+ include ApiOperations::Save
14
+ include ApiOperations::Delete
15
+
16
+ def collection_class
17
+ Intercom::Subscription
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ require 'intercom/service/base_service'
2
+ require 'intercom/api_operations/save'
3
+ require 'intercom/api_operations/list'
4
+ require 'intercom/api_operations/find'
5
+ require 'intercom/api_operations/find_all'
6
+
7
+ module Intercom
8
+ module Service
9
+ class Tag < BaseService
10
+ include ApiOperations::Save
11
+ include ApiOperations::List
12
+ include ApiOperations::Find
13
+ include ApiOperations::FindAll
14
+
15
+ def collection_class
16
+ Intercom::Tag
17
+ end
18
+
19
+ def tag(params)
20
+ params['tag_or_untag'] = 'tag'
21
+ create(params)
22
+ end
23
+
24
+ def untag(params)
25
+ params['tag_or_untag'] = 'untag'
26
+ create(params)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ require 'intercom/extended_api_operations/tags'
2
+ require 'intercom/extended_api_operations/segments'
3
+ require 'intercom/service/base_service'
4
+ require 'intercom/api_operations/load'
5
+ require 'intercom/api_operations/list'
6
+ require 'intercom/api_operations/find'
7
+ require 'intercom/api_operations/find_all'
8
+ require 'intercom/api_operations/save'
9
+ require 'intercom/api_operations/delete'
10
+
11
+ module Intercom
12
+ module Service
13
+ class User < BaseService
14
+ include ApiOperations::Find
15
+ include ApiOperations::FindAll
16
+ include ApiOperations::Load
17
+ include ApiOperations::List
18
+ include ApiOperations::Save
19
+ include ApiOperations::Delete
20
+ include ExtendedApiOperations::Tags
21
+ include ExtendedApiOperations::Segments
22
+
23
+ def collection_class
24
+ Intercom::User
25
+ end
26
+ end
27
+ end
28
+ end