netsuite 0.2.5 → 0.2.6

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTRiNTZiNjNmNzNhNDY0NzNiYWEwYTBmZmI4MWI3MzA3YTM5N2Q4Nw==
4
+ MTM3NmVlZDg3YjVmM2VhNzg0YzJhOWVhMzUxYmFjZGY2MTJmOTAxMg==
5
5
  data.tar.gz: !binary |-
6
- ZTdlZTI4Njc5MDlmN2ViNThiMDNjY2Q4ZGE4ZjZkM2JiZGUwNDc0Ng==
6
+ Yzc1OGM5ZWFkNzg2NTNjMDcxYWM0ZDU4YTQ2Y2U4ZmMzYzJhNWYzMg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWVkYjczN2Q2ODA0ZTcxMmJmMTlhN2ZhNTg1MmY0Nzc2NGE0MmZhZDJmZWUz
10
- ZmE4YWJlZWIxMDQ1NDhjZWVlYjNmYjI3OTdhYjQyNmQxOTUzMWJiYjFlNWFj
11
- NmQ3YmU0OTMzOTdhYmI2NzkxMDVjZjE5ZjQ1ZGY2OTE0NzE4ZGU=
9
+ MjhlZDc1MTk0OTgwNGE2MDNjNDI2YzczMWE3ZTU2NWU1NjFiYmY5ZWRmZmUz
10
+ OGEzZTZmYWVhZGQyMDg1OWI5ZDc3M2U2MmY1Yjc3ODg1ZGRhYmJiYjM5NzUw
11
+ MmU5ZjgyODFhOTUzY2ZmZGQ5ZDY0NmZjODdiNzkyOGY4NTZkOTU=
12
12
  data.tar.gz: !binary |-
13
- NzUzMGVkMDg2ZTQxOTdmMWI3ZWU3ZjgzZWJiMDlmYzQ4M2QzZmFiZWEyZGYw
14
- N2ZkZDgwNWUwNzU1MmVhZDRhZjQwYjhkOGU2OTUzMzY1YWYzMGFlMzMwZWRh
15
- MDhjYjRlMzZlY2MzMTVhZTg5YWVlNDgyYTFiN2NiZGQxZDVhMTA=
13
+ YWU4NTdjZTMxYmMxOWYxNTE2MTFlMmZlNzViNmMxMzcwYTBlMzRiZGY4N2Y5
14
+ NGEyOGI5NTA4MTg5OWYxMTkyMTYzOWViZmQ5YTVhNTJiYjZjMGM3ZDc0Yzgy
15
+ NzMxZTkyMGEyOTdjN2U0NTI3YTZiOTNiMDU0NmEyOTBhYTFmZGQ=
@@ -55,6 +55,9 @@ module NetSuite
55
55
  autoload :BillAddress, 'netsuite/records/bill_address'
56
56
  autoload :BinNumberList, 'netsuite/records/bin_number_list'
57
57
  autoload :CashSale, 'netsuite/records/cash_sale'
58
+ autoload :CashRefund, 'netsuite/records/cash_refund'
59
+ autoload :CashRefundItem, 'netsuite/records/cash_refund_item'
60
+ autoload :CashRefundItemList, 'netsuite/records/cash_refund_item_list'
58
61
  autoload :Classification, 'netsuite/records/classification'
59
62
  autoload :CreditMemo, 'netsuite/records/credit_memo'
60
63
  autoload :CreditMemoApply, 'netsuite/records/credit_memo_apply'
@@ -15,10 +15,11 @@ module NetSuite
15
15
  wsdl: wsdl,
16
16
  read_timeout: read_timeout,
17
17
  namespaces: namespaces,
18
- soap_header: auth_header(credentials),
18
+ soap_header: auth_header(credentials).update(soap_header),
19
19
  pretty_print_xml: true,
20
20
  logger: logger,
21
21
  log_level: log_level,
22
+ log: !silent, # turn off logging entirely if configured
22
23
  }.update(params))
23
24
  end
24
25
 
@@ -65,6 +66,18 @@ module NetSuite
65
66
  end
66
67
  end
67
68
 
