landslider 0.5.7 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/{CHANGELOG.markdown → HISTORY.md} +4 -0
  2. data/README.md +108 -0
  3. data/VERSION.yml +1 -1
  4. data/bin/generate_api_key.rb +1 -1
  5. data/landslider.gemspec +41 -5
  6. data/lib/landslider/entities/ws_account.rb +32 -0
  7. data/lib/landslider/entities/ws_account_note.rb +13 -0
  8. data/lib/landslider/entities/ws_account_note_search.rb +23 -0
  9. data/lib/landslider/entities/ws_address.rb +17 -0
  10. data/lib/landslider/entities/ws_contact.rb +38 -0
  11. data/lib/landslider/entities/ws_contact_note.rb +13 -0
  12. data/lib/landslider/entities/ws_contact_note_search.rb +23 -0
  13. data/lib/landslider/entities/ws_contact_search.rb +28 -0
  14. data/lib/landslider/entities/ws_employee.rb +23 -0
  15. data/lib/landslider/entities/ws_entity.rb +15 -0
  16. data/lib/landslider/entities/ws_lead.rb +35 -0
  17. data/lib/landslider/entities/ws_lead_contact.rb +14 -0
  18. data/lib/landslider/entities/ws_lead_note.rb +14 -0
  19. data/lib/landslider/entities/ws_lead_note_search.rb +24 -0
  20. data/lib/landslider/entities/ws_lead_search.rb +31 -0
  21. data/lib/landslider/entities/ws_my_list.rb +20 -0
  22. data/lib/landslider/entities/ws_note.rb +21 -0
  23. data/lib/landslider/entities/ws_opportunity.rb +38 -0
  24. data/lib/landslider/entities/ws_opportunity_note.rb +13 -0
  25. data/lib/landslider/entities/ws_opportunity_note_search.rb +23 -0
  26. data/lib/landslider/entities/ws_opportunity_status.rb +17 -0
  27. data/lib/landslider/entities/ws_payment_term.rb +17 -0
  28. data/lib/landslider/entities/ws_pick_list_item.rb +14 -0
  29. data/lib/landslider/entities/ws_primary_entity.rb +11 -0
  30. data/lib/landslider/entities/ws_product.rb +35 -0
  31. data/lib/landslider/entities/ws_product_family.rb +17 -0
  32. data/lib/landslider/entities/ws_product_result.rb +12 -0
  33. data/lib/landslider/entities/ws_record_upsert_result.rb +13 -0
  34. data/lib/landslider/entities/ws_result.rb +16 -0
  35. data/lib/landslider/entities/ws_search.rb +55 -0
  36. data/lib/landslider/entities/ws_search_criterion.rb +121 -0
  37. data/lib/landslider/entities/ws_search_operator.rb +59 -0
  38. data/lib/landslider/entities/ws_selling_process.rb +17 -0
  39. data/lib/landslider/entities/ws_user.rb +10 -0
  40. data/lib/landslider/entities/ws_user_search.rb +20 -0
  41. data/lib/landslider/entities.rb +46 -0
  42. data/lib/landslider.rb +71 -116
  43. data/test/ws_search_test.rb +13 -0
  44. metadata +41 -5
  45. data/README.rdoc +0 -77
@@ -1,3 +1,7 @@
1
+
2
+ # landslider 0.5.7 2011-05-07
3
+ * added support for WsSearch, WsSearchCriterion, Ws*NoteSearch
4
+
1
5
  # landslider 0.3.2 2011-04-28
2
6
 
3
7
  * add in custom field data for accounts
