netsuite 0.0.2 → 0.0.3
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/.autotest +3 -4
- data/.rvmrc +1 -0
- data/README.md +67 -2
- data/lib/netsuite.rb +3 -1
- data/lib/netsuite/actions/add.rb +58 -0
- data/lib/netsuite/actions/get.rb +55 -0
- data/lib/netsuite/actions/support.rb +50 -0
- data/lib/netsuite/configuration.rb +10 -2
- data/lib/netsuite/models/customer.rb +12 -3
- data/lib/netsuite/version.rb +1 -1
- data/spec/netsuite/actions/add_spec.rb +37 -0
- data/spec/netsuite/actions/{customer/get_spec.rb → get_spec.rb} +3 -3
- data/spec/netsuite/actions/support_spec.rb +33 -0
- data/spec/netsuite/configuration_spec.rb +14 -2
- data/spec/netsuite/models/customer_spec.rb +41 -6
- data/spec/netsuite_spec.rb +10 -3
- data/spec/support/configuration.rb +1 -0
- data/spec/support/fixtures/add/add_customer.xml +16 -0
- metadata +16 -7
- data/lib/netsuite/actions/customer/get.rb +0 -70
data/.autotest
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
Autotest.add_hook :initialize do |at|
|
2
2
|
at.clear_mappings
|
3
3
|
|
4
|
-
at.add_mapping
|
5
|
-
|
6
|
-
files_matching %r%^spec/.*(#{possible}_spec)\.rb$%
|
4
|
+
at.add_mapping(%r%^lib/(.*)\.rb$%) do |_, m|
|
5
|
+
at.files_matching %r%^spec/#{m[1]}_spec\.rb$%
|
7
6
|
end
|
8
7
|
|
9
|
-
at.add_mapping(%r%^spec/.*\_spec
|
8
|
+
at.add_mapping(%r%^spec/.*\_spec\.rb$%) { |filename, _| filename }
|
10
9
|
end
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use ree-1.8.7-2010.02@netsuite
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Netsuite
|
2
2
|
|
3
|
-
|
3
|
+
* This gem will act as a wrapper around the NetSuite SuiteTalk WebServices API. Wow, that is a mouthful.
|
4
|
+
* The gem does not cover the entire API, only the subset that we have found useful to cover so far.
|
5
|
+
* [Extending the wrapper](#extending) is pretty simple. See below for an example.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,70 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
### Customer
|
24
|
+
|
25
|
+
* Initializing a customer can be done using a hash of attributes.
|
26
|
+
|
27
|
+
#### Get
|
28
|
+
|
29
|
+
* Retrieves the customer by internalId.
|
30
|
+
|
31
|
+
```Ruby
|
32
|
+
customer = NetSuite::Customer.get(4) # => #<NetSuite::Customer:0x1042f59b8>
|
33
|
+
customer.is_person # => true
|
34
|
+
```
|
35
|
+
|
36
|
+
<a name='extending'>
|
37
|
+
## Additions
|
38
|
+
|
39
|
+
* Please submit a pull request for any models or actions that you would like to be included. The API is quite large and so we will necessarily not cover all of it.
|
40
|
+
* Models should go into the `lib/netsuite/models/` directory.
|
41
|
+
* Actions should be placed in their respective subdirectory under `lib/netsuite/actions`.
|
42
|
+
* Example:
|
43
|
+
|
44
|
+
```Ruby
|
45
|
+
# lib/netsuite/actions/customer/add.rb
|
46
|
+
|
47
|
+
module NetSuite
|
48
|
+
module Actions
|
49
|
+
module Customer
|
50
|
+
class Add
|
51
|
+
|
52
|
+
def initialize(attributes = {})
|
53
|
+
@attributes = attributes
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.call(attributes)
|
57
|
+
new(attributes).call
|
58
|
+
end
|
59
|
+
|
60
|
+
def call
|
61
|
+
response = NetSuite::Configuration.connection.request :add do
|
62
|
+
soap.header = NetSuite::Configuration.auth_header
|
63
|
+
soap.body = {
|
64
|
+
:entityId => @attributes[:entity_id],
|
65
|
+
:companyName => @attributes[:company_name],
|
66
|
+
:unsubscribe => @attributes[:unsubscribe]
|
67
|
+
}
|
68
|
+
end
|
69
|
+
success = response.to_hash[:add_response][:write_response][:status][:@is_success] == 'true'
|
70
|
+
body = response.to_hash[:add_response][:write_response][:base_ref]
|
71
|
+
NetSuite::Response.new(:success => success, :body => body)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
response = NetSuite::Actions::Customer::Add.call(
|
80
|
+
:entity_id => 'Shutter Fly',
|
81
|
+
:company_name => 'Shutter Fly, Inc.',
|
82
|
+
:unsubscribe => false
|
83
|
+
) # => #<NetSuite::Response:0x1041f64b5>
|
84
|
+
response.success? # => true
|
85
|
+
response.body # => { :internal_id => '979', :type => 'customer' }
|
86
|
+
```
|
22
87
|
|
23
88
|
## Contributing
|
24
89
|
|
data/lib/netsuite.rb
CHANGED
@@ -4,7 +4,9 @@ require 'netsuite/response'
|
|
4
4
|
require 'netsuite/version'
|
5
5
|
|
6
6
|
# ACTIONS
|
7
|
-
require 'netsuite/actions/
|
7
|
+
require 'netsuite/actions/support'
|
8
|
+
require 'netsuite/actions/add'
|
9
|
+
require 'netsuite/actions/get'
|
8
10
|
|
9
11
|
# MODELS
|
10
12
|
require 'netsuite/models/customer'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Actions
|
3
|
+
class Add
|
4
|
+
include Support
|
5
|
+
|
6
|
+
def initialize(attributes = {})
|
7
|
+
@attributes = attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def request
|
13
|
+
connection.request :platformMsgs, :add do
|
14
|
+
soap.namespaces['xmlns:platformMsgs'] = 'urn:messages_2011_2.platform.webservices.netsuite.com'
|
15
|
+
soap.namespaces['xmlns:platformCore'] = 'urn:core_2011_2.platform.webservices.netsuite.com'
|
16
|
+
soap.namespaces['xmlns:listRel'] = 'urn:relationships_2011_2.lists.webservices.netsuite.com'
|
17
|
+
soap.header = auth_header
|
18
|
+
soap.body = request_body
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# <soap:Body>
|
23
|
+
# <platformMsgs:add>
|
24
|
+
# <platformMsgs:record xsi:type="listRel:Customer">
|
25
|
+
# <listRel:entityId>Shutter Fly</listRel:entityId>
|
26
|
+
# <listRel:companyName>Shutter Fly, Inc</listRel:companyName>
|
27
|
+
# </platformMsgs:record>
|
28
|
+
# </platformMsgs:add>
|
29
|
+
# </soap:Body>
|
30
|
+
def request_body
|
31
|
+
{
|
32
|
+
'platformMsgs:record' => {
|
33
|
+
'listRel:entityId' => @attributes[:entity_id],
|
34
|
+
'listRel:companyName' => @attributes[:company_name]
|
35
|
+
},
|
36
|
+
:attributes! => {
|
37
|
+
'platformMsgs:record' => {
|
38
|
+
'xsi:type' => 'listRel:Customer'
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def success?
|
45
|
+
@success ||= response_hash[:status][:@is_success] == 'true'
|
46
|
+
end
|
47
|
+
|
48
|
+
def response_body
|
49
|
+
@response_body ||= response_hash[:base_ref]
|
50
|
+
end
|
51
|
+
|
52
|
+
def response_hash
|
53
|
+
@response_hash ||= @response.to_hash[:add_response][:write_response]
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Actions
|
3
|
+
class Get
|
4
|
+
include Support
|
5
|
+
|
6
|
+
def initialize(id)
|
7
|
+
@id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def request
|
13
|
+
connection.request :platformMsgs, :get do
|
14
|
+
soap.namespaces['xmlns:platformMsgs'] = 'urn:messages_2011_2.platform.webservices.netsuite.com'
|
15
|
+
soap.namespaces['xmlns:platformCore'] = 'urn:core_2011_2.platform.webservices.netsuite.com'
|
16
|
+
soap.header = auth_header
|
17
|
+
soap.body = request_body
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# <soap:Body>
|
22
|
+
# <platformMsgs:get>
|
23
|
+
# <platformMsgs:baseRef internalId="983" type="customer" xsi:type="platformCore:RecordRef">
|
24
|
+
# <platformCore:name/>
|
25
|
+
# </platformMsgs:baseRef>
|
26
|
+
# </platformMsgs:get>
|
27
|
+
# </soap:Body>
|
28
|
+
def request_body
|
29
|
+
{
|
30
|
+
'platformMsgs:baseRef' => {},
|
31
|
+
:attributes! => {
|
32
|
+
'platformMsgs:baseRef' => {
|
33
|
+
:internalId => @id,
|
34
|
+
:type => 'customer',
|
35
|
+
'xsi:type' => 'platformCore:RecordRef'
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def success?
|
42
|
+
@success ||= response_hash[:status][:@is_success] == 'true'
|
43
|
+
end
|
44
|
+
|
45
|
+
def response_body
|
46
|
+
@response_body ||= response_hash[:record]
|
47
|
+
end
|
48
|
+
|
49
|
+
def response_hash
|
50
|
+
@response_hash = @response[:get_response][:read_response]
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Actions
|
3
|
+
module Support
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.send(:extend, ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
|
11
|
+
def call(*args)
|
12
|
+
new(*args).call
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def call
|
18
|
+
@response = request
|
19
|
+
build_response
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def request
|
25
|
+
raise NotImplementedError
|
26
|
+
end
|
27
|
+
|
28
|
+
def connection
|
29
|
+
NetSuite::Configuration.connection
|
30
|
+
end
|
31
|
+
|
32
|
+
def auth_header
|
33
|
+
NetSuite::Configuration.auth_header
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_response
|
37
|
+
NetSuite::Response.new(:success => success?, :body => response_body)
|
38
|
+
end
|
39
|
+
|
40
|
+
def success?
|
41
|
+
raise NotImplementedError
|
42
|
+
end
|
43
|
+
|
44
|
+
def response_body
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -14,8 +14,16 @@ module NetSuite
|
|
14
14
|
attributes[:connection] ||= Savon::Client.new(self.wsdl)
|
15
15
|
end
|
16
16
|
|
17
|
-
def wsdl
|
18
|
-
attributes[:wsdl]
|
17
|
+
def wsdl=(wsdl)
|
18
|
+
attributes[:wsdl] = wsdl
|
19
|
+
end
|
20
|
+
|
21
|
+
def wsdl(wsdl = nil)
|
22
|
+
if wsdl
|
23
|
+
self.wsdl = wsdl
|
24
|
+
else
|
25
|
+
attributes[:wsdl] ||= File.expand_path('../../../wsdl/2011_02.wsdl', __FILE__)
|
26
|
+
end
|
19
27
|
end
|
20
28
|
|
21
29
|
def auth_header
|
@@ -6,7 +6,7 @@ module NetSuite
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.get(id)
|
9
|
-
response = NetSuite::Actions::
|
9
|
+
response = NetSuite::Actions::Get.call(id)
|
10
10
|
if response.success?
|
11
11
|
new(response.body)
|
12
12
|
else
|
@@ -14,8 +14,17 @@ module NetSuite
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
@attributes
|
17
|
+
def add
|
18
|
+
response = NetSuite::Actions::Add.call(@attributes)
|
19
|
+
response.success?
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(m, *args, &block)
|
23
|
+
if @attributes.keys.include?(m.to_sym)
|
24
|
+
@attributes[m.to_sym]
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
end
|
data/lib/netsuite/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Actions::Add do
|
4
|
+
|
5
|
+
context 'Customer' do
|
6
|
+
let(:attributes) do
|
7
|
+
{
|
8
|
+
:entity_id => 'Shutter Fly',
|
9
|
+
:company_name => 'Shutter Fly, Inc.'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
before do
|
14
|
+
savon.expects(:add).with({
|
15
|
+
'platformMsgs:record' => {
|
16
|
+
'listRel:entityId' => 'Shutter Fly',
|
17
|
+
'listRel:companyName' => 'Shutter Fly, Inc.'
|
18
|
+
},
|
19
|
+
:attributes! => {
|
20
|
+
'platformMsgs:baseRef' => {
|
21
|
+
'xsi:type' => 'listRel:Customer'
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}).returns(:add_customer)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'makes a valid request to the NetSuite API' do
|
28
|
+
NetSuite::Actions::Add.call(attributes)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns a valid Response object' do
|
32
|
+
response = NetSuite::Actions::Add.call(attributes)
|
33
|
+
response.should be_kind_of(NetSuite::Response)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe NetSuite::Actions::
|
3
|
+
describe NetSuite::Actions::Get do
|
4
4
|
|
5
5
|
before do
|
6
6
|
savon.expects(:get).with({
|
@@ -16,11 +16,11 @@ describe NetSuite::Actions::Customer::Get do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'makes a valid request to the NetSuite API' do
|
19
|
-
NetSuite::Actions::
|
19
|
+
NetSuite::Actions::Get.call(1)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns a valid Response object' do
|
23
|
-
response = NetSuite::Actions::
|
23
|
+
response = NetSuite::Actions::Get.call(1)
|
24
24
|
response.should be_kind_of(NetSuite::Response)
|
25
25
|
end
|
26
26
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Actions::Support do
|
4
|
+
let(:instance) do
|
5
|
+
obj = Object.new
|
6
|
+
obj.extend(NetSuite::Actions::Support)
|
7
|
+
obj
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#call' do
|
11
|
+
before do
|
12
|
+
instance.stub(:request)
|
13
|
+
instance.stub(:success?)
|
14
|
+
instance.stub(:response_body)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'calls #request' do
|
18
|
+
instance.should_receive(:request)
|
19
|
+
instance.call
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'calls #build_response' do
|
23
|
+
instance.should_receive(:build_response)
|
24
|
+
instance.call
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns a NetSuite::Response object' do
|
28
|
+
response = instance.call
|
29
|
+
response.should be_kind_of(NetSuite::Response)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -23,8 +23,20 @@ describe NetSuite::Configuration do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#wsdl' do
|
26
|
-
|
27
|
-
|
26
|
+
context 'when the wsdl has been set' do
|
27
|
+
before do
|
28
|
+
config.wsdl = 'https://system.sandbox.netsuite.com/wsdl/v2011_2_0/netsuite.wsdl'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns a path to the WSDL to use for the API' do
|
32
|
+
config.wsdl.should eql('https://system.sandbox.netsuite.com/wsdl/v2011_2_0/netsuite.wsdl')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when the wsdl has not been set' do
|
37
|
+
it 'returns a path to the WSDL to use for the API' do
|
38
|
+
config.wsdl.should match(/.*\/netsuite\/wsdl\/2011_02\.wsdl/)
|
39
|
+
end
|
28
40
|
end
|
29
41
|
end
|
30
42
|
|
@@ -8,7 +8,7 @@ describe NetSuite::Customer do
|
|
8
8
|
let(:response) { NetSuite::Response.new(:success => true, :body => { :is_person => true }) }
|
9
9
|
|
10
10
|
it 'returns a Customer instance populated with the data from the response object' do
|
11
|
-
NetSuite::Actions::
|
11
|
+
NetSuite::Actions::Get.should_receive(:call).with(1).and_return(response)
|
12
12
|
customer = NetSuite::Customer.get(1)
|
13
13
|
customer.should be_kind_of(NetSuite::Customer)
|
14
14
|
customer.is_person.should be_true
|
@@ -19,7 +19,7 @@ describe NetSuite::Customer do
|
|
19
19
|
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
20
20
|
|
21
21
|
it 'returns a Customer instance populated with the data from the response object' do
|
22
|
-
NetSuite::Actions::
|
22
|
+
NetSuite::Actions::Get.should_receive(:call).with(1).and_return(response)
|
23
23
|
lambda {
|
24
24
|
NetSuite::Customer.get(1)
|
25
25
|
}.should raise_error(NetSuite::RecordNotFound, 'NetSuite::Customer with ID=1 could not be found')
|
@@ -27,11 +27,46 @@ describe NetSuite::Customer do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe '#
|
31
|
-
|
30
|
+
describe '#add' do
|
31
|
+
let(:test_data) { { :entity_name => 'TEST CUSTOMER', :is_person => true } }
|
32
|
+
|
33
|
+
context 'when the response is successful' do
|
34
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
35
|
+
|
32
36
|
it 'returns true' do
|
33
|
-
|
34
|
-
|
37
|
+
NetSuite::Actions::Add.should_receive(:call).
|
38
|
+
with(test_data).
|
39
|
+
and_return(response)
|
40
|
+
customer = NetSuite::Customer.new(test_data)
|
41
|
+
customer.add.should be_true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when the response is unsuccessful' do
|
46
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
47
|
+
it 'returns false' do
|
48
|
+
NetSuite::Actions::Add.should_receive(:call).
|
49
|
+
with(test_data).
|
50
|
+
and_return(response)
|
51
|
+
customer = NetSuite::Customer.new(test_data)
|
52
|
+
customer.add.should be_false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#method_missing' do
|
58
|
+
context 'when calling a method that exists as an attribute' do
|
59
|
+
it 'returns the right value from the attributes hash' do
|
60
|
+
customer = NetSuite::Customer.new(:name => 'Mr. Banana')
|
61
|
+
customer.name.should eql('Mr. Banana')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when calling a method that does not exist in the attributes hash' do
|
66
|
+
it 'raises a NoMethodError' do
|
67
|
+
lambda {
|
68
|
+
customer.banana
|
69
|
+
}.should raise_error(NoMethodError)
|
35
70
|
end
|
36
71
|
end
|
37
72
|
end
|
data/spec/netsuite_spec.rb
CHANGED
@@ -8,27 +8,34 @@ describe NetSuite do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe '#configure' do
|
11
|
-
it 'allows the Configuration #email
|
11
|
+
it 'allows the Configuration #email instance method to be called with instance eval' do
|
12
12
|
NetSuite.configure do
|
13
13
|
email 'me@example.com'
|
14
14
|
end
|
15
15
|
config.email.should eql('me@example.com')
|
16
16
|
end
|
17
17
|
|
18
|
-
it 'allows the Configuration #password
|
18
|
+
it 'allows the Configuration #password instance method to be called with instance eval' do
|
19
19
|
NetSuite.configure do
|
20
20
|
password 'myPassword'
|
21
21
|
end
|
22
22
|
config.password.should eql('myPassword')
|
23
23
|
end
|
24
24
|
|
25
|
-
it 'allows the Configuration #account
|
25
|
+
it 'allows the Configuration #account instance method to be called with instance eval' do
|
26
26
|
NetSuite.configure do
|
27
27
|
account 1234
|
28
28
|
end
|
29
29
|
config.account.should eql(1234)
|
30
30
|
end
|
31
31
|
|
32
|
+
it 'allows the Configuration #wsdl instance method to be called with instance_eval' do
|
33
|
+
NetSuite.configure do
|
34
|
+
wsdl 'https://system.sandbox.netsuite.com/wsdl/v2011_2_0/netsuite.wsdl'
|
35
|
+
end
|
36
|
+
config.wsdl.should eql('https://system.sandbox.netsuite.com/wsdl/v2011_2_0/netsuite.wsdl')
|
37
|
+
end
|
38
|
+
|
32
39
|
end
|
33
40
|
|
34
41
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
3
|
+
<soapenv:Header>
|
4
|
+
<platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2011_2.platform.webservices.netsuite.com">
|
5
|
+
<platformMsgs:nsId>WEBSERVICES_3392464_1220201115821392011296470399_67055c545d0</platformMsgs:nsId>
|
6
|
+
</platformMsgs:documentInfo>
|
7
|
+
</soapenv:Header>
|
8
|
+
<soapenv:Body>
|
9
|
+
<addResponse xmlns="urn:messages_2_5.platform.webservices.netsuite.com">
|
10
|
+
<writeResponse xmlns="urn:messages_2_5.platform.webservices.netsuite.com">
|
11
|
+
<ns1:status isSuccess="true" xmlns:ns1="urn:core_2_5.platform.webservices.netsuite.com"/>
|
12
|
+
<baseRef internalId="979" type="customer" xsi:type="ns2:RecordRef" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="urn:core_2_5.platform.webservices.netsuite.com"/>
|
13
|
+
</writeResponse>
|
14
|
+
</addResponse>
|
15
|
+
</soapenv:Body>
|
16
|
+
</soapenv:Envelope>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netsuite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Moran
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-12-
|
18
|
+
date: 2011-12-22 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -95,25 +95,31 @@ files:
|
|
95
95
|
- .autotest
|
96
96
|
- .gitignore
|
97
97
|
- .rspec
|
98
|
+
- .rvmrc
|
98
99
|
- Gemfile
|
99
100
|
- LICENSE
|
100
101
|
- README.md
|
101
102
|
- Rakefile
|
102
103
|
- lib/netsuite.rb
|
103
|
-
- lib/netsuite/actions/
|
104
|
+
- lib/netsuite/actions/add.rb
|
105
|
+
- lib/netsuite/actions/get.rb
|
106
|
+
- lib/netsuite/actions/support.rb
|
104
107
|
- lib/netsuite/configuration.rb
|
105
108
|
- lib/netsuite/errors.rb
|
106
109
|
- lib/netsuite/models/customer.rb
|
107
110
|
- lib/netsuite/response.rb
|
108
111
|
- lib/netsuite/version.rb
|
109
112
|
- netsuite.gemspec
|
110
|
-
- spec/netsuite/actions/
|
113
|
+
- spec/netsuite/actions/add_spec.rb
|
114
|
+
- spec/netsuite/actions/get_spec.rb
|
115
|
+
- spec/netsuite/actions/support_spec.rb
|
111
116
|
- spec/netsuite/configuration_spec.rb
|
112
117
|
- spec/netsuite/models/customer_spec.rb
|
113
118
|
- spec/netsuite/response_spec.rb
|
114
119
|
- spec/netsuite_spec.rb
|
115
120
|
- spec/spec_helper.rb
|
116
121
|
- spec/support/configuration.rb
|
122
|
+
- spec/support/fixtures/add/add_customer.xml
|
117
123
|
- spec/support/fixtures/get/get_customer.xml
|
118
124
|
- spec/support/savon.rb
|
119
125
|
- wsdl/2011_02.wsdl
|
@@ -152,12 +158,15 @@ signing_key:
|
|
152
158
|
specification_version: 3
|
153
159
|
summary: NetSuite SuiteTalk API Wrapper
|
154
160
|
test_files:
|
155
|
-
- spec/netsuite/actions/
|
161
|
+
- spec/netsuite/actions/add_spec.rb
|
162
|
+
- spec/netsuite/actions/get_spec.rb
|
163
|
+
- spec/netsuite/actions/support_spec.rb
|
156
164
|
- spec/netsuite/configuration_spec.rb
|
157
165
|
- spec/netsuite/models/customer_spec.rb
|
158
166
|
- spec/netsuite/response_spec.rb
|
159
167
|
- spec/netsuite_spec.rb
|
160
168
|
- spec/spec_helper.rb
|
161
169
|
- spec/support/configuration.rb
|
170
|
+
- spec/support/fixtures/add/add_customer.xml
|
162
171
|
- spec/support/fixtures/get/get_customer.xml
|
163
172
|
- spec/support/savon.rb
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module NetSuite
|
2
|
-
module Actions
|
3
|
-
module Customer
|
4
|
-
class Get
|
5
|
-
|
6
|
-
def initialize(id)
|
7
|
-
@id = id
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.call(id)
|
11
|
-
new(id).call
|
12
|
-
end
|
13
|
-
|
14
|
-
def call
|
15
|
-
@response = request
|
16
|
-
build_response
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def request
|
22
|
-
connection.request :platformMsgs, :get do
|
23
|
-
soap.namespaces['xmlns:platformMsgs'] = 'urn:messages_2011_2.platform.webservices.netsuite.com'
|
24
|
-
soap.namespaces['xmlns:platformCore'] = 'urn:core_2011_2.platform.webservices.netsuite.com'
|
25
|
-
soap.header = auth_header
|
26
|
-
soap.body = request_body
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def connection
|
31
|
-
NetSuite::Configuration.connection
|
32
|
-
end
|
33
|
-
|
34
|
-
def auth_header
|
35
|
-
NetSuite::Configuration.auth_header
|
36
|
-
end
|
37
|
-
|
38
|
-
def request_body
|
39
|
-
{
|
40
|
-
'platformMsgs:baseRef' => {},
|
41
|
-
:attributes! => {
|
42
|
-
'platformMsgs:baseRef' => {
|
43
|
-
:internalId => @id,
|
44
|
-
:type => 'customer',
|
45
|
-
'xsi:type' => 'platformCore:RecordRef'
|
46
|
-
}
|
47
|
-
}
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
def build_response
|
52
|
-
NetSuite::Response.new(:success => success?, :body => response_body)
|
53
|
-
end
|
54
|
-
|
55
|
-
def success?
|
56
|
-
@success ||= response_hash[:status][:@is_success] == 'true'
|
57
|
-
end
|
58
|
-
|
59
|
-
def response_body
|
60
|
-
@response_body ||= response_hash[:record]
|
61
|
-
end
|
62
|
-
|
63
|
-
def response_hash
|
64
|
-
@response_hash = @response[:get_response][:read_response]
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|