69
+ def soap_header=(headers)
70
+ attributes[:soap_header] = headers
71
+ end
72
+
73
+ def soap_header(headers = nil)
74
+ if headers
75
+ self.soap_header = headers
76
+ else
77
+ attributes[:soap_header] ||= {}
78
+ end
79
+ end
80
+
68
81
  def auth_header(credentials={})
69
82
  {
70
83
  'platformMsgs:passport' => {
@@ -176,6 +189,15 @@ module NetSuite
176
189
  end
177
190
  end
178
191
 
192
+ def silent(value=nil)
193
+ self.silent = value if value
194
+ attributes[:silent]
195
+ end
196
+
197
+ def silent=(value)
198
+ attributes[:silent] ||= value
199
+ end
200
+
179
201
  def log_level(value = nil)
180
202
  self.log_level = value || :debug
181
203
  attributes[:log_level]
@@ -4,8 +4,9 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Actions
7
+ include Namespaces::ListAcct
7
8
 
8
- actions :get, :add, :delete
9
+ actions :get, :add, :delete, :search
9
10
 
10
11
  fields :allow_non_gl_changes, :end_date, :is_adjust, :is_quarter, :is_year, :period_name, :start_date
11
12
 
@@ -19,7 +20,6 @@ module NetSuite
19
20
  @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
20
21
  initialize_from_attributes_hash(attributes)
21
22
  end
22
-
23
23
  end
24
24
  end
25
25
  end
@@ -0,0 +1,29 @@
1
+ module NetSuite
2
+ module Records
3
+ class CashRefund
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::TranCust
9
+
10
+ actions :add, :get, :delete
11
+
12
+ fields :tran_date
13
+
14
+ field :item_list, CashRefundItemList
15
+ field :custom_field_list, CustomFieldList
16
+
17
+ record_refs :entity, :custom_form, :payment_method, :created_from
18
+
19
+ attr_reader :internal_id
20
+ attr_accessor :external_id
21
+
22
+ def initialize(attributes = {})
23
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
24
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
25
+ initialize_from_attributes_hash(attributes)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module NetSuite
2
+ module Records
3
+ class CashRefundItem
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Namespaces::TranCust
8
+
9
+ field :amount
10
+
11
+ record_refs :item, :klass
12
+
13
+ def initialize(attributes_or_record = {})
14
+ initialize_from_attributes_hash(attributes_or_record)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ module NetSuite
2
+ module Records
3
+ class CashRefundItemList
4
+ include Support::Fields
5
+ include Namespaces::TranCust
6
+
7
+ fields :item
8
+
9
+ def initialize(attributes = {})
10
+ initialize_from_attributes_hash(attributes)
11
+ end
12
+
13
+ def item=(items)
14
+ case items
15
+ when Hash
16
+ self.items << CashRefundItem.new(items)
17
+ when Array
18
+ items.each { |item| self.items << CashRefundItem.new(item) }
19
+ end
20
+ end
21
+
22
+ def items
23
+ @items ||= []
24
+ end
25
+
26
+ def to_record
27
+ { "#{record_namespace}:item" => items.map(&:to_record) }
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+
@@ -17,7 +17,7 @@ module NetSuite
17
17
 
18
18
  actions :add, :get
19
19
 
20
- fields :custom_form, :payment, :tran_date, :exchange_rate, :undep_funds
20
+ fields :custom_form, :payment, :tran_date, :exchange_rate, :undep_funds, :memo
21
21
 
22
22
  record_refs :customer, :sales_order, :account
23
23
 
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
@@ -17,29 +17,31 @@ describe NetSuite::Actions::Search do
17
17
  end
18
18
 
19
19
  context "saved search" do
20
- before do
21
- savon.expects(:search).with(:message => {
22
- 'searchRecord' => {
23
- '@xsi:type' => 'listRel:CustomerSearchAdvanced',
24
- '@savedSearchId' => 500,
25
- :content! => { "listRel:criteria" => {} }
26
- },
27
- }).returns(File.read('spec/support/fixtures/search/saved_search_customer.xml'))
28
- end
20
+ context "with no params" do
21
+ before do
22
+ savon.expects(:search).with(:message => {
23
+ 'searchRecord' => {
24
+ '@xsi:type' => 'listRel:CustomerSearchAdvanced',
25
+ '@savedSearchId' => 500,
26
+ :content! => { "listRel:criteria" => {} }
27
+ },
28
+ }).returns(File.read('spec/support/fixtures/search/saved_search_customer.xml'))
29
+ end
29
30
 
30
- it "should handle a ID only search" do
31
- result = NetSuite::Records::Customer.search(saved: 500)
32
- result.results.size.should == 1
33
- result.results.first.email.should == 'aemail@gmail.com'
34
- end
31
+ it "should handle a ID only search" do
32
+ result = NetSuite::Records::Customer.search(saved: 500)
33
+ result.results.size.should == 1
34
+ result.results.first.email.should == 'aemail@gmail.com'
35
+ end
35
36
 
36
- it "merges preferences gracefully" do
37
- expect {
38
- NetSuite::Records::Customer.search(
39
- saved: 500,
40
- preferences: { page_size: 20 }
41
- )
42
- }.not_to raise_error
37
+ it "merges preferences gracefully" do
38
+ expect {
39
+ NetSuite::Records::Customer.search(
40
+ saved: 500,
41
+ preferences: { page_size: 20 }
42
+ )
43
+ }.not_to raise_error
44
+ end
43
45
  end
44
46
 
45
47
  skip "should handle a ID search with basic params"
@@ -54,23 +56,19 @@ describe NetSuite::Actions::Search do
54
56
  "listRel:criteria" => {
55
57
  "listRel:basic" => {
56
58
  "platformCommon:entityId" => {
57
- "platformCore:searchValue" => "New Keywords"
59
+ :content! => {"platformCore:searchValue" => "New Keywords"},
60
+ :"@operator" => "hasKeywords"
58
61
  },
59
-
60
- :attributes! => {
61
- "platformCommon:entityId" => { "operator" => "hasKeywords" },
62
- "platformCommon:stage" => { "operator" => "anyOf" }
62
+ "platformCommon:stage" => {
63
+ :content! => {"platformCore:searchValue"=>["_lead", "_customer"]},
64
+ :"@operator" => "anyOf"
63
65
  },
64
-
65
- "platformCommon:stage" => { "platformCore:searchValue" => ["_lead", "_customer"] },
66
66
  "platformCommon:customFieldList" => {
67
67
  "platformCore:customField" => [
68
68
  {
69
- "platformCore:searchValue" => [{}, {}],
69
+ "platformCore:searchValue" => [{:"@internalId" => 4}, {:"@internalId" => 11}],
70
70
  :attributes! => {
71
- "platformCore:searchValue" => {
72
- "internalId" => [4, 11]
73
- }
71
+ "platformCore:searchValue" => { "internalId" => [4, 11] }
74
72
  }
75
73
  },
76
74
  {
@@ -66,7 +66,28 @@ describe NetSuite::Configuration do
66
66
  'platformCore:email' => 'user@example.com',
67
67
  'platformCore:password' => 'myPassword',
68
68
  'platformCore:account' => '1234',
69
- 'platformCore:role' => { :@type => 'role', :@internalId => '3' },
69
+ 'platformCore:role' => { :@internalId => '3' },
70
+ }
71
+ })
72
+ end
73
+ end
74
+
75
+ describe '#soap_header' do
76
+ before do
77
+ config.email = 'user@example.com'
78
+ config.password = 'myPassword'
79
+ config.account = 1234
80
+ end
81
+
82
+ it 'adds a new header to the soap header' do
83
+ config.soap_header = {
84
+ 'platformMsgs:preferences' => {
85
+ 'platformMsgs:ignoreReadOnlyFields' => true,
86
+ }
87
+ }
88
+ config.soap_header.should eql({
89
+ 'platformMsgs:preferences' => {
90
+ 'platformMsgs:ignoreReadOnlyFields' => true,
70
91
  }
71
92
  })
72
93
  end
@@ -143,7 +164,7 @@ describe NetSuite::Configuration do
143
164
  end
144
165
  end
145
166
  end
146
-
167
+
147
168
  describe '#role=' do
148
169
  it 'sets the role according to the input value' do
149
170
  config.role = "6"
@@ -44,6 +44,42 @@ describe NetSuite::Records::AccountingPeriod do
44
44
  end
45
45
  end
46
46
 
47
+ describe ".search" do
48
+ context 'when the response is successful' do
49
+
50
+ it 'returns a Account instance populated with the data from the response object' do
51
+ body = {
52
+ total_records: 2,
53
+ record_list: {
54
+ record: [
55
+ {period_name: "Accounting Period 1"},
56
+ {period_name: "Accounting Period 2"}
57
+ ]
58
+ }
59
+ }
60
+
61
+ allow(NetSuite::Actions::Search).to receive(:call).with(
62
+ [NetSuite::Records::AccountingPeriod, {:external_id => 1}], {}
63
+ ).and_return(
64
+ NetSuite::Response.new(:success => true, :body => body)
65
+ )
66
+
67
+ search_result = NetSuite::Records::AccountingPeriod.search(:external_id => 1)
68
+
69
+ expect(search_result).to be_a NetSuite::Support::SearchResult
70
+ expect(search_result.total_records).to eq 2
71
+
72
+ period1, period2 = search_result.results
73
+
74
+ expect(period1).to be_a NetSuite::Records::AccountingPeriod
75
+ expect(period1.period_name).to eq 'Accounting Period 1'
76
+
77
+ expect(period2).to be_a NetSuite::Records::AccountingPeriod
78
+ expect(period2.period_name).to eq 'Accounting Period 2'
79
+ end
80
+ end
81
+ end
82
+
47
83
  describe '#add' do
48
84
  let(:test_data) { { :acct_name => 'Test Accounting Period', :description => 'An example accounting period' } }
49
85
 
@@ -99,5 +135,4 @@ describe NetSuite::Records::AccountingPeriod do
99
135
  end
100
136
  end
101
137
  end
102
-
103
138
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CashRefundItemList do
4
+ let(:list) { NetSuite::Records::CashRefundItemList.new }
5
+
6
+ it 'has a items attribute' do
7
+ expect(list.items).to be_kind_of(Array)
8
+ end
9
+
10
+ describe '#to_record' do
11
+ before do
12
+ list.items << NetSuite::Records::CashRefundItem.new(
13
+ :amount => 10
14
+ )
15
+ end
16
+
17
+ it 'can represent itself as a SOAP record' do
18
+ record = {
19
+ 'tranCust:item' => [{
20
+ 'tranCust:amount' => 10
21
+ }]
22
+ }
23
+ expect(list.to_record).to eql(record)
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CashRefundItem do
4
+ let(:item) { NetSuite::Records::CashRefundItem.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :amount
9
+ ].each do |field|
10
+ expect(item).to have_field(field)
11
+ end
12
+ end
13
+
14
+ it 'has all the right record refs' do
15
+ [
16
+ :item, :klass
17
+ ].each do |record_ref|
18
+ expect(item).to have_record_ref(record_ref)
19
+ end
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CashRefund do
4
+ let(:cashrefund) { NetSuite::Records::CashRefund.new }
5
+ let(:customer) { NetSuite::Records::Customer.new }
6
+
7
+ it 'has all the right fields' do
8
+ [
9
+ :tran_date
10
+ ].each do |field|
11
+ expect(cashrefund).to have_field(field)
12
+ end
13
+ end
14
+
15
+ it 'has all the right record refs' do
16
+ [
17
+ :entity, :custom_form, :payment_method, :created_from
18
+ ].each do |record_ref|
19
+ expect(cashrefund).to have_record_ref(record_ref)
20
+ end
21
+ end
22
+
23
+ describe '#item_list' do
24
+ it 'can be set from attributes' do
25
+ attributes = {
26
+ :item => {
27
+ :amount => 10
28
+ }
29
+ }
30
+ cashrefund.item_list = attributes
31
+ expect(cashrefund.item_list).to be_kind_of(NetSuite::Records::CashRefundItemList)
32
+ expect(cashrefund.item_list.items.length).to eql(1)
33
+ end
34
+
35
+ it 'can be set from a CashRefundItemList object' do
36
+ item_list = NetSuite::Records::CashRefundItemList.new
37
+ cashrefund.item_list = item_list
38
+ expect(cashrefund.item_list).to eql(item_list)
39
+ end
40
+ end
41
+
42
+ describe '#custom_field_list' do
43
+ it 'can be set through individual field setters' do
44
+ cashrefund.custom_field_list.custbody18 = "123-456"
45
+ expect(cashrefund.custom_field_list).to be_kind_of(NetSuite::Records::CustomFieldList)
46
+ expect(cashrefund.custom_field_list.custom_fields.length).to eql(1)
47
+ expect(cashrefund.custom_field_list.custbody18.attributes[:value]).to eq("123-456")
48
+ end
49
+ end
50
+
51
+ describe '.get' do
52
+ context 'when the response is successful' do
53
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :tran_date => 'test_tran_date' }) }
54
+
55
+ it 'returns a CashRefund instance populated with the data from the response object' do
56
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::CashRefund, :external_id => 1], {}).and_return(response)
57
+ cashrefund = NetSuite::Records::CashRefund.get(:external_id => 1)
58
+ expect(cashrefund).to be_kind_of(NetSuite::Records::CashRefund)
59
+ expect(cashrefund.tran_date).to eql('test_tran_date')
60
+ end
61
+ end
62
+
63
+ context 'when the response is unsuccessful' do
64
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
65
+
66
+ it 'raises a RecordNotFound exception' do
67
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::CashRefund, :external_id => 1], {}).and_return(response)
68
+ expect {
69
+ NetSuite::Records::CashRefund.get(:external_id => 1)
70
+ }.to raise_error(NetSuite::RecordNotFound,
71
+ /NetSuite::Records::CashRefund with OPTIONS=(.*) could not be found/)
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '#add' do
77
+ let(:test_data) { { :email => 'test@example.com', :fax => '1234567890' } }
78
+
79
+ context 'when the response is successful' do
80
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
81
+
82
+ it 'returns true' do
83
+ cashrefund = NetSuite::Records::CashRefund.new(test_data)
84
+ expect(NetSuite::Actions::Add).to receive(:call).
85
+ with([cashrefund], {}).
86
+ and_return(response)
87
+ expect(cashrefund.add).to be_truthy
88
+ end
89
+ end
90
+
91
+ context 'when the response is unsuccessful' do
92
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
93
+
94
+ it 'returns false' do
95
+ cashrefund = NetSuite::Records::CashRefund.new(test_data)
96
+ expect(NetSuite::Actions::Add).to receive(:call).
97
+ with([cashrefund], {}).
98
+ and_return(response)
99
+ expect(cashrefund.add).to be_falsey
100
+ end
101
+ end
102
+ end
103
+
104
+ describe '#delete' do
105
+ let(:test_data) { { :internal_id => '1' } }
106
+
107
+ context 'when the response is successful' do
108
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
109
+
110
+ it 'returns true' do
111
+ cashrefund = NetSuite::Records::CashRefund.new(test_data)
112
+ expect(NetSuite::Actions::Delete).to receive(:call).
113
+ with([cashrefund], {}).
114
+ and_return(response)
115
+ expect(cashrefund.delete).to be_truthy
116
+ end
117
+ end
118
+
119
+ context 'when the response is unsuccessful' do
120
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
121
+
122
+ it 'returns false' do
123
+ cashrefund = NetSuite::Records::CashRefund.new(test_data)
124
+ expect(NetSuite::Actions::Delete).to receive(:call).
125
+ with([cashrefund], {}).
126
+ and_return(response)
127
+ expect(cashrefund.delete).to be_falsey
128
+ end
129
+ end
130
+ end
131
+
132
+ describe '#to_record' do
133
+ let(:tran_date) { Time.now }
134
+ before do
135
+ cashrefund.tran_date = tran_date
136
+ end
137
+ it 'can represent itself as a SOAP record' do
138
+ record = {
139
+ 'tranCust:tranDate' => tran_date
140
+ }
141
+ expect(cashrefund.to_record).to eql(record)
142
+ end
143
+ end
144
+
145
+
146
+ describe '#record_type' do
147
+ it 'returns a string representation of the SOAP type' do
148
+ expect(cashrefund.record_type).to eql('tranCust:CashRefund')
149
+ end
150
+ end
151
+
152
+ end
@@ -10,7 +10,7 @@ describe NetSuite::Records::CustomerPayment do
10
10
  :applied, :auth_code, :auto_apply, :balance, :cc_approved, :cc_avs_street_match, :cc_avs_zip_match, :cc_expire_date,
