intercom 2.5.4 → 3.0.0b1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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