landslider 0.4.5 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -32,7 +32,7 @@ This gem requires the following gems:
32
32
  LS_API_KEY = Digest::MD5.hexdigest(LS_API_PASSWORD + LS_INSTANCE_NAME)
33
33
  LS_API_ENDPOINT = {
34
34
  :uri => "https://#{LS_INSTANCE_NAME}.api.landslide.com/webservices/SoapService",
35
- :version => 2
35
+ :version => 1
36
36
  }
37
37
 
38
38
  response = Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)
@@ -49,13 +49,19 @@ This gem requires the following gems:
49
49
  * getApiVersion
50
50
  * getAccounts
51
51
  * getAccountById
52
+ * getAccountCustomFields
52
53
  * getAccountContacts
53
54
  * getAccountNotes
54
55
  * getAccountOpportunities
56
+ * getContacts
57
+ * getContactCustomFields
55
58
  * getContactNotes
56
59
  * getInstanceInformation
57
60
  * getLeads
61
+ * getLeadCustomFields
58
62
  * getLeadNotes
63
+ * getOpportunities
64
+ * getOpportunityCustomFields
59
65
  * getOpportunityNotes
60
66
  * getUserInformation
61
67
  * getUserInformationById
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 4
4
- :patch: 5
4
+ :patch: 7
5
5
  :build:
data/landslider.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{landslider}
8
- s.version = "0.4.5"
8
+ s.version = "0.4.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jay Prall"]
data/lib/landslider.rb CHANGED
@@ -20,6 +20,13 @@ class Landslider < Handsoap::Service
20
20
  sh.add('urn:sessionId', self.session_id)
21
21
  }
22
22
  end
23
+
24
+ def on_after_create_http_request(http_request)
25
+ http_request.headers.merge!({'user-agent' => ["landslider-ruby-gem-version-0.4.6"]})
26
+
27
+ # TODO: use cookies to maintain session state
28
+ # http_request.headers.merge!({'cookie' => ["JSESSIONID=#{self.session_id}"]})
29
+ end
23
30
 
24
31
  def on_http_error(response)
25
32
  puts response.inspect
@@ -83,9 +90,15 @@ class Landslider < Handsoap::Service
83
90
  response = invoke("getAccountContacts", :soap_action => :none) do |message|
84
91
  message.add 'accountId', account_id
85
92
  end
86
-
93
+
87
94
  node = response.document.xpath('//ns:getAccountContactsResponse', ns)
88
- parse_get_account_contacts_result(node)
95
+ parse_get_account_contacts_result(node)
96
+ end
97
+
98
+ def get_account_custom_fields(session_id)
99
+ response = invoke("getAccountCustomFields")
100
+ node = response.document.xpath('//ns:getAccountCustomFieldsResponse', ns)
101
+ parse_get_entity_custom_fields_result(node)
89
102
  end
90
103
 
91
104
  def get_account_notes(session_id, account_id, first_result_position=1, total_results_requested=25)
@@ -117,7 +130,28 @@ class Landslider < Handsoap::Service
117
130
  end
118
131
 
119
132
  node = response.document.xpath('//ns:getAccountOpportunitiesResponse', ns)
120
- parse_get_account_opportunities_result(node)
133
+ parse_get_account_opportunities_result(node)
134
+ end
135
+
136
+ def get_contacts(session_id, first_result_position=1, total_results_requested=25)
137
+ self.session_id = session_id
138
+
139
+ response = invoke("getContacts", :soap_action => :none) do |message|
140
+ message.add('contactsRequest') { |c|
141
+ c.add 'firstResultPosition', first_result_position
142
+ c.add 'totalResultsRequested', total_results_requested
143
+ }
144
+ end
145
+ node = response.document.xpath('//ns:getContactsResponse', ns)
146
+ parse_get_contacts_result(node)
147
+ end
148
+
149
+ def get_contact_custom_fields(session_id)
150
+ self.session_id = session_id
151
+
152
+ response = invoke("getContactCustomFields")
153
+ node = response.document.xpath('//ns:getContactCustomFieldsResponse', ns)
154
+ parse_get_entity_custom_fields_result(node)
121
155
  end
122
156
 