11
11
  :cc_name, :cc_number, :cc_security_code, :cc_security_code_match, :cc_street, :cc_zip_code, :charge_it, :check_num,
12
12
  :created_date, :currency_name, :debit_card_issue_no, :exchange_rate, :ignore_avs, :last_modified_date, :memo, :payment,
13
- :skip, :pn_ref_num, :status, :three_d_status_code, :total, :tran_date, :unapplied, :undep_funds, :valid_from
13
+ :pending, :pn_ref_num, :status, :three_d_status_code, :total, :tran_date, :unapplied, :undep_funds, :valid_from
14
14
  ].each do |field|
15
15
  payment.should have_field(field)
16
16
  end
@@ -14,10 +14,4 @@ describe NetSuite::Records::PhoneCall do
14
14
  phone_call.should have_record_ref(rr)
15
15
  end
16
16
  end
17
-
18
- describe 'to_record' do
19
- it 'should be verified with our params' do
20
- fail 'Not Verified.'
21
- end
22
- end
23
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netsuite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Moran
@@ -9,36 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-26 00:00:00.000000000 Z
12
+ date: 2014-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ name: savon
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ~>
18
19
  - !ruby/object:Gem::Version
19
20
  version: 2.3.0
21
+ type: :runtime
20
22
  prerelease: false