data/README.md ADDED
@@ -0,0 +1,108 @@
1
+ Landslider
2
+ ==========
3
+
4
+ Ruby interface to Landslide's SOAP-based API
5
+
6
+ Introduction
7
+ ------------
8
+
9
+ This gem can be used to communicate with Landslide's SOAP-based API using ruby code.
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)
12
+
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
+
15
+ Dependencies
16
+ ------------
17
+
18
+ $ gem install jeweler curb handsoap
19
+
20
+ Installation
21
+ ------------
22
+
23
+
24
+ $ gem install landslider
25
+
26
+ Documentation
27
+ -------------
28
+
29
+ Read the [ruby doc](http://www.rubydoc.info/github/j4y/landslider/master/frames).
30
+
31
+ Configuration
32
+ -------------
33
+
34
+ See bin/genarate_api_key.rb for details on generating your API key
35
+
36
+ LS_INSTANCE_NAME = 'jaytest'
37
+ LS_API_USERNAME = 'jayp@landslide.com'
38
+ LS_API_KEY = '53308ccbdcb7f23fbd81a0b2ebcf12a4'
39
+
40
+ Usage
41
+ -----
42
+
43
+ This is calling login to get a session id which is then used to get a list of accounts.
44
+
45
+ require 'landslider'
46
+ response = Landslider.login('LOGINTOKEN=' + LS_INSTANCE_NAME)
47
+ response = Landslider.get_accounts(response[:session_id])
48
+ response[:accounts].each do |account|
49
+ puts "id: #{account[:account_id]} name: #{account[:account_name]}"
50
+ end
51
+
52
+
53
+
54
+
55
+ Testing
56
+ -------
57
+
58
+ The default rake task is set to run the tests.
59
+
60
+ $ rake
61
+
62
+ Tests are needed here because the API uses a specific XML structure for requests and responses.
63
+
64
+
65
+ Contributing
66
+ ------------
67
+
68
+ 1. Fork it.
69
+ 2. Create a branch (`git checkout -b my_markup`)
70
+ 3. Commit your changes (`git commit -am "Added Snarkdown"`)
71
+ 4. Push to the branch (`git push origin my_markup`)
72
+ 5. Create an [Issue][1] with a link to your branch
73
+ 6. Enjoy a refreshing Diet Coke and wait
74
+
75
+ API methods
76
+ -----------
77
+
78
+ Here is a list of API methods that have been added:
79
+
80
+ * login
81
+ * getApiVersion
82
+ * getAccounts
83
+ * getAccountById
84
+ * getAccountCustomFields
85
+ * getAccountContacts
86
+ * getAccountNotes
87
+ * getAccountOpportunities
88
+ * getContacts
89
+ * getContactCustomFields
90
+ * getContactNotes
91
+ * getInstanceInformation
92
+ * getLeads
93
+ * getLeadCustomFields
94
+ * getLeadNotes
95
+ * getOpportunities
96
+ * getOpportunityCustomFields
97
+ * getOpportunityNotes
98
+ * getUserInformation
99
+ * getUserInformationById
100
+
101
+ TODO
102
+ ----
103
+
104
+ * Modify configuration to be rails 3 friendly. The configuation was needed before the environment finished loading. See landslide-rails
105
+ * add more API calls
106
+ * use HTTP cookies to maintain session state. maybe something like http_request.headers.merge!({'cookie' => ["JSESSIONID=#{self.session_id}"]})
107
+ * eliminate slow inefficient XPath queries
108
+ * eliminate test data dependency on the jaytest instance
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 5
4
- :patch: 7
4
+ :patch: 9
5
5
  :build:
@@ -2,7 +2,7 @@
2
2
  require 'digest/md5'
3
3
 
4
4
  LS_INSTANCE_NAME = 'jaytest'
5
- LS_API_PASSWORD = 'Applogin1'
5
+ LS_API_PASSWORD = 'letmein52`'
6
6
 
7
7
  # the api key is an md5 hash of the user password + instance name
8
8
  puts "LS_API_KEY = '#{Digest::MD5.hexdigest(LS_API_PASSWORD + LS_INSTANCE_NAME)}'"
data/landslider.gemspec CHANGED
@@ -5,30 +5,66 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{landslider}
8
- s.version = "0.5.7"
8
+ s.version = "0.5.9"
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-07}
12
+ s.date = %q{2011-05-11}
13
13
  s.default_executable = %q{generate_api_key.rb}