123
157
  def get_contact_notes(session_id, contact_id, first_result_position=1, total_results_requested=25)
@@ -154,11 +188,18 @@ class Landslider < Handsoap::Service
154
188
  lr.add 'firstResultPosition', first_result_position
155
189
  lr.add 'totalResultsRequested', total_results_requested
156
190
  }
157
- end
191
+ end
192
+
158
193
  node = response.document.xpath('//ns:getLeadsResponse', ns)
159
194
  parse_get_leads_result(node)
160
195
  end
161
196
 
197
+ def get_lead_custom_fields(session_id)
198
+ response = invoke("getLeadCustomFields")
199
+ node = response.document.xpath('//ns:getLeadCustomFieldsResponse', ns)
200
+ parse_get_entity_custom_fields_result(node)
201
+ end
202
+
162
203
  def get_lead_notes(session_id, lead_id, first_result_position=1, total_results_requested=25)
163
204
  self.session_id = session_id
164
205
 
@@ -173,7 +214,27 @@ class Landslider < Handsoap::Service
173
214
  node = response.document.xpath('//ns:getLeadNotesResponse', ns)
174
215
  parse_get_lead_notes_result(node)
175
216
  end
217
+
218
+ def get_opportunities(session_id, first_result_position=1, total_results_requested=25)
219
+ self.session_id = session_id
220
+
221
+ response = invoke("getOpportunities", :soap_action => :none) do |message|
222
+ message.add('opportunityRequest') { |req|
223
+ req.add 'firstResultPosition', first_result_position
224
+ req.add 'totalResultsRequested', total_results_requested
225
+ }
226
+ end
227
+ node = response.document.xpath('//ns:getOpportunitiesResponse', ns)
228
+ parse_get_opportunities_result(node)
229
+ end
176
230
 
231
+ def get_opportunity_custom_fields(session_id)
232
+ self.session_id = session_id
233
+
234
+ response = invoke("getOpportunityCustomFields")
235
+ node = response.document.xpath('//ns:getOpportunityCustomFieldsResponse', ns)
236
+ parse_get_entity_custom_fields_result(node)
237
+ end
177
238
 
178
239
  def get_opportunity_notes(session_id, opportunity_id, first_result_position=1, total_results_requested=25)
179
240
  self.session_id = session_id
@@ -291,6 +352,16 @@ class Landslider < Handsoap::Service
291
352
  }
292
353
  end
293
354
 
355
+ def parse_get_contacts_result(node)
356
+ {
357
+ :contacts => node.xpath('./*/contactList', ns).map { |child| parse_contact(child) },
358
+
359
+ :error => xml_to_bool(node, './*/error/text()'),
360
+ :results_returned => xml_to_int(node, './*/resultsReturned/text()'),
361
+ :total_results_available => xml_to_int(node, './*/totalResultsAvailable/text()')
362
+ }
363
+ end
364
+
294
365
  def parse_get_contact_notes_result(node)
295
366
  notes = parse_notes(node)
296
367
  {
@@ -304,6 +375,17 @@ class Landslider < Handsoap::Service
304
375
  }.merge(notes)
305
376
  end
306
377
 
378
+ def parse_get_entity_custom_fields_result(node)
379
+ {
380
+ :custom_fields => node.xpath('./*/customFields', ns).map { |child| parse_custom_field(child) },
381
+
382
+ :error => xml_to_bool(node, './*/error/text()'),
383
+ :error_code => xml_to_int(node, './*/errorCode/text()'),
384
+ :result_msg => xml_to_str(node, './*/resultMsg/text()'),
385
+ :status_code => xml_to_int(node, './*/statusCode/text()')
386
+ }
387
+ end
388
+
307
389
  def parse_get_instance_information_result(node)
308
390
  {
309
391
  :address => parse_address(node.xpath('./*/address')),
@@ -317,7 +399,6 @@ class Landslider < Handsoap::Service
317
399
  }
318
400
  end
319
401
 
320
-
321
402
  def parse_get_leads_result(node)
322
403
  leads = parse_leads(node)
323
404
  {
@@ -343,6 +424,19 @@ class Landslider < Handsoap::Service
343
424
  }.merge(notes)
344
425
  end
345
426
 
