intercom 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,24 +1,29 @@
1
- Ruby bindings for the Intercom API (https://api.intercom.io). See http://docs.intercom.io/api for more details.
1
+ # intercom-ruby
2
2
 
3
- Yardoc is available at http://rubydoc.info/github/intercom/intercom-ruby/master/frames
3
+ Ruby bindings for the Intercom API (https://api.intercom.io).
4
4
 
5
- For generating Intercom javascript script tags, please see https://github.com/intercom/intercom-rails
5
+ [API Documentation](https://api.intercom.io)
6
+
7
+ [Gem Documentation](http://rubydoc.info/github/intercom/intercom-ruby/master/frames)
8
+
9
+ For generating Intercom javascript script tags for Rails, please see https://github.com/intercom/intercom-rails
10
+
11
+ ## Installation
6
12
 
7
- == Installation
8
13
  gem install intercom
9
14
 
10
15
  Using bundler:
11
16
 
12
17
  gem 'intercom'
13
18
 
14
- == Basic Usage
19
+ ## Basic Usage
15
20
 
16
- === Configure your access credentials
21
+ ### Configure your access credentials
17
22
 
18
23
  Intercom.app_id = "my_app_iddd"
19
24
  Intercom.api_key = "my-super-crazy-api-key"
20
25
 
21
- === Resources
26
+ ### Resources
22
27
 
23
28
  The API supports:
24
29
 
@@ -27,9 +32,9 @@ The API supports:
27
32
  POST https://api.intercom.io/v1/users/impressions
28
33
  POST https://api.intercom.io/v1/users/notes
29
34
 
30
- === Examples:
35
+ ### Examples
31
36
 
32
- ==== Users
37
+ #### Users
33
38
  user = Intercom::User.find_by_email("bob@example.com")
34
39
  user.custom_data["average_monthly_spend"] = 1234.56
35
40
  user.save
@@ -41,23 +46,31 @@ The API supports:
41
46
  Intercom::User.all.each {|user| puts %Q(#{user.email} - #{user.custom_data["average_monthly_spend"]}) }
42
47
  Intercom::User.all.map {|user| user.email }
43
48
 
49
+ #### Companies
50
+ user = Intercom::User.find_by_email("bob@example.com")
51
+ user.company = {:id => 6, :name => "Intercom"}
52
+ user.companies = [{:id => 6, :name => "Intercom"}, {:id => 9, :name => "Test Company"}]
53
+
54
+ You can also pass custom data within a company:
55
+
56
+ user.company = {:id => 6, :name => "Intercom", :referral_source => "Google"}
44
57
 
45
- ==== Messages
58
+ #### Messages
46
59
 
47
60
  Intercom::Message.create(:email => "bob@example.com", :body => "Example message from bob@example.com to your application on Intercom.")
48
61
  Intercom::Message.find(:email => "bob@example.com", :thread_id => 123)
49
62
  Intercom::Message.find_all(:email => "bob@example.com")
50
63
  Intercom::Message.mark_as_read(:email => "bob@example.com", :thread_id => 123)
51
64
 
52
- ==== Impressions
65
+ #### Impressions
53
66
 
54
67
  Intercom::Impression.create(:email => "bob@example.com", :location => "/path/in/my/app", :user_ip => "1.2.3.4", :user_agent => "my-savage-iphone-app-0.1"
55
68
 
56
- ==== Notes
69
+ #### Notes
57
70
 
58
71
  Intercom::Note.create(:email => "bob@example.com", :body => "This is the text of the note")
59
72
 
60
- === Errors
73
+ ### Errors
61
74
 
62
75
  Intercom::AuthenticationError
63
76
  Intercom::ServerError
@@ -235,7 +235,7 @@ module Intercom
235
235
  @attributes["custom_data"] = FlatStore.new(custom_data)
236
236
  end
237
237
 
238
- # Custom attributes stored for this Intercom::User
238
+ # Company stored for this Intercom::User
239
239
  #
240
240
  # See http://docs.intercom.io/#Companies for more information
241
241
  #
@@ -258,6 +258,29 @@ module Intercom
258
258
  @attributes["company"] = FlatStore.new(company)
259
259
  end
260
260
 
261
+ # Multiple companies for this Intercom::User
262
+ #
263
+ # See http://docs.intercom.io/#Companies for more information
264
+ #
265
+ # Example: Setting a company for an existing user
266
+ # user = Intercom::User.find(:email => "someone@example.com")
267
+ # user.companies = [{:id => 6, :name => "intercom"}, {:id => 9, :name => "Test Company"}]
268
+ # user.save
269
+ #
270
+ # @return [Array]
271
+ def companies
272
+ @attributes["companies"] ||= []
273
+ end
274
+
275
+ # Set an {Array} of {Hash} company attributes to save/update on this user
276
+ #
277
+ # @param [Array] companies
278
+ # @return [Array]
279
+ def companies=(companies)
280
+ raise ArgumentError.new("Companies requires an array of hashes of companies") unless companies.is_a?(Array) && companies.all? {|company| company.is_a?(Hash)}
281
+ @attributes["companies"] = companies.collect {|company| FlatStore.new(company) }
282
+ end
283
+
261
284
  protected
262
285
  def social_profiles=(social_profiles) #:nodoc:
263
286
  @social_profiles = social_profiles.map { |account| SocialProfile.new(account) }.freeze
@@ -1,3 +1,3 @@
1
1
  module Intercom #:nodoc:
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -81,6 +81,22 @@ describe "Intercom::User" do
81
81
  user.to_hash["company"].must_equal "name" => "Intercom", "id" => 6
82
82
  end
83
83
 
84
+ it "allows easy setting of multiple companies" do
85
+ user = Intercom::User.new()
86
+ companies = [
87
+ {"name" => "Intercom", "id" => "6"},
88
+ {"name" => "Test", "id" => "9"}
89
+ ]
90
+ user.companies = companies
91
+ user.to_hash["companies"].must_equal companies
92
+ end
93
+
94
+ it "rejects setting companies without an array of hashes" do
95
+ user = Intercom::User.new()
96
+ proc { user.companies = {"name" => "test"} }.must_raise ArgumentError
97
+ proc { user.companies = [ ["name", "test"] ]}.must_raise ArgumentError
98
+ end
99
+
84
100
  it "rejects nested data structures in custom_data" do
85
101
  user = Intercom::User.new()
86
102
  proc { user.custom_data["thing"] = [1] }.must_raise ArgumentError
@@ -111,6 +127,12 @@ describe "Intercom::User" do
111
127
  user.save
112
128
  end
113
129
 
130
+ it "saves a user with a companies" do
131
+ user = Intercom::User.new("email" => "jo@example.com", :user_id => "i-1224242", :companies => [{:id => 6, :name => "Intercom"}])
132
+ Intercom.expects(:post).with("/v1/users", {"email" => "jo@example.com", "user_id" => "i-1224242", "companies" => [{"id" => 6, "name" => "Intercom"}]}).returns({"email" => "jo@example.com", "user_id" => "i-1224242"})
133
+ user.save
134
+ end
135
+
114
136
  it "deletes a user" do
115
137
  Intercom.expects(:delete).with("/v1/users", {"email" => "jo@example.com", "user_id" => "i-1224242"}).returns({"email" => "jo@example.com", "user_id" => "i-1224242"})
116
138
  Intercom::User.delete("email" => "jo@example.com", "user_id" => "i-1224242")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intercom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-02-22 00:00:00.000000000 Z
16
+ date: 2013-02-28 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: minitest
@@ -80,7 +80,7 @@ files:
80
80
  - .travis.yml
81
81
  - Gemfile
82
82
  - MIT-LICENSE
83
- - README.rdoc
83
+ - README.md
84
84
  - Rakefile
85
85
  - changes.txt
86
86
  - intercom.gemspec
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  requirements: []
129
129
  rubyforge_project: intercom
130
- rubygems_version: 1.8.25
130
+ rubygems_version: 1.8.23
131
131
  signing_key:
132
132
  specification_version: 3
133
133
  summary: Ruby bindings for the Intercom API