21
23
  version_requirements: !ruby/object:Gem::Requirement
22
24
  requirements:
23
25
  - - ~>
24
26
  - !ruby/object:Gem::Version
25
27
  version: 2.3.0
26
- name: savon
27
- type: :runtime
28
28
  - !ruby/object:Gem::Dependency
29
+ name: rspec
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - ~>
32
33
  - !ruby/object:Gem::Version
33
34
  version: '2.99'
35
+ type: :development
34
36
  prerelease: false
35
37
  version_requirements: !ruby/object:Gem::Requirement
36
38
  requirements:
37
39
  - - ~>
38
40
  - !ruby/object:Gem::Version
39
41
  version: '2.99'
40
- name: rspec
41
- type: :development
42
42
  description: NetSuite SuiteTalk API Wrapper
43
43
  email:
44
44
  - ryan.moran@gmail.com
@@ -84,6 +84,9 @@ files:
84
84
  - lib/netsuite/records/base_ref_list.rb
85
85
  - lib/netsuite/records/bill_address.rb
86
86
  - lib/netsuite/records/bin_number_list.rb
87
+ - lib/netsuite/records/cash_refund.rb
88
+ - lib/netsuite/records/cash_refund_item.rb
89
+ - lib/netsuite/records/cash_refund_item_list.rb
87
90
  - lib/netsuite/records/cash_sale.rb
