netsuite 0.0.8 → 0.0.9
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/lib/netsuite.rb +1 -0
- data/lib/netsuite/records/invoice.rb +2 -2
- data/lib/netsuite/records/non_inventory_sale_item.rb +43 -0
- data/lib/netsuite/version.rb +1 -1
- data/spec/netsuite/records/customer_spec.rb +8 -24
- data/spec/netsuite/records/invoice_spec.rb +8 -68
- data/spec/netsuite/records/non_inventory_sale_item_spec.rb +64 -0
- data/spec/support/record_ref_matcher.rb +25 -0
- metadata +9 -4
data/lib/netsuite.rb
CHANGED
@@ -26,10 +26,10 @@ module NetSuite
|
|
26
26
|
:to_be_printed, :total, :total_cost_estimate, :tracking_numbers, :tran_date, :tran_id, :tran_is_vsoe_bundle,
|
27
27
|
:transaction_bill_address, :transaction_ship_address, :vat_reg_num, :vsoe_auto_calc
|
28
28
|
|
29
|
-
attr_reader :internal_id, :external_id
|
30
|
-
|
31
29
|
record_refs :account, :bill_address_list, :custom_form, :entity, :posting_period, :ship_address_list
|
32
30
|
|
31
|
+
attr_reader :internal_id, :external_id
|
32
|
+
|
33
33
|
def initialize(attributes = {})
|
34
34
|
@internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
|
35
35
|
@external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class NonInventorySaleItem
|
4
|
+
include FieldSupport
|
5
|
+
include RecordRefSupport
|
6
|
+
|
7
|
+
fields :available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :country_of_manufacture,
|
8
|
+
:created_date, :custom_field_list, :display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap,
|
9
|
+
:featured_description, :handling_cost, :handling_cost_units, :include_children, :is_donation_item, :is_fulfillable,
|
10
|
+
:is_gco_compliant, :is_inactive, :is_online, :is_taxable, :item_id, :last_modified_date, :manufacturer,
|
11
|
+
:manufacturer_addr1, :manufacturer_city, :manufacturer_state, :manufacturer_tariff, :manufacturer_tax_id,
|
12
|
+
:manufacturer_zip, :matrix_option_list, :matrix_type, :max_donation_amount, :meta_tag_html, :minimum_quantity,
|
13
|
+
:minimum_quantity_units, :mpn, :mult_manufacture_addr, :nex_tag_category, :no_price_message, :offer_support,
|
14
|
+
:on_special, :out_of_stock_behavior, :out_of_stock_message, :overall_quantity_pricing_type, :page_title,
|
15
|
+
:preference_criterion, :presentation_item_list, :prices_include_tax, :pricing_matrix, :producer, :product_feed_list,
|
16
|
+
:rate, :related_items_description, :sales_description, :schedule_b_code, :schedule_b_number, :schedule_b_quantity,
|
17
|
+
:search_keywords, :ship_individually, :shipping_cost, :shipping_cost_units, :shopping_dot_com_category,
|
18
|
+
:shopzilla_category_id, :show_default_donation_amount, :site_category_list, :sitemap_priority, :soft_descriptor,
|
19
|
+
:specials_description, :stock_description, :store_description, :store_detailed_description, :store_display_name,
|
20
|
+
:translations_list, :upc_code, :url_component, :use_marginal_rates, :vsoe_deferral, :vsoe_delivered,
|
21
|
+
:vsoe_permit_discount, :vsoe_price, :weight, :weight_unit, :weight_units
|
22
|
+
|
23
|
+
record_refs :billing_schedule, :cost_category, :custom_form, :deferred_revenue_account, :department, :income_amount,
|
24
|
+
:issue_product, :item_options_list, :location, :parent, :pricing_group, :purchase_tax_code, :quantity_pricing_schedule,
|
25
|
+
:rev_rec_schedule, :sale_unit, :sales_tax_code, :ship_package, :store_display_image, :store_display_thumbnail,
|
26
|
+
:store_item_template, :subsidiary_list, :tax_schedule, :units_type
|
27
|
+
|
28
|
+
def initialize(attributes = {})
|
29
|
+
initialize_from_attributes_hash(attributes)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.get(id)
|
33
|
+
response = Actions::Get.call(id, self)
|
34
|
+
if response.success?
|
35
|
+
new(response.body)
|
36
|
+
else
|
37
|
+
raise RecordNotFound, "#{self} with ID=#{id} could not be found"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/netsuite/version.rb
CHANGED
@@ -26,6 +26,14 @@ describe NetSuite::Records::Customer do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
it 'has the right record_refs' do
|
30
|
+
[
|
31
|
+
:custom_form, :entity_status
|
32
|
+
].each do |record_ref|
|
33
|
+
customer.should have_record_ref(record_ref)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
it 'has an addressbook_list field that builds a CustomerAddressbookList object' do
|
30
38
|
customer.addressbook_list = {
|
31
39
|
:addressbook => {
|
@@ -46,30 +54,6 @@ describe NetSuite::Records::Customer do
|
|
46
54
|
customer.addressbook_list.should be_kind_of(NetSuite::Records::CustomerAddressbookList)
|
47
55
|
end
|
48
56
|
|
49
|
-
describe 'RecordRefs' do
|
50
|
-
describe 'custom_form' do
|
51
|
-
it 'builds a RecordRef for this field' do
|
52
|
-
customer.custom_form = {
|
53
|
-
:@internal_id => '3',
|
54
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
55
|
-
:name => 'RP Customer Form'
|
56
|
-
}
|
57
|
-
customer.custom_form.should be_kind_of(NetSuite::Records::RecordRef)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe 'entity_status' do
|
62
|
-
it 'builds a RecordRef for this field' do
|
63
|
-
customer.entity_status = {
|
64
|
-
:@internal_id => '13',
|
65
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
66
|
-
:name => 'CUSTOMER-Closed Won'
|
67
|
-
}
|
68
|
-
customer.entity_status.should be_kind_of(NetSuite::Records::RecordRef)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
57
|
describe '.get' do
|
74
58
|
context 'when the response is successful' do
|
75
59
|
let(:response) { NetSuite::Response.new(:success => true, :body => { :is_person => true }) }
|
@@ -32,6 +32,14 @@ describe NetSuite::Records::Invoice do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
it 'has the right record_refs' do
|
36
|
+
[
|
37
|
+
:account, :bill_address_list, :custom_form, :entity, :posting_period, :ship_address_list
|
38
|
+
].each do |record_ref|
|
39
|
+
invoice.should have_record_ref(record_ref)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
35
43
|
it 'handles the "klass" field correctly'
|
36
44
|
# This field maps to 'class' but cannot be set as such in Ruby as it will cause runtime errors.
|
37
45
|
|
@@ -76,74 +84,6 @@ describe NetSuite::Records::Invoice do
|
|
76
84
|
pending
|
77
85
|
end
|
78
86
|
|
79
|
-
describe 'RecordRefs' do
|
80
|
-
describe 'account' do
|
81
|
-
it 'creates a RecordRef for this attribute' do
|
82
|
-
invoice.account = {
|
83
|
-
:@internal_id => '123',
|
84
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
85
|
-
:name => '1100 Accounts Receivable'
|
86
|
-
}
|
87
|
-
invoice.account.should be_kind_of(NetSuite::Records::RecordRef)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe 'bill_address_list' do
|
92
|
-
it 'creates a RecordRef for this attribute' do
|
93
|
-
invoice.bill_address_list = {
|
94
|
-
:@internal_id => '567',
|
95
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
96
|
-
:name => '123 Happy Lane'
|
97
|
-
}
|
98
|
-
invoice.bill_address_list.should be_kind_of(NetSuite::Records::RecordRef)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
describe 'custom_form' do
|
103
|
-
it 'creates a RecordRef for this attribute' do
|
104
|
-
invoice.custom_form = {
|
105
|
-
:@internal_id => '101',
|
106
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
107
|
-
:name => 'RP Test Product Invoice'
|
108
|
-
}
|
109
|
-
invoice.custom_form.should be_kind_of(NetSuite::Records::RecordRef)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe 'entity' do
|
114
|
-
it 'creates a RecordRef for this attribute' do
|
115
|
-
invoice.entity = {
|
116
|
-
:@internal_id => '988',
|
117
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
118
|
-
:name => '100157 Shutter Fly'
|
119
|
-
}
|
120
|
-
invoice.entity.should be_kind_of(NetSuite::Records::RecordRef)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe 'posting_period' do
|
125
|
-
it 'creates a RecordRef for this attribute' do
|
126
|
-
invoice.posting_period = {
|
127
|
-
:@internal_id => '20',
|
128
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
129
|
-
:name => 'Jan 2012'
|
130
|
-
}
|
131
|
-
invoice.posting_period.should be_kind_of(NetSuite::Records::RecordRef)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe 'ship_address_list' do
|
136
|
-
it 'creates a RecordRef for this attribute' do
|
137
|
-
invoice.ship_address_list = {
|
138
|
-
:@internal_id => '567',
|
139
|
-
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
140
|
-
:name => '123 Happy Lane'
|
141
|
-
}
|
142
|
-
invoice.ship_address_list.should be_kind_of(NetSuite::Records::RecordRef)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
87
|
it 'has a transaction_bill_address field that builds a BillAddress object' do
|
148
88
|
invoice.transaction_bill_address = {
|
149
89
|
:"@xmlns:platform_common" => 'urn:common_2011_2.platform.webservices.netsuite.com',
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Records::NonInventorySaleItem do
|
4
|
+
let(:item) { NetSuite::Records::NonInventorySaleItem.new }
|
5
|
+
|
6
|
+
it 'has the right fields' do
|
7
|
+
[
|
8
|
+
:available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :country_of_manufacture, :created_date,
|
9
|
+
:custom_field_list, :display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap,
|
10
|
+
:featured_description, :handling_cost, :handling_cost_units, :include_children, :is_donation_item, :is_fulfillable,
|
11
|
+
:is_gco_compliant, :is_inactive, :is_online, :is_taxable, :item_id, :last_modified_date, :manufacturer, :manufacturer_addr1,
|
12
|
+
:manufacturer_city, :manufacturer_state, :manufacturer_tariff, :manufacturer_tax_id, :manufacturer_zip, :matrix_option_list,
|
13
|
+
:matrix_type, :max_donation_amount, :meta_tag_html, :minimum_quantity, :minimum_quantity_units, :mpn,
|
14
|
+
:mult_manufacture_addr, :nex_tag_category, :no_price_message, :offer_support, :on_special, :out_of_stock_behavior,
|
15
|
+
:out_of_stock_message, :overall_quantity_pricing_type, :page_title, :preference_criterion, :presentation_item_list,
|
16
|
+
:prices_include_tax, :pricing_matrix, :producer, :product_feed_list, :rate, :related_items_description, :sales_description,
|
17
|
+
:schedule_b_code, :schedule_b_number, :schedule_b_quantity, :search_keywords, :ship_individually, :shipping_cost,
|
18
|
+
:shipping_cost_units, :shopping_dot_com_category, :shopzilla_category_id, :show_default_donation_amount,
|
19
|
+
:site_category_list, :sitemap_priority, :soft_descriptor, :specials_description, :stock_description, :store_description,
|
20
|
+
:store_detailed_description, :store_display_name, :translations_list, :upc_code, :url_component, :use_marginal_rates,
|
21
|
+
:vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount, :vsoe_price, :weight, :weight_unit, :weight_units
|
22
|
+
].each do |field|
|
23
|
+
item.should have_field(field)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'has the right record_refs' do
|
28
|
+
[
|
29
|
+
:billing_schedule, :cost_category, :custom_form, :deferred_revenue_account, :department, :income_amount, :issue_product,
|
30
|
+
:item_options_list, :location, :parent, :pricing_group, :purchase_tax_code, :quantity_pricing_schedule, :rev_rec_schedule,
|
31
|
+
:sale_unit, :sales_tax_code, :ship_package, :store_display_image, :store_display_thumbnail, :store_item_template,
|
32
|
+
:subsidiary_list, :tax_schedule, :units_type
|
33
|
+
].each do |record_ref|
|
34
|
+
item.should have_record_ref(record_ref)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# :class RecordRef
|
39
|
+
|
40
|
+
describe '.get' do
|
41
|
+
context 'when the response is successful' do
|
42
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :manufacturer_zip => '90401' }) }
|
43
|
+
|
44
|
+
it 'returns a NonInventorySaleItem instance populated with the data from the response object' do
|
45
|
+
NetSuite::Actions::Get.should_receive(:call).with(20, NetSuite::Records::NonInventorySaleItem).and_return(response)
|
46
|
+
customer = NetSuite::Records::NonInventorySaleItem.get(20)
|
47
|
+
customer.should be_kind_of(NetSuite::Records::NonInventorySaleItem)
|
48
|
+
customer.manufacturer_zip.should eql('90401')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when the response is unsuccessful' do
|
53
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
54
|
+
|
55
|
+
it 'raises a RecordNotFound exception' do
|
56
|
+
NetSuite::Actions::Get.should_receive(:call).with(20, NetSuite::Records::NonInventorySaleItem).and_return(response)
|
57
|
+
lambda {
|
58
|
+
NetSuite::Records::NonInventorySaleItem.get(20)
|
59
|
+
}.should raise_error(NetSuite::RecordNotFound, 'NetSuite::Records::NonInventorySaleItem with ID=20 could not be found')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
RSpec::Matchers.define :have_record_ref do |attribute|
|
2
|
+
|
3
|
+
match do |model|
|
4
|
+
record_ref_can_be_set_and_retrieved?(model, attribute) && record_ref_can_be_set_on_instantiation?(model, attribute)
|
5
|
+
end
|
6
|
+
|
7
|
+
def record_ref_can_be_set_and_retrieved?(model, attribute)
|
8
|
+
model.send("#{attribute}=".to_sym, attributes)
|
9
|
+
model.send(attribute).should be_kind_of(NetSuite::Records::RecordRef)
|
10
|
+
end
|
11
|
+
|
12
|
+
def record_ref_can_be_set_on_instantiation?(model, attribute)
|
13
|
+
new_model = model.class.new(attribute => attributes)
|
14
|
+
new_model.send(attribute).should be_kind_of(NetSuite::Records::RecordRef)
|
15
|
+
end
|
16
|
+
|
17
|
+
def attributes
|
18
|
+
{
|
19
|
+
:@internal_id => '125',
|
20
|
+
:"@xmlns:platform_core" => 'urn:core_2011_2.platform.webservices.netsuite.com',
|
21
|
+
:name => 'RP RecordRef'
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
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: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 9
|
10
|
+
version: 0.0.9
|
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: 2012-01-
|
18
|
+
date: 2012-01-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: savon
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- lib/netsuite/records/customer.rb
|
114
114
|
- lib/netsuite/records/customer_addressbook_list.rb
|
115
115
|
- lib/netsuite/records/invoice.rb
|
116
|
+
- lib/netsuite/records/non_inventory_sale_item.rb
|
116
117
|
- lib/netsuite/records/record_ref.rb
|
117
118
|
- lib/netsuite/records/ship_address.rb
|
118
119
|
- lib/netsuite/response.rb
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- spec/netsuite/records/customer_addressbook_list_spec.rb
|
132
133
|
- spec/netsuite/records/customer_spec.rb
|
133
134
|
- spec/netsuite/records/invoice_spec.rb
|
135
|
+
- spec/netsuite/records/non_inventory_sale_item_spec.rb
|
134
136
|
- spec/netsuite/records/record_ref_spec.rb
|
135
137
|
- spec/netsuite/records/ship_address_spec.rb
|
136
138
|
- spec/netsuite/response_spec.rb
|
@@ -144,6 +146,7 @@ files:
|
|
144
146
|
- spec/support/fixtures/get/get_customer.xml
|
145
147
|
- spec/support/fixtures/get/get_invoice.xml
|
146
148
|
- spec/support/fixtures/initialize/initialize_invoice_from_customer.xml
|
149
|
+
- spec/support/record_ref_matcher.rb
|
147
150
|
- spec/support/savon.rb
|
148
151
|
- wsdl/2011_02.wsdl
|
149
152
|
homepage: https://github.com/RevolutionPrep/netsuite
|
@@ -192,6 +195,7 @@ test_files:
|
|
192
195
|
- spec/netsuite/records/customer_addressbook_list_spec.rb
|
193
196
|
- spec/netsuite/records/customer_spec.rb
|
194
197
|
- spec/netsuite/records/invoice_spec.rb
|
198
|
+
- spec/netsuite/records/non_inventory_sale_item_spec.rb
|
195
199
|
- spec/netsuite/records/record_ref_spec.rb
|
196
200
|
- spec/netsuite/records/ship_address_spec.rb
|
197
201
|
- spec/netsuite/response_spec.rb
|
@@ -205,4 +209,5 @@ test_files:
|
|
205
209
|
- spec/support/fixtures/get/get_customer.xml
|
206
210
|
- spec/support/fixtures/get/get_invoice.xml
|
207
211
|
- spec/support/fixtures/initialize/initialize_invoice_from_customer.xml
|
212
|
+
- spec/support/record_ref_matcher.rb
|
208
213
|
- spec/support/savon.rb
|