landslider 0.5.12 → 0.5.15

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/HISTORY.md CHANGED
@@ -1,12 +1,15 @@
1
1
 
2
- # landslider 0.5.7 2011-05-07
2
+ # landslider 0.5.13 2011-05-22
3
+ * add support for the runMyListbyId api call
4
+
5
+ # landslider 0.5.7 2011-05-07
3
6
  * added support for WsSearch, WsSearchCriterion, Ws*NoteSearch
4
7
 
5
- # landslider 0.3.2 2011-04-28
8
+ # landslider 0.3.2 2011-04-28
6
9
 
7
10
  * add in custom field data for accounts
8
11
  * new api methods: getInstanceInformation, getUserInformationById
9
12
 
10
- # landslider 0.2.5 2011-04-27
13
+ # landslider 0.2.5 2011-04-27
11
14
 
12
15
  * remove curb dependency
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  Landslider
2
2
  ==========
3
3
 
4
- Ruby interface to Landslide's SOAP-based API
4
+ A Ruby library for interacting with Landslides SOAP-based API
5
5
 
6
6
  Introduction
7
7
  ------------
8
8
 
9
9
  This gem can be used to communicate with Landslide's SOAP-based API using ruby code.
10
10
 
11
- [WSDL](https://jaytest.api.landslide.com/webservices/SoapService?wsdl) endpoint url: [https://jaytest.api.landslide.com/webservices/SoapService?wsdl](https://jaytest.api.landslide.com/webservices/SoapService?wsdl)
11
+ [WSDL](https://instance_name.api.landslide.com/webservices/SoapService?wsdl) endpoint url: [https://instance_name.api.landslide.com/webservices/SoapService?wsdl](https://instance_name.api.landslide.com/webservices/SoapService?wsdl)
12
12
 
13
13
  If you already have a landslide account, contact support to enable the API. You can also start a 30-day trial account [here](http://www.landslide.com/~jayp/en/trial).
14
14
 
@@ -31,8 +31,12 @@ Read the [ruby doc](http://rdoc.info/github/j4y/landslider).
31
31
  Configuration
32
32
  -------------
33
33
 
34
- See bin/genarate_api_key.rb for details on generating your API key
35
-
34
+ There is a rake task to generate the configuration settings.
35
+
36
+ $ rake landslider:gen_config
37
+
38
+ Example config:
39
+
36
40
  LS_INSTANCE_NAME = 'jaytest'
37
41
  LS_API_USERNAME = 'jayp@landslide.com'
38
42
  LS_API_KEY = '53308ccbdcb7f23fbd81a0b2ebcf12a4'
@@ -41,7 +45,7 @@ Usage
41
45
  -----
42
46
 
43
47
  This is calling login to get a session id which is then used to get a list of accounts.
44
-
48
+
45
49
  require 'landslider'
46
50
  response = Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)
47
51
  response = Landslider.get_accounts(response[:session_id])
@@ -50,8 +54,6 @@ This is calling login to get a session id which is then used to get a list of ac
50
54
  end
51
55
 
52
56
 
53
-
54
-
55
57
  Testing
56
58
  -------
57
59
 
@@ -60,7 +62,7 @@ The default rake task is set to run the tests.
60
62
  $ rake
61
63
 
62
64
  Tests are needed here because the API uses a specific XML structure for requests and responses.
63
-
65
+
64
66
 
65
67
  Contributing
66
68
  ------------
@@ -98,6 +100,7 @@ API methods
98
100
  * getOpportunityNotes
99
101
  * getUserInformation
100
102
  * getUserInformationById
103
+ * runMyListbyId
101
104
 
102
105
  TODO
103
106
  ----
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 5
4
- :patch: 12
4
+ :patch: 15
5
5
  :build:
data/landslider.gemspec CHANGED
@@ -5,15 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{landslider}
8
- s.version = "0.5.12"
8
+ s.version = "0.5.15"
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"]
12
- s.date = %q{2011-05-18}
13
- s.default_executable = %q{generate_api_key.rb}
12
+ s.date = %q{2011-05-22}
14
13
  s.description = %q{Landslider is a ruby interface to the Landslide SOAP-based API}
15
14
  s.email = %q{jay@j4y.net}
16
- s.executables = ["generate_api_key.rb"]
17
15
  s.extra_rdoc_files = [
18
16
  "LICENSE",
19
17
  "README.md"
@@ -26,7 +24,6 @@ Gem::Specification.new do |s|
26
24
  "README.md",
27
25
  "Rakefile",
28
26
  "VERSION.yml",
29
- "bin/generate_api_key.rb",
30
27
  "init.rb",
31
28
  "landslider.gemspec",
32
29
  "lib/landslider.rb",
@@ -34,6 +31,7 @@ Gem::Specification.new do |s|
34
31
  "lib/landslider/entities/ws_account.rb",
35
32
  "lib/landslider/entities/ws_account_note.rb",
36
33
  "lib/landslider/entities/ws_account_note_search.rb",
34
+ "lib/landslider/entities/ws_account_search.rb",
37
35
  "lib/landslider/entities/ws_address.rb",
38
36
  "lib/landslider/entities/ws_contact.rb",
39
37
  "lib/landslider/entities/ws_contact_note.rb",
@@ -51,6 +49,7 @@ Gem::Specification.new do |s|
51
49
  "lib/landslider/entities/ws_opportunity.rb",
52
50
  "lib/landslider/entities/ws_opportunity_note.rb",
53
51
  "lib/landslider/entities/ws_opportunity_note_search.rb",
52
+ "lib/landslider/entities/ws_opportunity_search.rb",
54
53
  "lib/landslider/entities/ws_opportunity_status.rb",
55
54
  "lib/landslider/entities/ws_payment_term.rb",
56
55
  "lib/landslider/entities/ws_pick_list_item.rb",
@@ -66,9 +65,11 @@ Gem::Specification.new do |s|
66
65
  "lib/landslider/entities/ws_selling_process.rb",
67
66
  "lib/landslider/entities/ws_user.rb",
68
67
  "lib/landslider/entities/ws_user_search.rb",
68
+ "tasks/landslider.rake",
69
69
  "test/get_account_types_test.rb",
70
70
  "test/get_accounts_test.rb",
71
71
  "test/landslider_test.rb",
72
+ "test/run_mylist_by_id_test.rb",
72
73
  "test/test_helper.rb",
73
74
  "test/ws_account_note_search_test.rb",
74
75
  "test/ws_contact_note_search_test.rb",
@@ -81,17 +82,6 @@ Gem::Specification.new do |s|
81
82
  s.require_paths = ["lib"]
82
83
  s.rubygems_version = %q{1.6.2}
83
84
  s.summary = %q{Landslide Ruby}
84
- s.test_files = [
85
- "test/get_account_types_test.rb",
86
- "test/get_accounts_test.rb",
87
- "test/landslider_test.rb",
88
- "test/test_helper.rb",
89
- "test/ws_account_note_search_test.rb",
90
- "test/ws_contact_note_search_test.rb",
91
- "test/ws_lead_note_search_test.rb",
92
- "test/ws_opportunity_note_search_test.rb",
93
- "test/ws_search_test.rb"
94
- ]
95
85
 
96
86
  if s.respond_to? :specification_version then
97
87
  s.specification_version = 3
@@ -0,0 +1,7 @@
1
+ class Landslider
2
+
3
+ # @deprecated Use {#WsSearchCriterion} instead.
4
+ class WsAccountSearch < WsSearch
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class Landslider
2
+
3
+ # @deprecated Use {#WsSearchCriterion} instead.
4
+ class WsOpportunitySearch < WsSearch
5
+ end
6
+
7
+ end
data/lib/landslider.rb CHANGED
@@ -1,4 +1,6 @@
1
1
 
2
+ require 'handsoap'
3
+
2
4
  # Landslider is a soap client to the Landslide CRM SOAP-based API
3
5
  # Example:
4
6
  #
@@ -8,10 +10,6 @@
8
10
  # response[:accounts].each do |account|
9
11
  # puts "id: #{account[:account_id]} name: #{account[:account_name]}"
10
12
  # end
11
- #
12
-
13
- require 'handsoap'
14
-
15
13
  class Landslider < Handsoap::Service
16
14
 
17
15
  require 'landslider/entities'
@@ -289,6 +287,7 @@ class Landslider < Handsoap::Service
289
287
  end
290
288
 
291
289
  # @param [String] session_id
290
+ # @param [String] user_id usually in the form of user@example.com
292
291
  # @return [Hash]
293
292
  def get_user_information(session_id, user_id)
294
293
 
@@ -301,6 +300,7 @@ class Landslider < Handsoap::Service
301
300
  end
302
301
 
303
302
  # @param [String] session_id
303
+ # @param [Integer] user_id
304
304
  # @return [Hash]
305
305
  def get_user_information_by_id(session_id, user_id)
306
306
  self.session_id = session_id
@@ -312,10 +312,23 @@ class Landslider < Handsoap::Service
312
312
  parse_get_user_information_by_id_result(node)
313
313
  end
314
314
 
315
+ # @param [String] session_id
316
+ # @param [Integer] mylist_id
317
+ # @return [Hash]
318
+ def run_mylist_by_id(session_id, mylist_id)
319
+ self.session_id = session_id
320
+
321
+ response = invoke('runMyListbyId', :soap_action => :none) do |message|
322
+ message.add 'myListId', mylist_id
323
+ end
324
+ node = response.document.xpath('//ns:runMyListbyIdResponse', ns)
325
+ parse_run_mylist_by_id_result(node)
326
+ end
327
+
315
328
  private
316
329
 
317
330
  def ns
318
- { 'ns' => LS_API_NAMESPACE }
331
+ { 'ns' => LS_API_NAMESPACE, 'xsi' => 'http://www.w3.org/2001/XMLSchema-instance' }
319
332
  end
320
333
 
321
334
  def parse_login_result(node)
@@ -509,6 +522,16 @@ class Landslider < Handsoap::Service
509
522
  }
510
523
  end
511
524
 
525
+ def parse_run_mylist_by_id_result(node)
526
+ {
527
+ :results => node.xpath('MyListQueryResultSet/myList', ns).map { |child| parse_mylist_result(child) },
528
+
529
+ :error => xml_to_bool(node, 'MyListQueryResultSet/error/text()'),
530
+ :results_returned => xml_to_int(node, 'MyListQueryResultSet/resultsReturned/text()'),
531
+ :total_results_available => xml_to_int(node, 'MyListQueryResultSet/totalResultsAvailable/text()')
532
+ }
533
+ end
534
+
512
535
  # WsAccount
513
536
  def parse_account(node)
514
537
  {
@@ -642,6 +665,23 @@ class Landslider < Handsoap::Service
642
665
  }
643
666
  end
644
667
 
668
+ # There are two dynamic pieces of the mylist results
669
+ # 1) A mylist result has type which is either WsAccount, WsContact, WsOpportunity, WsLead, WsNote, etc.
670
+ # 2) The fields available in the mylist result are selected as fields to display when the user builds the mylist
671
+ def parse_mylist_result(node)
672
+ result_type = xml_to_str(node, '@xsi:type')
673
+ case result_type
674
+ when "ns2:wsContact"
675
+ parse_contact(node)
676
+ when "ns2:wsLead"
677
+ parse_lead(node)
678
+ when "ns2:wsOpportunity"
679
+ parse_opportunity(node)
680
+ else
681
+ raise NotImplementedError.new result_type
682
+ end
683
+ end
684
+
645
685
  # WsOpportunity
646
686
  def parse_opportunity(node)
647
687
  {
@@ -0,0 +1,27 @@
1
+ require 'digest/md5'
2
+
3
+ namespace :landslider do
4
+
5
+ desc "generate configuration for the landslide api"
6
+ task :gen_config do
7
+
8
+ # TODO: refactor and test
9
+ def get_input
10
+ $stdin.gets.to_s.chomp
11
+ end
12
+
13
+ print "Enter a Landslide instance name: "
14
+ instance_name = get_input
15
+
16
+ print "Enter your api username:"
17
+ api_user = get_input
18
+
19
+ print "Enter your api password:"
20
+ api_password = get_input
21
+
22
+ puts "LS_INSTANCE_NAME = '#{instance_name}'"
23
+ puts "LS_API_USERNAME = '#{api_user}'"
24
+ # api key is just an md5 hash of the api password and instance name
25
+ puts "LS_API_KEY = '#{Digest::MD5.hexdigest(api_password + instance_name)}'"
26
+ end
27
+ end
@@ -135,7 +135,7 @@ class LandsliderTest < Test::Unit::TestCase
135
135
  assert_not_nil result[:custom_fields]
136
136
  assert_not_nil result[:custom_fields].first[:custom_field_id]
137
137
  end
138
-
138
+
139
139
  def test_landslider_get_user_information
140
140
  result = Landslider.get_user_information($sid, 'jayp@landslide.com')
141
141
 
@@ -0,0 +1,22 @@
1
+
2
+ require 'test_helper'
3
+
4
+ class RunMylistByIdTest < Test::Unit::TestCase
5
+
6
+ # this test depends on data in the jaytest instance
7
+ JAYTEST_MYLIST_ID = 10293817
8
+
9
+ def setup
10
+ $sid7 ||= Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)[:session_id]
11
+ end
12
+
13
+ def test_landslider_run_mylist_by_id
14
+
15
+ result = Landslider.run_mylist_by_id($sid7, JAYTEST_MYLIST_ID)
16
+ assert_equal false, result[:error]
17
+
18
+ assert_operator result[:results_returned], :>=, 0
19
+ assert_kind_of Array, result[:results]
20
+ end
21
+
22
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: landslider
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.12
5
+ version: 0.5.15
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jay Prall
@@ -10,8 +10,8 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-18 00:00:00 -04:00
14
- default_executable: generate_api_key.rb
13
+ date: 2011-05-22 00:00:00 -04:00
14
+ default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: jeweler
@@ -59,8 +59,8 @@ dependencies:
59
59
  version_requirements: *id004
60
60
  description: Landslider is a ruby interface to the Landslide SOAP-based API
61
61
  email: jay@j4y.net
62
- executables:
63
- - generate_api_key.rb
62
+ executables: []
63
+
64
64
  extensions: []
65
65
 
66
66
  extra_rdoc_files:
@@ -74,7 +74,6 @@ files:
74
74
  - README.md
75
75
  - Rakefile
76
76
  - VERSION.yml
77
- - bin/generate_api_key.rb
78
77
  - init.rb
79
78
  - landslider.gemspec
80
79
  - lib/landslider.rb
@@ -82,6 +81,7 @@ files:
82
81
  - lib/landslider/entities/ws_account.rb
83
82
  - lib/landslider/entities/ws_account_note.rb
84
83
  - lib/landslider/entities/ws_account_note_search.rb
84
+ - lib/landslider/entities/ws_account_search.rb
85
85
  - lib/landslider/entities/ws_address.rb
86
86
  - lib/landslider/entities/ws_contact.rb
87
87
  - lib/landslider/entities/ws_contact_note.rb
@@ -99,6 +99,7 @@ files:
99
99
  - lib/landslider/entities/ws_opportunity.rb
100
100
  - lib/landslider/entities/ws_opportunity_note.rb
101
101
  - lib/landslider/entities/ws_opportunity_note_search.rb
102
+ - lib/landslider/entities/ws_opportunity_search.rb
102
103
  - lib/landslider/entities/ws_opportunity_status.rb
103
104
  - lib/landslider/entities/ws_payment_term.rb
104
105
  - lib/landslider/entities/ws_pick_list_item.rb
@@ -114,9 +115,11 @@ files:
114
115
  - lib/landslider/entities/ws_selling_process.rb
115
116
  - lib/landslider/entities/ws_user.rb
116
117
  - lib/landslider/entities/ws_user_search.rb
118
+ - tasks/landslider.rake
117
119
  - test/get_account_types_test.rb
118
120
  - test/get_accounts_test.rb
119
121
  - test/landslider_test.rb
122
+ - test/run_mylist_by_id_test.rb
120
123
  - test/test_helper.rb
121
124
  - test/ws_account_note_search_test.rb
122
125
  - test/ws_contact_note_search_test.rb
@@ -151,13 +154,5 @@ rubygems_version: 1.6.2
151
154
  signing_key:
152
155
  specification_version: 3
153
156
  summary: Landslide Ruby
154
- test_files:
155
- - test/get_account_types_test.rb
156
- - test/get_accounts_test.rb
157
- - test/landslider_test.rb
158
- - test/test_helper.rb
159
- - test/ws_account_note_search_test.rb
160
- - test/ws_contact_note_search_test.rb
161
- - test/ws_lead_note_search_test.rb
162
- - test/ws_opportunity_note_search_test.rb
163
- - test/ws_search_test.rb
157
+ test_files: []
158
+
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'digest/md5'
3
-
4
- LS_INSTANCE_NAME = 'jaytest'
5
- LS_API_PASSWORD = 'letmein52`'
6
-
7
- # the api key is an md5 hash of the user password + instance name
8
- puts "LS_API_KEY = '#{Digest::MD5.hexdigest(LS_API_PASSWORD + LS_INSTANCE_NAME)}'"