427
+ def parse_get_opportunities_result(node)
428
+ {
429
+ :opportunities => node.xpath('./*/opportunityList', ns).map { |child| parse_opportunity(child) },
430
+
431
+ :error => xml_to_bool(node, './*/error/text()'),
432
+ :error_code => xml_to_int(node, './*/errorCode/text()'),
433
+ :result_msg => xml_to_str(node, './*/resultMsg/text()'),
434
+ :status_code => xml_to_int(node, './*/statusCode/text()'),
435
+ :results_returned => xml_to_int(node, './*/resultsReturned/text()'),
436
+ :total_results_available => xml_to_int(node, './*/totalResultsAvailable/text()')
437
+ }
438
+ end
439
+
346
440
  def parse_get_opportunity_notes_result(node)
347
441
  notes = parse_notes(node)
348
442
  {
@@ -396,9 +490,6 @@ class Landslider < Handsoap::Service
396
490
  # WsAccountType
397
491
  def parse_account_type(node)
398
492
  {
399
- #:entity_id => xml_to_str(node, './entityId/text()'),
400
- #:entity_type => xml_to_str(node, './entityType/text()')
401
- #:account_type_id => xml_to_str(node, './accountTypeId/text()'),
402
493
  :account_type => xml_to_str(node, './accountType/text()')
403
494
  }
404
495
  end
@@ -406,9 +497,6 @@ class Landslider < Handsoap::Service
406
497
  # WsAddress
407
498
  def parse_address(node)
408
499
  {
409
- #:entity_id => xml_to_str(node, './entityId/text()'),
410
- #:entity_type => xml_to_str(node, './entityType/text()'),
411
- #:address_id => xml_to_str(node, './addressId/text()'),
412
500
  :address => xml_to_str(node, './address1/text()'),
413
501
  :city => xml_to_str(node, './city/text()'),
414
502
  :state => xml_to_str(node, './state/text()'),
@@ -427,7 +515,11 @@ class Landslider < Handsoap::Service
427
515
  :work_phone => xml_to_str(node, './workPhone/text()'),
428
516
  :home_phone => xml_to_str(node, './homePhone/text()'),
429
517
  :email => xml_to_str(node, './email/text()'),
430
- :owner_id => xml_to_str(node, './ownerId/text()')
518
+ :title => xml_to_str(node, './homePhone/text()'),
519
+ :reports_to => xml_to_str(node, './reportsTo/text()'),
520
+ :owner_id => xml_to_int(node, './ownerId/text()'),
521
+ :contact_id => xml_to_int(node, './contactId/text()'),
522
+ :custom_fields => node.xpath('./customFields', ns).map { |child| parse_custom_field(child) }
431
523
  }
432
524
  end
433
525
 
@@ -461,18 +553,16 @@ class Landslider < Handsoap::Service
461
553
  :notes => node.xpath('./*/notes', ns).map { |child| parse_note(child) }
462
554
  }
463
555
  end
464
-
556
+
465
557
  # WsNote
466
558
  def parse_note(node)
467
559
  {
468
- #:entity_id => xml_to_str(node, './entityId/text()'),
469
- #:entity_type => xml_to_str(node, './entityType/text()'),
470
- :archived_by => xml_to_int(node, './archivedBy/text()'),
471
560
  :created_by => xml_to_int(node, './createdBy/text()'),
472
561
  :created_on => xml_to_date(node, './createdOn/text()'),
473
562
  :latest => xml_to_bool(node, './latest/text()'),
563
+ :note_html => xml_to_str(node, './note/text()'),
474
564
  :note_id => xml_to_int(node, './noteId/text()'),
475
- :note_html => xml_to_str(node, './note/text()')
565
+ :updated_on => xml_to_date(node, './updatedOn/text()'),
476
566
  }
477
567
  end
478
568
 
@@ -485,16 +575,20 @@ class Landslider < Handsoap::Service
485
575
  # WsLead
486
576
  def parse_lead(node)
