insightly 0.1.8 → 0.2.0
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.
- data/README.md +8 -1
- data/lib/insightly.rb +13 -0
- data/lib/insightly/address.rb +20 -0
- data/lib/insightly/address_helper.rb +21 -0
- data/lib/insightly/base.rb +3 -1
- data/lib/insightly/base_data.rb +49 -0
- data/lib/insightly/contact.rb +42 -0
- data/lib/insightly/contact_info.rb +61 -0
- data/lib/insightly/contact_info_helper.rb +14 -0
- data/lib/insightly/link.rb +32 -0
- data/lib/insightly/link_helper.rb +14 -0
- data/lib/insightly/opportunity.rb +7 -3
- data/lib/insightly/organisation.rb +45 -0
- data/lib/insightly/read_only.rb +0 -1
- data/lib/insightly/read_write.rb +8 -2
- data/lib/insightly/task.rb +29 -28
- data/lib/insightly/task_link.rb +28 -5
- data/lib/insightly/task_link_helper.rb +14 -0
- data/lib/insightly/version.rb +2 -2
- data/spec/unit/address_spec.rb +81 -0
- data/spec/unit/contact_spec.rb +255 -0
- data/spec/unit/link_spec.rb +98 -0
- data/spec/unit/opportunity_spec.rb +58 -1
- data/spec/unit/organisation_spec.rb +239 -0
- data/spec/unit/task_link_spec.rb +1 -0
- data/spec/unit/task_spec.rb +96 -0
- metadata +19 -5
data/lib/insightly/task_link.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
module Insightly
|
2
2
|
class TaskLink < ReadOnly
|
3
3
|
self.url_base ="TaskLinks"
|
4
|
+
api_field "TASK_LINK_ID",
|
5
|
+
"PROJECT_ID",
|
6
|
+
"CONTACT_ID",
|
7
|
+
"OPPORTUNITY_ID",
|
8
|
+
"ORGANISATION_ID",
|
9
|
+
"TASK_ID"
|
4
10
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def task_id
|
9
|
-
@data["TASK_ID"]
|
11
|
+
|
12
|
+
def remote_id
|
13
|
+
self.task_link_id
|
10
14
|
end
|
11
15
|
|
12
16
|
def self.search_by_opportunity_id(opportunity_id)
|
@@ -18,5 +22,24 @@ module Insightly
|
|
18
22
|
end
|
19
23
|
list
|
20
24
|
end
|
25
|
+
|
26
|
+
def self.add_contact(id)
|
27
|
+
item = TaskLink.new
|
28
|
+
item.contact_id = id
|
29
|
+
item
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.add_opportunity(id)
|
33
|
+
item = TaskLink.new
|
34
|
+
item.opportunity_id = id
|
35
|
+
|
36
|
+
item
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.add_organisation(id)
|
40
|
+
item = TaskLink.new
|
41
|
+
item.organisation_id = id
|
42
|
+
item
|
43
|
+
end
|
21
44
|
end
|
22
45
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Insightly
|
2
|
+
module TaskLinkHelper
|
3
|
+
def task_links
|
4
|
+
@data["TASKLINKS"].collect {|a| Insightly::TaskLink.build(a)}
|
5
|
+
end
|
6
|
+
def task_links=(list)
|
7
|
+
@data["TASKLINKS"] = list.collect {|a| fix_for_link(a).remote_data}
|
8
|
+
end
|
9
|
+
def add_task_link(link)
|
10
|
+
@data["TASKLINKS"] << fix_for_link(link).remote_data
|
11
|
+
true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/insightly/version.rb
CHANGED
@@ -0,0 +1,81 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Insightly::Address do
|
4
|
+
before(:each) do
|
5
|
+
Insightly::Configuration.api_key = INSIGHTLY_API_KEY
|
6
|
+
@address = Insightly::Address.build({
|
7
|
+
"ADDRESS_ID" => 1,
|
8
|
+
"ADDRESS_TYPE" => "Work",
|
9
|
+
"STREET" => "123 Main St.",
|
10
|
+
"CITY" => "San Antonio",
|
11
|
+
"STATE" => "TX",
|
12
|
+
"POSTCODE" => "78216",
|
13
|
+
"COUNTRY" => "US"
|
14
|
+
})
|
15
|
+
end
|
16
|
+
it "should be able to build an address from data" do
|
17
|
+
data = {
|
18
|
+
"ADDRESS_ID" => 1,
|
19
|
+
"ADDRESS_TYPE" => "Work",
|
20
|
+
"STREET" => "123 Main St.",
|
21
|
+
"CITY" => "San Antonio",
|
22
|
+
"STATE" => "TX",
|
23
|
+
"POSTCODE" => "78216",
|
24
|
+
"COUNTRY" => "US"
|
25
|
+
}
|
26
|
+
@address = Insightly::Address.build(data)
|
27
|
+
|
28
|
+
@address.remote_data.should == data
|
29
|
+
end
|
30
|
+
it "should be able to retrieve the data as an array" do
|
31
|
+
@address.remote_data["ADDRESS_ID"].should == 1
|
32
|
+
end
|
33
|
+
it "should be able to convert to json" do
|
34
|
+
@address.to_json.should == @address.remote_data.to_json
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should know if two addresses are equal" do
|
38
|
+
@address2 = Insightly::Address.build(@address.remote_data.clone)
|
39
|
+
@address2.should == @address
|
40
|
+
@address.country = nil
|
41
|
+
@address2.should_not == @address
|
42
|
+
end
|
43
|
+
it "should know if it is the same address" do
|
44
|
+
@address2 = Insightly::Address.build(@address.remote_data.clone)
|
45
|
+
@address2.should be_same_address(@address)
|
46
|
+
@address2.address_id = 2
|
47
|
+
@address2.should be_same_address(@address)
|
48
|
+
@address.country = "UK"
|
49
|
+
@address2.should_not be_same_address(@address)
|
50
|
+
|
51
|
+
end
|
52
|
+
it "should have accessor for address_id" do
|
53
|
+
@address.address_id = 2
|
54
|
+
@address.address_id.should == 2
|
55
|
+
end
|
56
|
+
it "should have an accessor for address type" do
|
57
|
+
@address.address_type = "Home"
|
58
|
+
@address.address_type.should == "Home"
|
59
|
+
end
|
60
|
+
it "should have an accessor for street" do
|
61
|
+
@address.street = "432 Other St"
|
62
|
+
@address.street.should == "432 Other St"
|
63
|
+
end
|
64
|
+
it "should have an accessor for city" do
|
65
|
+
@address.city = "Miami"
|
66
|
+
@address.city.should == "Miami"
|
67
|
+
end
|
68
|
+
it "should have an accessor for state" do
|
69
|
+
@address.state = "FL"
|
70
|
+
@address.state.should == "FL"
|
71
|
+
end
|
72
|
+
it "should have an accessor for postcode" do
|
73
|
+
@address.postcode = 123456
|
74
|
+
@address.postcode.should == 123456
|
75
|
+
end
|
76
|
+
it "should have an accessor for country" do
|
77
|
+
@address.country = "UK"
|
78
|
+
@address.country.should == "UK"
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,255 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Insightly::Contact do
|
4
|
+
before(:each) do
|
5
|
+
Insightly::Configuration.api_key = INSIGHTLY_API_KEY
|
6
|
+
|
7
|
+
@contact = Insightly::Contact.build({"CONTACT_ID" => 1234567,
|
8
|
+
"SALUTATION" => nil,
|
9
|
+
"FIRST_NAME" => "John",
|
10
|
+
"LAST_NAME" => "Doe",
|
11
|
+
"BACKGROUND" => nil,
|
12
|
+
"CONTACT_FIELD_1" => nil,
|
13
|
+
"CONTACT_FIELD_2" => nil,
|
14
|
+
"CONTACT_FIELD_3" => nil,
|
15
|
+
"CONTACT_FIELD_4" => nil,
|
16
|
+
"CONTACT_FIELD_5" => nil,
|
17
|
+
"CONTACT_FIELD_6" => nil,
|
18
|
+
"CONTACT_FIELD_7" => nil,
|
19
|
+
"CONTACT_FIELD_8" => nil,
|
20
|
+
"CONTACT_FIELD_9" => nil,
|
21
|
+
"CONTACT_FIELD_10" => nil,
|
22
|
+
"DATE_CREATED_UTC" => "2012-03-13 05:19:10",
|
23
|
+
"DATE_UPDATED_UTC" => "2012-03-13 05:19:10",
|
24
|
+
" ADDRESSES" => [],
|
25
|
+
"CONTACTINFOS" => [{
|
26
|
+
"CONTACT_INFO_ID" => 7894561,
|
27
|
+
"TYPE" => "EMAIL",
|
28
|
+
"SUBTYPE" => nil,
|
29
|
+
"LABEL" => "Home",
|
30
|
+
"DETAIL" => "johndoe@insight.ly"
|
31
|
+
}],
|
32
|
+
"VISIBLE_TO" => "EVERYONE",
|
33
|
+
"VISIBLE_TEAM_ID" => nil
|
34
|
+
})
|
35
|
+
# @task_links = Insightly::TaskLink.all
|
36
|
+
# d = 1
|
37
|
+
end
|
38
|
+
it "should have a url base" do
|
39
|
+
Insightly::Contact.new.url_base.should == "Contacts"
|
40
|
+
end
|
41
|
+
it "should know the contact id" do
|
42
|
+
|
43
|
+
end
|
44
|
+
it " should know the contact id " do
|
45
|
+
@contact.contact_id.should == 1234567
|
46
|
+
end
|
47
|
+
it "should know the remote id " do
|
48
|
+
@contact.remote_id.should == @contact.contact_id
|
49
|
+
end
|
50
|
+
|
51
|
+
# it "should be able to create an contact" do
|
52
|
+
# @contact = Insightly::Contact.new
|
53
|
+
#
|
54
|
+
# @contact.visible_to = "EVERYONE"
|
55
|
+
# @contact.first_name = "000 Dummy"
|
56
|
+
# @contact.last_name = "Test Contact"
|
57
|
+
# @contact.background = "This contact was created for test purposes and can be deleted."
|
58
|
+
#
|
59
|
+
# @contact.save
|
60
|
+
#
|
61
|
+
# @new_contact = Insightly::Contact.new(@contact.remote_id)
|
62
|
+
# @new_contact.last_name.should == @contact.last_name
|
63
|
+
#end
|
64
|
+
context "addresses" do
|
65
|
+
before(:each) do
|
66
|
+
@contact = Insightly::Contact.new(20315449)
|
67
|
+
@contact.addresses = []
|
68
|
+
@contact.save
|
69
|
+
|
70
|
+
@address = Insightly::Address.new
|
71
|
+
@address.address_type = "Work"
|
72
|
+
@address.street = "123 Main St"
|
73
|
+
@address.city = "Indianpolis"
|
74
|
+
@address.state = "IN"
|
75
|
+
@address.postcode = "46112"
|
76
|
+
@address.country = "US"
|
77
|
+
end
|
78
|
+
it "should allow you to update an address" do
|
79
|
+
@contact.addresses.should == []
|
80
|
+
@contact.add_address(@address)
|
81
|
+
|
82
|
+
@contact.save
|
83
|
+
@address = @contact.addresses.first
|
84
|
+
@address.state = "TX"
|
85
|
+
@contact.addresses = [@address]
|
86
|
+
@contact.addresses.length.should == 1
|
87
|
+
|
88
|
+
@contact.save
|
89
|
+
|
90
|
+
@contact.reload
|
91
|
+
|
92
|
+
@contact.addresses.length.should == 1
|
93
|
+
@contact.addresses.first.state.should == "TX"
|
94
|
+
end
|
95
|
+
it "should allow you to add an address" do
|
96
|
+
|
97
|
+
|
98
|
+
@contact.addresses.should == []
|
99
|
+
@contact.add_address(@address)
|
100
|
+
|
101
|
+
@contact.save
|
102
|
+
@contact.reload
|
103
|
+
@contact.addresses.length.should == 1
|
104
|
+
@contact.addresses.first.street.should == "123 Main St"
|
105
|
+
end
|
106
|
+
it "should allow you to remove an address" do
|
107
|
+
|
108
|
+
@contact.addresses.should == []
|
109
|
+
@contact.add_address(@address)
|
110
|
+
|
111
|
+
@contact.save
|
112
|
+
@contact.addresses = []
|
113
|
+
@contact.save
|
114
|
+
@contact.reload
|
115
|
+
@contact.addresses.length.should == 0
|
116
|
+
|
117
|
+
end
|
118
|
+
it "should allow you to clear all addresses" do
|
119
|
+
@contact.addresses.should == []
|
120
|
+
@contact.add_address(@address)
|
121
|
+
|
122
|
+
@contact.save
|
123
|
+
@contact.addresses = []
|
124
|
+
@contact.save
|
125
|
+
@contact.reload
|
126
|
+
@contact.addresses.length.should == 0
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should not add an address if the same address is already on the organization" do
|
130
|
+
|
131
|
+
@contact.addresses.should == []
|
132
|
+
@contact.add_address(@address)
|
133
|
+
|
134
|
+
@contact.add_address(@address)
|
135
|
+
@contact.addresses.length.should == 1
|
136
|
+
end
|
137
|
+
end
|
138
|
+
context "contact_infos" do
|
139
|
+
before(:each) do
|
140
|
+
@contact = Insightly::Contact.new(20315449)
|
141
|
+
@contact.contact_infos = []
|
142
|
+
@contact.save
|
143
|
+
|
144
|
+
@contact_info = Insightly::ContactInfo.new
|
145
|
+
@contact_info.type = "PHONE"
|
146
|
+
@contact_info.label = "Work"
|
147
|
+
@contact_info.subtype = nil
|
148
|
+
@contact_info.detail = "bob@aol.com"
|
149
|
+
|
150
|
+
end
|
151
|
+
it "should allow you to update an contact_info" do
|
152
|
+
@contact.contact_infos.should == []
|
153
|
+
@contact.add_contact_info(@contact_info)
|
154
|
+
|
155
|
+
@contact.save
|
156
|
+
@contact_info.detail = "bobroberts@aol.com"
|
157
|
+
@contact.contact_infos = [@contact_info]
|
158
|
+
@contact.save
|
159
|
+
@contact.reload
|
160
|
+
@contact.contact_infos.length.should == 1
|
161
|
+
@contact.contact_infos.first.detail.should == "bobroberts@aol.com"
|
162
|
+
end
|
163
|
+
it "should allow you to add an contact_info" do
|
164
|
+
|
165
|
+
|
166
|
+
@contact.contact_infos.should == []
|
167
|
+
@contact.add_contact_info(@contact_info)
|
168
|
+
|
169
|
+
@contact.save
|
170
|
+
@contact.reload
|
171
|
+
@contact.contact_infos.length.should == 1
|
172
|
+
@contact.contact_infos.first.detail.should == "bob@aol.com"
|
173
|
+
end
|
174
|
+
it "should allow you to remove an contact_info" do
|
175
|
+
|
176
|
+
@contact.contact_infos.should == []
|
177
|
+
@contact.add_contact_info(@contact_info)
|
178
|
+
|
179
|
+
@contact.save
|
180
|
+
@contact.contact_infos = []
|
181
|
+
@contact.save
|
182
|
+
@contact.reload
|
183
|
+
@contact.contact_infos.length.should == 0
|
184
|
+
|
185
|
+
end
|
186
|
+
it "should allow you to clear all contact_infos" do
|
187
|
+
@contact.contact_infos.should == []
|
188
|
+
@contact.add_contact_info(@contact_info)
|
189
|
+
|
190
|
+
@contact.save
|
191
|
+
@contact.contact_infos = []
|
192
|
+
@contact.save
|
193
|
+
@contact.reload
|
194
|
+
@contact.contact_infos.length.should == 0
|
195
|
+
end
|
196
|
+
end
|
197
|
+
context "Links" do
|
198
|
+
before(:each) do
|
199
|
+
@contact = Insightly::Contact.new(20315449)
|
200
|
+
@contact.links = []
|
201
|
+
@contact.save
|
202
|
+
|
203
|
+
|
204
|
+
@link = Insightly::Link.add_organisation(8936117, "Employeer", "Handles payment")
|
205
|
+
# @link = Insightly::Link.add_opportunity(968613,"Janitor", "Recent Hire")
|
206
|
+
end
|
207
|
+
it "should allow you to update an link" do
|
208
|
+
@contact.links.should == []
|
209
|
+
@contact.add_link(@link)
|
210
|
+
|
211
|
+
@contact.save
|
212
|
+
@link = @contact.links.first
|
213
|
+
@link.details = "Old Veteran"
|
214
|
+
@contact.links = [@link]
|
215
|
+
@contact.save
|
216
|
+
@contact.reload
|
217
|
+
@contact.links.length.should == 1
|
218
|
+
@contact.links.first.details.should == "Old Veteran"
|
219
|
+
end
|
220
|
+
it "should allow you to add an link" do
|
221
|
+
|
222
|
+
|
223
|
+
@contact.links.should == []
|
224
|
+
@contact.add_link(@link)
|
225
|
+
@contact.add_link(@link)
|
226
|
+
@contact.links.length.should == 2
|
227
|
+
@contact.save
|
228
|
+
@contact.reload
|
229
|
+
@contact.links.length.should == 1
|
230
|
+
@contact.links.first.details.should == "Handles payment"
|
231
|
+
end
|
232
|
+
it "should allow you to remove an link" do
|
233
|
+
|
234
|
+
@contact.links.should == []
|
235
|
+
@contact.add_link(@link)
|
236
|
+
|
237
|
+
@contact.save
|
238
|
+
@contact.links = []
|
239
|
+
@contact.save
|
240
|
+
@contact.reload
|
241
|
+
@contact.links.length.should == 0
|
242
|
+
|
243
|
+
end
|
244
|
+
it "should allow you to clear all links" do
|
245
|
+
@contact.links.should == []
|
246
|
+
@contact.add_link(@link)
|
247
|
+
|
248
|
+
@contact.save
|
249
|
+
@contact.links = []
|
250
|
+
@contact.save
|
251
|
+
@contact.reload
|
252
|
+
@contact.links.length.should == 0
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Insightly::Link do
|
4
|
+
before(:each) do
|
5
|
+
Insightly::Configuration.api_key = INSIGHTLY_API_KEY
|
6
|
+
@link = Insightly::Link.build({
|
7
|
+
"LINK_ID" => 1,
|
8
|
+
"ROLE" => "Manager",
|
9
|
+
"DETAILS" => "Added 2 weeks ago",
|
10
|
+
"CONTACT_ID" => 100,
|
11
|
+
|
12
|
+
})
|
13
|
+
end
|
14
|
+
it "should be able to build an link from data" do
|
15
|
+
data = {
|
16
|
+
"LINK_ID" => 1,
|
17
|
+
"ROLE" => "Manager",
|
18
|
+
"DETAILS" => "Added 2 weeks ago",
|
19
|
+
"CONTACT_ID" => 100,
|
20
|
+
|
21
|
+
}
|
22
|
+
@link = Insightly::Link.build(data)
|
23
|
+
|
24
|
+
@link.remote_data.should == data
|
25
|
+
end
|
26
|
+
it "should be able to retrieve the data as an array" do
|
27
|
+
@link.remote_data["LINK_ID"].should == 1
|
28
|
+
end
|
29
|
+
it "should be able to convert to json" do
|
30
|
+
@link.to_json.should == @link.remote_data.to_json
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should know if two linkes are equal" do
|
34
|
+
@link2 = Insightly::Link.build(@link.remote_data.clone)
|
35
|
+
@link2.should == @link
|
36
|
+
@link.role = nil
|
37
|
+
@link2.should_not == @link
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should have accessor for link_id" do
|
41
|
+
@link.link_id = 2
|
42
|
+
@link.link_id.should == 2
|
43
|
+
end
|
44
|
+
it "should have accessor for project_id" do
|
45
|
+
@link.project_id = 2
|
46
|
+
@link.project_id.should == 2
|
47
|
+
end
|
48
|
+
it "should have accessor for contact_id" do
|
49
|
+
@link.contact_id = 2
|
50
|
+
@link.contact_id.should == 2
|
51
|
+
end
|
52
|
+
it "should have accessor for opportunity_id" do
|
53
|
+
@link.opportunity_id = 2
|
54
|
+
@link.opportunity_id.should == 2
|
55
|
+
end
|
56
|
+
it "should have accessor for organisation_id" do
|
57
|
+
@link.organisation_id = 2
|
58
|
+
@link.organisation_id.should == 2
|
59
|
+
end
|
60
|
+
it "should have accessor for role" do
|
61
|
+
@link.role = "Worker"
|
62
|
+
@link.role.should == "Worker"
|
63
|
+
end
|
64
|
+
it "should have accessor for details" do
|
65
|
+
@link.details = "New hire"
|
66
|
+
@link.details.should == "New hire"
|
67
|
+
end
|
68
|
+
it "should make it easy to add a contact" do
|
69
|
+
@link = Insightly::Link.add_contact(100,"Consultant", "Charges a lot!")
|
70
|
+
@link.contact_id.should == 100
|
71
|
+
@link.details.should == "Charges a lot!"
|
72
|
+
@link.role.should == "Consultant"
|
73
|
+
@link.project_id.should be_nil
|
74
|
+
@link.opportunity_id.should be_nil
|
75
|
+
@link.organisation_id.should be_nil
|
76
|
+
|
77
|
+
end
|
78
|
+
it "should make it easy to add an opportunity" do
|
79
|
+
@link = Insightly::Link.add_opportunity(100,"Big Sale", "Quaterly Project")
|
80
|
+
@link.opportunity_id.should == 100
|
81
|
+
@link.details.should == "Quaterly Project"
|
82
|
+
@link.role.should == "Big Sale"
|
83
|
+
@link.project_id.should be_nil
|
84
|
+
@link.contact_id.should be_nil
|
85
|
+
@link.organisation_id.should be_nil
|
86
|
+
|
87
|
+
end
|
88
|
+
it "should make it easy to add an organisation" do
|
89
|
+
@link = Insightly::Link.add_organisation(100,"Walmart", "Low Prices")
|
90
|
+
@link.organisation_id.should == 100
|
91
|
+
@link.details.should == "Low Prices"
|
92
|
+
@link.role.should == "Walmart"
|
93
|
+
@link.project_id.should be_nil
|
94
|
+
@link.contact_id.should be_nil
|
95
|
+
@link.opportunity_id.should be_nil
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|