14
14
  s.description = %q{Landslider is a ruby interface to the Landslide SOAP-based API}
15
15
  s.email = %q{jay@j4y.net}
16
16
  s.executables = ["generate_api_key.rb"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.md"
20
20
  ]
21
21
  s.files = [
22
- "CHANGELOG.markdown",
23
22
  "Gemfile",
23
+ "HISTORY.md",
24
24
  "LICENSE",
25
- "README.rdoc",
25
+ "README.md",
26
26
  "Rakefile",
27
27
  "VERSION.yml",
28
28
  "bin/generate_api_key.rb",
29
29
  "init.rb",
30
30
  "landslider.gemspec",
31
31
  "lib/landslider.rb",
32
+ "lib/landslider/entities.rb",
33
+ "lib/landslider/entities/ws_account.rb",
34
+ "lib/landslider/entities/ws_account_note.rb",
35
+ "lib/landslider/entities/ws_account_note_search.rb",
36
+ "lib/landslider/entities/ws_address.rb",
37
+ "lib/landslider/entities/ws_contact.rb",
38
+ "lib/landslider/entities/ws_contact_note.rb",
39
+ "lib/landslider/entities/ws_contact_note_search.rb",
40
+ "lib/landslider/entities/ws_contact_search.rb",
41
+ "lib/landslider/entities/ws_employee.rb",
42
+ "lib/landslider/entities/ws_entity.rb",
43
+ "lib/landslider/entities/ws_lead.rb",
44
+ "lib/landslider/entities/ws_lead_contact.rb",
45
+ "lib/landslider/entities/ws_lead_note.rb",
46
+ "lib/landslider/entities/ws_lead_note_search.rb",
47
+ "lib/landslider/entities/ws_lead_search.rb",
48
+ "lib/landslider/entities/ws_my_list.rb",
49
+ "lib/landslider/entities/ws_note.rb",
50
+ "lib/landslider/entities/ws_opportunity.rb",
51
+ "lib/landslider/entities/ws_opportunity_note.rb",
52
+ "lib/landslider/entities/ws_opportunity_note_search.rb",
53
+ "lib/landslider/entities/ws_opportunity_status.rb",
54
+ "lib/landslider/entities/ws_payment_term.rb",
55
+ "lib/landslider/entities/ws_pick_list_item.rb",
56
+ "lib/landslider/entities/ws_primary_entity.rb",
57
+ "lib/landslider/entities/ws_product.rb",
58
+ "lib/landslider/entities/ws_product_family.rb",
59
+ "lib/landslider/entities/ws_product_result.rb",
60
+ "lib/landslider/entities/ws_record_upsert_result.rb",
61
+ "lib/landslider/entities/ws_result.rb",
62
+ "lib/landslider/entities/ws_search.rb",
63
+ "lib/landslider/entities/ws_search_criterion.rb",
64
+ "lib/landslider/entities/ws_search_operator.rb",
65
+ "lib/landslider/entities/ws_selling_process.rb",
66
+ "lib/landslider/entities/ws_user.rb",
67
+ "lib/landslider/entities/ws_user_search.rb",
32
68
  "test/landslider_test.rb",
33
69
  "test/test_helper.rb",
34
70
  "test/ws_account_note_search_test.rb",
@@ -0,0 +1,32 @@
1
+
2
+ class Landslider
3
+
4
+ class WsAccount < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :account_id, :account_owner, :archived_by, :create_by, :update_by, :parent_account_id
8
+
9
+ # @return [String]
10
+ attr_reader :account_name, :account_number, :division, :fax
11
+
12
+ # @return [String]
13
+ attr_reader :phone, :source_id, :url
14
+
15
+ # @return [Date]
16
+ attr_reader :created_on, :updated_on
17
+
18
+ # @return [WsAccountType]
19
+ attr_reader :account_type
20
+
21
+ # @return [WsAddress]
22
+ attr_reader :billing_address, :main_address, :shipping_address
23
+
24
+ # @return [WsContact]
25
+ attr_reader :primary_contact
26
+
27
+ # @return WsAccountCustomField[]
28
+ attr_reader :custom_fields
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,13 @@
1
+
2
+ class Landslider
3
+
4
+ class WsAccountNote < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :account_id
8
+
9
+ # @return [WsNote]
10
+ attr_reader :note
11
+ end
12
+
13
+ end
@@ -0,0 +1,23 @@
1
+ class Landslider
2
+
3
+ class WsAccountNoteSearch < WsSearch
4
+
5
+ # @return [Integer]
6
+ attr_reader :account_id
7
+
8
+ # @param [Integer] account_id an account id
9
+ def initialize(account_id)
10
+ @account_id = account_id
11
+ end
12
+
13
+ # @param [Handsoap::XmlMason::Node] msg
14
+ # @return [Handsoap::XmlMason::Node]
15
+ def soapify_for(msg)
16
+ msg.add('accountNoteSearch') { |crit|
17
+ crit.add 'accountId', @account_id
18
+ super(crit)
19
+ }
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,17 @@
1
+
2
+ class Landslider
3
+
4
+ class WsAddress < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :address_id
8
+
9
+ # @return [String]
10
+ attr_reader :address1, :address2, :address3, :address_node, :city
11
+
12
+ # @return [String]
13
+ attr_reader :country, :state, :zip_postal
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,38 @@
1
+ class Landslider
2
+ class WsContact < WsEntity
3
+
4
+ # @return [Integer]
5
+ attr_reader :contact_id, :owner_id, :create_by, :update_by, :archived_by
6
+
7
+ # @return [String]
8
+ attr_reader :namae, :account_name, :description, :source_system_id
9
+
10
+ # @return [Date]
11
+ attr_reader :archived_on, :created_on, :updated_on
12
+
13
+ # @return [Boolean]
14
+ attr_reader :buyer
15
+
16
+ # @return [String]
17
+ attr_reader :cell_phone, :comments, :company_name
18
+
19
+ # @return [String]
20
+ attr_reader :department, :email, :fax, :first_name
21
+
22
+ # @return [String]
23
+ attr_reader :home_phone, :last_name, :middle_initials, :suffix
24
+
25
+ # @return [String]
26
+ attr_reader :source_system_id
27
+
28
+ # @return [WsContactType]
29
+ attr_reader :contact_type
30
+
31
+ # @return [WsAddress]
32
+ attr_reader :work_address
33
+
34
+ # @return [WsAccountContact]
35
+ attr_reader :account_contact
36
+
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+
2
+ class Landslider
3
+
4
+ class WsContactNote < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :contact_id
8
+
9
+ # @return [WsNote]
10
+ attr_reader :note
11
+ end
12
+
13
+ end
@@ -0,0 +1,23 @@
1
+ class Landslider
2
+
3
+ class WsContactNoteSearch < WsSearch
4
+
5
+ # @return [Integer]
6
+ attr_reader :contact_id
7
+
8
+ # @param [Integer] contact_id a contact id
9
+ def initialize(contact_id)
10
+ @contact_id = contact_id
11
+ end
12
+
13
+ # @param [Handsoap::XmlMason::Node] msg
14
+ # @return [Handsoap::XmlMason::Node]
15
+ def soapify_for(msg)
16
+ msg.add('contactNote') { |crit|
17
+ crit.add 'contactId', @contact_id
18
+ super(crit)
19
+ }
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,28 @@
1
+
2
+ class Landslider
3
+
4
+ # search criteria for getContacts
5
+ class WsContactSearch < WsSearch
6
+
7
+ # @return [String]
8
+ attr_writer :city, :company_name, :email, :title, :first_name
9
+
10
+ # @return [String]
11
+ attr_writer :middle_initial, :last_name, :home_phone, :work_phone, :cell_phone
12
+
13
+ # @return [String]
14
+ attr_writer :other_phone, :state, :postal_code, :country
15
+
16
+ # @param [Handsoap::XmlMason::Node] msg
17
+ # @return [Handsoap::XmlMason::Node]
18
+ def soapify_for(msg)
19
+ super(crit)
20
+ crit.add 'firstName', @first_name unless @first_name.nil?
21
+ crit.add 'lastName', @last_name unless @last_name.nil?
22
+ crit.add 'email', @email unless @email.nil?
23
+ crit.add 'state', @state unless @state.nil?
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,23 @@
1
+
2
+ class Landslider
3
+
4
+ class WsEmployee < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :employee_id
8
+
9
+ # @return [String]
10
+ attr_reader :cell_phone, :company_name, :email_address, :fax
11
+
12
+ # @return [String]
13
+ attr_reader :first_name, :home_phone, :last_name, :office_phone
14
+
15
+ # @return [String]
16
+ attr_reader :title, :user_id
17
+
18
+ # @return [Boolean]
19
+ attr_reader :administrator
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,15 @@
1
+ class Landslider
2
+
3
+ class WsEntity
4
+
5
+ # @return [Integer]
6
+ attr_reader :entity_id
7
+
8
+ # @return [String]
9
+ attr_reader :entity_type, :entity_name
10
+
11
+ end
12
+
13
+ end
14
+
15
+
@@ -0,0 +1,35 @@
1
+
2
+ class Landslider
3
+
4
+ class WsLead < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :lead_id, :account_id, :target_id, :created_by, :primary_owner_id
8
+
9
+ # @return [String]
10
+ attr_reader :name, :account_name, :description, :source_system_id
11
+
12
+ # @return [Boolean]
13
+ attr_reader :hot, :ok_to_call, :ok_to_email
14
+
15
+ # @return [WsLeadTarget]
16
+ attr_reader :lead_target
17
+
18
+ # @return [WsContact]
19
+ attr_reader :lead_contact
20
+
21
+ # @return [WsLeadRating]
22
+ attr_reader :lead_rating
23
+
24
+ # @return [WsLeadStatus]
25
+ attr_reader :lead_status
26
+
27
+ # @return [WsLeadSource]
28
+ attr_reader :lead_source
29
+
30
+ # @return [WsSellingProcess]
31
+ attr_reader :lead_selling_process
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,14 @@
1
+
2
+ class Landslider
3
+
4
+ class WsLeadContact < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :contact_id, :lead_id, :modified_by
8
+
9
+ # @return [Boolean]
10
+ attr_reader :primary_contact
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+
2
+ class Landslider
3
+
4
+ class WsLeadNote < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :lead_id
8
+
9
+ # @return [WsNote]
10
+ attr_reader :note
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,24 @@
1
+ class Landslider
2
+
3
+ class WsLeadNoteSearch < WsSearch
4
+
5
+ # @return [Integer]
6
+ attr_reader :lead_id
7
+
8
+ # @param [Integer] lead_id a lead id
9
+ def initialize(lead_id)
10
+ @lead_id = lead_id
11
+ end
12
+
13
+ # @param [Handsoap::XmlMason::Node] msg
14
+ # @return [Handsoap::XmlMason::Node]
15
+ def soapify_for(msg)
16
+ msg.add('leadNote') { |crit|
17
+ crit.add 'leadId', @lead_id
18
+ super(crit)
19
+ }
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,31 @@
1
+
2
+ class Landslider
3
+
4
+ # search criteria for getLeads
5
+ class WsLeadSearch < WsSearch
6
+
7
+ # @return [Integer]
8
+ attr_writer :account_id, :company_id, :primary_owner_id, :status_id
9
+
10
+ # @return [Boolean]
11
+ attr_writer :hot
12
+
13
+ # @return [Date]
14
+ attr_writer :updated_on
15
+
16
+ # @return [String]
17
+ attr_writer :name
18
+
19
+ # @param [Handsoap::XmlMason::Node] msg
20
+ # @return [Handsoap::XmlMason::Node]
21
+ def soapify_for(msg)
22
+ super(msg)
23
+ msg.add 'name', @name unless @name.nil?
24
+ msg.add 'accountId', @account_id unless @account_id.nil?
25
+ msg.add 'companyId', @company_id unless @company_id.nil?
26
+ msg.add 'primaryOwnerId', @primary_owner_id unless @primary_owner_id.nil?
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,20 @@
1
+
2
+ class Landslider
3
+
4
+ class WsMyList < Object
5
+
6
+ # @return [Integer]
7
+ attr_reader :my_list_id, :created_by
8
+
9
+ # @return [String]
10
+ attr_reader :title, :description, :base_table
11
+
12
+ # @return [Date]
13
+ attr_reader :created_on
14
+
15
+ # @return [Boolean]
16
+ attr_reader :is_shared
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,21 @@
1
+
2
+ class Landslider
3
+
4
+ # @todo Expose note type
5
+ class WsNote < WsEntity
6
+
7
+ # @return [Integer]
8
+ attr_reader :note_id, :archived_by, :created_by
9
+
10
+ # @return [String]
11
+ attr_reader :note, :source_id
12
+
13
+ # @return [Boolean]
14
+ attr_reader :latest
15
+
16
+ # @return [Date]
17
+ attr_reader :created_on, :updated_on
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,38 @@
1
+
2
+ class Landslider
3
+
4
+ class WsOpportunity < WsPrimaryEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :opportunity_id, :created_by, :archived_by, :current_phase_id
8
+
9
+ # @return [Integer]
10
+ attr_reader :confidence, :primary_owner_id
11
+
12
+ # @return [String]
13
+ attr_reader :name, :account_name, :description, :current_phase_name
14
+
15
+ # @return [String]
16
+ attr_reader :description, :source_system_id
17
+
18
+ # @return [WsLeadSource]
19
+ attr_reader :lead_source
20
+
21
+ # @return [WsSellingProcess]
22
+ attr_reader :selling_process
23
+
24
+ # @return [WsOpportunityStatus]
25
+ attr_reader :opportunity_status
26
+
27
+ # @return [WsOpportunityStatusReason]
28
+ attr_reader :opportunity_status_reason
29
+
30
+ # @return [Boolean]
31
+ attr_reader :hot
32
+
33
+ # @return [Date]
34
+ attr_reader :created_on, :updated_on
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,13 @@
1
+
2
+ class Landslider
3
+
4
+ class WsOpportunityNote < WsEntity
5
+
6
+ # @return [Integer]
7
+ attr_reader :opportunity_id
8
+
9
+ # @return [WsNote]
10
+ attr_reader :note
11
+ end
12
+
13
+ end
@@ -0,0 +1,23 @@
1
+ class Landslider
2
+
3
+ class WsOpportunityNoteSearch < WsSearch
4
+
5
+ # @return [Integer]
6
+ attr_reader :opportunity_id
7
+
8
+ # @param [Integer] opportunity_id an opportunity id
9
+ def initialize(opportunity_id)
10
+ @opportunity_id = opportunity_id
11
+ end
12
+
13
+ # @param [Handsoap::XmlMason::Node] msg
14
+ # @return [Handsoap::XmlMason::Node]
15
+ def soapify_for(msg)
16
+ msg.add('opportunityNote') { |crit|
17
+ crit.add 'opportunityId', @opportunity_id
18
+ super(crit)
19
+ }
20
+ end
21
+ end
22
+
23
+ end