landslider 0.5.12 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
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)}'"