88
91
  - lib/netsuite/records/classification.rb
89
92
  - lib/netsuite/records/contact.rb
@@ -173,6 +176,9 @@ files:
173
176
  - spec/netsuite/records/account_spec.rb
174
177
  - spec/netsuite/records/accounting_period_spec.rb
175
178
  - spec/netsuite/records/bill_address_spec.rb
179
+ - spec/netsuite/records/cash_refund_item_list_spec.rb
180
+ - spec/netsuite/records/cash_refund_item_spec.rb
181
+ - spec/netsuite/records/cash_refund_spec.rb
176
182
  - spec/netsuite/records/classification_spec.rb
177
183
  - spec/netsuite/records/credit_memo_apply_list_spec.rb
178
184
  - spec/netsuite/records/credit_memo_apply_spec.rb
@@ -287,6 +293,9 @@ test_files:
287
293
  - spec/netsuite/records/account_spec.rb
288
294
  - spec/netsuite/records/accounting_period_spec.rb
289
295
  - spec/netsuite/records/bill_address_spec.rb
296
+ - spec/netsuite/records/cash_refund_item_list_spec.rb
297
+ - spec/netsuite/records/cash_refund_item_spec.rb
298
+ - spec/netsuite/records/cash_refund_spec.rb
290
299
  - spec/netsuite/records/classification_spec.rb
291
300
  - spec/netsuite/records/credit_memo_apply_list_spec.rb
292
301
  - spec/netsuite/records/credit_memo_apply_spec.rb