intercom 0.0.12 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/intercom.gemspec +2 -2
- data/lib/intercom/{user_custom_data.rb → flat_store.rb} +3 -3
- data/lib/intercom/user.rb +28 -5
- data/lib/intercom/user_collection_proxy.rb +1 -1
- data/lib/intercom/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/intercom/{user_custom_data_spec.rb → flat_store_spec.rb} +6 -6
- data/spec/unit/intercom/user_spec.rb +14 -0
- metadata +9 -6
data/intercom.gemspec
CHANGED
@@ -6,8 +6,8 @@ require "intercom/version"
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "intercom"
|
8
8
|
spec.version = Intercom::VERSION
|
9
|
-
spec.authors = ["Ben McRedmond", "Ciaran Lee", "Darragh Curran", "Jeff Gardner"]
|
10
|
-
spec.email = ["ben@intercom.io", "ciaran@intercom.io", "darragh@intercom.io", "jeff@intercom.io"]
|
9
|
+
spec.authors = ["Ben McRedmond", "Ciaran Lee", "Darragh Curran", "Jeff Gardner", "Kyle Daigle"]
|
10
|
+
spec.email = ["ben@intercom.io", "ciaran@intercom.io", "darragh@intercom.io", "jeff@intercom.io", "kyle@digitalworkbox.com"]
|
11
11
|
spec.homepage = "https://www.intercom.io"
|
12
12
|
spec.summary = %q{Ruby bindings for the Intercom API}
|
13
13
|
spec.description = %Q{Intercom (https://www.intercom.io) is a customer relationship management and messaging tool for web app owners. This library wraps the api provided by Intercom. See http://docs.intercom.io/api for more details. }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Intercom
|
2
2
|
# Sub-class of {Hash} for storing custom data attributes.
|
3
3
|
# Doesn't allow nested Hashes or Arrays. And requires {String} or {Symbol} keys.
|
4
|
-
class
|
4
|
+
class FlatStore < Hash
|
5
5
|
def initialize(attributes={})
|
6
6
|
(attributes).each do |key, value|
|
7
7
|
validate_key_and_value(key, value)
|
@@ -20,8 +20,8 @@ module Intercom
|
|
20
20
|
|
21
21
|
private
|
22
22
|
def validate_key_and_value(key, value)
|
23
|
-
raise ArgumentError.new("
|
24
|
-
raise ArgumentError.new("
|
23
|
+
raise ArgumentError.new("This does not support nested data structures (key: #{key}, value: #{value}") if value.is_a?(Array) || value.is_a?(Hash)
|
24
|
+
raise ArgumentError.new("Key must be String or Symbol: #{key}") unless key.is_a?(String) || key.is_a?(Symbol)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/intercom/user.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'intercom/user_resource'
|
2
|
-
require 'intercom/
|
2
|
+
require 'intercom/flat_store'
|
3
3
|
require 'intercom/user_collection_proxy'
|
4
4
|
require 'intercom/social_profile'
|
5
5
|
|
@@ -222,17 +222,40 @@ module Intercom
|
|
222
222
|
# user.custom_data[:plan] = "pro"
|
223
223
|
# user.save
|
224
224
|
#
|
225
|
-
# @return [
|
225
|
+
# @return [FlatStore]
|
226
226
|
def custom_data
|
227
|
-
@attributes["custom_data"] ||=
|
227
|
+
@attributes["custom_data"] ||= FlatStore.new
|
228
228
|
end
|
229
229
|
|
230
230
|
# Set a {Hash} of custom data attributes to save/update on this user
|
231
231
|
#
|
232
232
|
# @param [Hash] custom_data
|
233
|
-
# @return [
|
233
|
+
# @return [FlatStore]
|
234
234
|
def custom_data=(custom_data)
|
235
|
-
@attributes["custom_data"] =
|
235
|
+
@attributes["custom_data"] = FlatStore.new(custom_data)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Custom attributes stored for this Intercom::User
|
239
|
+
#
|
240
|
+
# See http://docs.intercom.io/#Companies for more information
|
241
|
+
#
|
242
|
+
# Example: Setting a company for an existing user
|
243
|
+
# user = Intercom::User.find(:email => "someone@example.com")
|
244
|
+
# user.company[:id] = 6
|
245
|
+
# user.company[:name] = "Intercom"
|
246
|
+
# user.save
|
247
|
+
#
|
248
|
+
# @return [FlatStore]
|
249
|
+
def company
|
250
|
+
@attributes["company"] ||= FlatStore.new
|
251
|
+
end
|
252
|
+
|
253
|
+
# Set a {Hash} of company attributes to save/update on this user
|
254
|
+
#
|
255
|
+
# @param [Hash] company
|
256
|
+
# @return [FlatStore]
|
257
|
+
def company=(company)
|
258
|
+
@attributes["company"] = FlatStore.new(company)
|
236
259
|
end
|
237
260
|
|
238
261
|
protected
|
data/lib/intercom/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Intercom::
|
3
|
+
describe Intercom::FlatStore do
|
4
4
|
it "raises if you try to set or merge in nested hash structures" do
|
5
|
-
data = Intercom::
|
5
|
+
data = Intercom::FlatStore.new()
|
6
6
|
proc { data["thing"] = [1] }.must_raise ArgumentError
|
7
7
|
proc { data["thing"] = {1 => 2} }.must_raise ArgumentError
|
8
|
-
proc { Intercom::
|
8
|
+
proc { Intercom::FlatStore.new({1 => {2 => 3}}) }.must_raise ArgumentError
|
9
9
|
end
|
10
10
|
|
11
11
|
it "raises if you try to use a non string key" do
|
12
|
-
data =
|
12
|
+
data =Intercom::FlatStore.new()
|
13
13
|
proc { data[1] = "something" }.must_raise ArgumentError
|
14
14
|
end
|
15
15
|
|
16
16
|
it "sets and merges valid entries" do
|
17
|
-
data = Intercom::
|
17
|
+
data = Intercom::FlatStore.new()
|
18
18
|
data["a"] = 1
|
19
19
|
data[:b] = 2
|
20
20
|
data[:a].must_equal 1
|
21
21
|
data["b"].must_equal 2
|
22
22
|
data[:b].must_equal 2
|
23
|
-
data = Intercom::
|
23
|
+
data = Intercom::FlatStore.new({"a" => 1, :b => 2})
|
24
24
|
data["a"].must_equal 1
|
25
25
|
data[:a].must_equal 1
|
26
26
|
data["b"].must_equal 2
|
@@ -73,6 +73,14 @@ describe "Intercom::User" do
|
|
73
73
|
user.to_hash["custom_data"].must_equal "mad" => 123, "other" => now, "thing" => "yay"
|
74
74
|
end
|
75
75
|
|
76
|
+
it "allows easy setting of company data" do
|
77
|
+
now = Time.now
|
78
|
+
user = Intercom::User.new()
|
79
|
+
user.company["name"] = "Intercom"
|
80
|
+
user.company["id"] = 6
|
81
|
+
user.to_hash["company"].must_equal "name" => "Intercom", "id" => 6
|
82
|
+
end
|
83
|
+
|
76
84
|
it "rejects nested data structures in custom_data" do
|
77
85
|
user = Intercom::User.new()
|
78
86
|
proc { user.custom_data["thing"] = [1] }.must_raise ArgumentError
|
@@ -97,6 +105,12 @@ describe "Intercom::User" do
|
|
97
105
|
user.save
|
98
106
|
end
|
99
107
|
|
108
|
+
it "saves a user with a company" do
|
109
|
+
user = Intercom::User.new("email" => "jo@example.com", :user_id => "i-1224242", :company => {:id => 6, :name => "Intercom"})
|
110
|
+
Intercom.expects(:post).with("/v1/users", {"email" => "jo@example.com", "user_id" => "i-1224242", "company" => {"id" => 6, "name" => "Intercom"}}).returns({"email" => "jo@example.com", "user_id" => "i-1224242"})
|
111
|
+
user.save
|
112
|
+
end
|
113
|
+
|
100
114
|
it "deletes a user" do
|
101
115
|
Intercom.expects(:delete).with("/v1/users", {"email" => "jo@example.com", "user_id" => "i-1224242"}).returns({"email" => "jo@example.com", "user_id" => "i-1224242"})
|
102
116
|
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.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,10 +9,11 @@ authors:
|
|
9
9
|
- Ciaran Lee
|
10
10
|
- Darragh Curran
|
11
11
|
- Jeff Gardner
|
12
|
+
- Kyle Daigle
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
|
-
date: 2013-02-
|
16
|
+
date: 2013-02-22 00:00:00.000000000 Z
|
16
17
|
dependencies:
|
17
18
|
- !ruby/object:Gem::Dependency
|
18
19
|
name: minitest
|
@@ -70,6 +71,7 @@ email:
|
|
70
71
|
- ciaran@intercom.io
|
71
72
|
- darragh@intercom.io
|
72
73
|
- jeff@intercom.io
|
74
|
+
- kyle@digitalworkbox.com
|
73
75
|
executables: []
|
74
76
|
extensions: []
|
75
77
|
extra_rdoc_files: []
|
@@ -84,6 +86,7 @@ files:
|
|
84
86
|
- intercom.gemspec
|
85
87
|
- lib/data/cacert.pem
|
86
88
|
- lib/intercom.rb
|
89
|
+
- lib/intercom/flat_store.rb
|
87
90
|
- lib/intercom/impression.rb
|
88
91
|
- lib/intercom/message_thread.rb
|
89
92
|
- lib/intercom/note.rb
|
@@ -92,16 +95,15 @@ files:
|
|
92
95
|
- lib/intercom/unix_timestamp_unwrapper.rb
|
93
96
|
- lib/intercom/user.rb
|
94
97
|
- lib/intercom/user_collection_proxy.rb
|
95
|
-
- lib/intercom/user_custom_data.rb
|
96
98
|
- lib/intercom/user_resource.rb
|
97
99
|
- lib/intercom/version.rb
|
98
100
|
- spec/integration/intercom_api_integration_spec.rb
|
99
101
|
- spec/spec_helper.rb
|
102
|
+
- spec/unit/intercom/flat_store_spec.rb
|
100
103
|
- spec/unit/intercom/impression_spec.rb
|
101
104
|
- spec/unit/intercom/message_thread_spec.rb
|
102
105
|
- spec/unit/intercom/note_spec.rb
|
103
106
|
- spec/unit/intercom/user_collection_proxy_spec.rb
|
104
|
-
- spec/unit/intercom/user_custom_data_spec.rb
|
105
107
|
- spec/unit/intercom/user_resource_spec.rb
|
106
108
|
- spec/unit/intercom/user_spec.rb
|
107
109
|
- spec/unit/intercom_spec.rb
|
@@ -125,18 +127,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
127
|
version: '0'
|
126
128
|
requirements: []
|
127
129
|
rubyforge_project: intercom
|
128
|
-
rubygems_version: 1.8.
|
130
|
+
rubygems_version: 1.8.25
|
129
131
|
signing_key:
|
130
132
|
specification_version: 3
|
131
133
|
summary: Ruby bindings for the Intercom API
|
132
134
|
test_files:
|
133
135
|
- spec/integration/intercom_api_integration_spec.rb
|
134
136
|
- spec/spec_helper.rb
|
137
|
+
- spec/unit/intercom/flat_store_spec.rb
|
135
138
|
- spec/unit/intercom/impression_spec.rb
|
136
139
|
- spec/unit/intercom/message_thread_spec.rb
|
137
140
|
- spec/unit/intercom/note_spec.rb
|
138
141
|
- spec/unit/intercom/user_collection_proxy_spec.rb
|
139
|
-
- spec/unit/intercom/user_custom_data_spec.rb
|
140
142
|
- spec/unit/intercom/user_resource_spec.rb
|
141
143
|
- spec/unit/intercom/user_spec.rb
|
142
144
|
- spec/unit/intercom_spec.rb
|
145
|
+
has_rdoc:
|