487
577
  {
488
- :name => xml_to_str(node, './name/text()'),
489
- :lead_source => xml_to_str(node, './leadSource/source/text()'),
578
+ :account_id => xml_to_int(node, './accountId/text()'),
579
+ :converted => xml_to_bool(node, './converted/text()'),
580
+ :created_by => xml_to_int(node, './createdBy/text()'),
581
+ :created_on => xml_to_date(node, './createdOn/text()'),
582
+ :hot => xml_to_bool(node, './hot/text()'),
583
+ :lead_id => xml_to_int(node, './leadId/text()'),
490
584
  :lead_rating => xml_to_str(node, './leadRating/rating/text()'),
585
+ :lead_source => xml_to_str(node, './leadSource/source/text()'),
491
586
  :lead_status => xml_to_str(node, './leadStatus/status/text()'),
492
- :account_id => xml_to_int(node, './accountId/text()'),
493
- :primary_owner_id => xml_to_int(node, './primaryOwnerId/text()'),
587
+ :name => xml_to_str(node, './name/text()'),
494
588
  :ok_to_call => xml_to_bool(node, './okToCall/text()'),
495
589
  :ok_to_email => xml_to_bool(node, './okToEmail/text()'),
496
- :hot => xml_to_bool(node, './hot/text()'),
497
- :converted => xml_to_bool(node, './converted/text()')
590
+ :primary_owner_id => xml_to_int(node, './primaryOwnerId/text()'),
591
+ :custom_fields => node.xpath('./customFields', ns).map { |child| parse_custom_field(child) }
498
592
 
499
593
  }
500
594
  end
@@ -502,19 +596,20 @@ class Landslider < Handsoap::Service
502
596
  # WsOpportunity
503
597
  def parse_opportunity(node)
504
598
  {
505
- #:entity_id => xml_to_str(node, './entityId/text()'),
506
- #:entity_type => xml_to_str(node, './entityType/text()'),
507
599
  :account_id => xml_to_int(node, './accountId/text()'),
508
600
  :account_name => xml_to_str(node, './accountName/text()'),
509
- :opportunity_id => xml_to_int(node, './opportunityId/text()'),
510
- :name => xml_to_str(node, './name/text()'),
511
- :deal_value => xml_to_str(node, './dealValue/text()'),
512
601
  :confidence => xml_to_str(node, './confidence/text()'),
602
+ :current_phase_name => xml_to_str(node, './currentPhaseName/text()'),
603
+ :deal_value => xml_to_str(node, './dealValue/text()'),
604
+ :description => xml_to_str(node, './description/text()'),
605
+ :hot => xml_to_bool(node, './hot/text()'),
606
+ :name => xml_to_str(node, './name/text()'),
607
+ :opportunity_id => xml_to_int(node, './opportunityId/text()'),
513
608
  :opportunity_status => xml_to_str(node, './opportunityStatus/status/text()'),
609
+ :primary_owner_id => xml_to_int(node, './primaryOwnerId/text()'),
514
610
  :selling_process => xml_to_str(node, './sellingProcess/sellingProcess/text()'),
515
611
  :selling_process_id => xml_to_int(node, './sellingProcess/sellingProcessId/text()'),
516
- :primary_owner_id => xml_to_int(node, './primaryOwnerId/text()'),
517
- :current_phase_name => xml_to_str(node, './currentPhaseName/text()')
612
+ :start_date => xml_to_date(node, './startDate/text()')
518
613
  }
519
614
  end
520
615
 
@@ -6,16 +6,15 @@ class LandsliderTest < Test::Unit::TestCase
6
6
  JAYTEST_ACCOUNT_ID = 55647822
7
7
 
8
8
  def setup
9
- # TODO: fetch a session_id once
10
- # if $sid.nil?
9
+ if $sid.nil?
10
+ # only get a session once
11
11
  result = Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)
12
12
  $sid = result[:session_id]
13
- # end
14
- #puts "using #{$sid} to login"
13
+ end
15
14
  end
16
15
 
17
16
  def test_landslider_login
18
- # other tests should use $sid for authenticatoin
17
+ # other tests should use $sid for authentication
19
18
  result = Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)
20
19
 
21
20
  assert_not_nil result
@@ -72,11 +71,17 @@ class LandsliderTest < Test::Unit::TestCase
72
71
 
73
72
  validate_standard_api_result result
74
73
  assert_equal Array, result[:contacts].class
74
+ assert_not_nil result[:contacts].first[:contact_id]
75
75
  assert result[:contacts].all? { |con| !con[:last_name].nil? }, "last name required"
76
76
  end
77
77
 
78
+ def test_landslider_get_account_custom_fields
79
+ result = Landslider.get_account_custom_fields($sid)
80
+ assert_not_nil result[:custom_fields]
81
+ assert_not_nil result[:custom_fields].first[:custom_field_id]
82
+ end
83
+
78
84
  def test_landslider_get_account_notes
79
- # exists on jaytest
80
85
  result = Landslider.get_account_notes($sid, JAYTEST_ACCOUNT_ID)
81
86
 
82
87
  validate_standard_api_result result
@@ -86,7 +91,7 @@ class LandsliderTest < Test::Unit::TestCase
86
91
  def test_landslider_get_account_opportunities
87
92
  # exists on jaytest
88
93
  result = Landslider.get_account_opportunities($sid, 51858821)
89
-
94
+
90
95
  assert_equal false, result[:error]
91
96
  assert_equal Array, result[:opportunities].class
92
97
 
@@ -98,8 +103,20 @@ class LandsliderTest < Test::Unit::TestCase
98
103
  }, "opportunities require a name, account, deal value and selling process"
99
104
  end
100
105
 
106
+ def test_landslider_get_contacts
107
+ result = Landslider.get_contacts($sid)
108
+ assert_not_nil result
109
+ assert_not_nil result[:contacts]
110
+ assert_not_nil result[:contacts].first[:custom_fields]
111
+ end
112
+
113
+ def test_landslider_get_contact_custom_fields
114
+ result = Landslider.get_contact_custom_fields($sid)
115
+ assert_not_nil result[:custom_fields]
116
+ assert_not_nil result[:custom_fields].first[:custom_field_id]
117
+ end
118
+
101
119
  def test_landslider_get_contact_notes
102
- # exists on jaytest
103
120
  result = Landslider.get_contact_notes($sid, 62813411)
104
121
 
105
122
  validate_standard_api_result result
@@ -117,14 +134,25 @@ class LandsliderTest < Test::Unit::TestCase
117
134
  assert_not_nil result[:instance_url]
118
135
  end
119
136
 
137
+ def test_landslider_get_opportunity_custom_fields
138
+ result = Landslider.get_opportunity_custom_fields($sid)
139
+ assert_not_nil result[:custom_fields]
140
+ assert_not_nil result[:custom_fields].first[:custom_field_id]
141
+ end
142
+
120
143
  def test_landslider_get_leads
121
144
  result = Landslider.get_leads($sid, 51857822)
122
-
145
+
123
146
  validate_standard_api_result result
124
147
  assert_not_nil result[:leads]
125
148
  assert_equal Array, result[:leads].class
126
149
  end
127
150
 
151
+ def test_landslider_get_lead_custom_fields
152
+ result = Landslider.get_lead_custom_fields($sid)
153
+ assert_not_nil result[:custom_fields]
154
+ assert_not_nil result[:custom_fields].first[:custom_field_id]
155
+ end
128
156
 
129
157
  def test_landslider_get_lead_notes
130
158
  # exists on jaytest
@@ -134,6 +162,10 @@ class LandsliderTest < Test::Unit::TestCase
134
162
  validate_at_least_one_note_returned result
135
163
  end
136
164
 
165
+ def test_landslider_get_opportunities
166
+ result = Landslider.get_opportunities($sid)
167
+ assert_not_nil result[:opportunities]
168
+ end
137
169
 
138
170
  def test_landslider_get_opportunity_notes
139
171
  # exists on jaytest
data/test/test_helper.rb CHANGED
@@ -7,7 +7,7 @@ LS_API_PASSWORD = 'Applogin1'
7
7
  LS_API_KEY = Digest::MD5.hexdigest(LS_API_PASSWORD + LS_INSTANCE_NAME)
8
8
  LS_API_ENDPOINT = {
9
9
  :uri => "https://#{LS_INSTANCE_NAME}.api.landslide.com/webservices/SoapService",
10
- :version => 2
10
+ :version => 1
11
11
  }
12
12
 
13
13
  require 'test/unit'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: landslider
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.5
5
+ version: 0.4.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jay Prall