netsuite 0.7.8 → 0.7.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 37636c6c1899441452fd3042cf52037b76680616
4
+ data.tar.gz: 15c8900ac424109bdece121e2abbc3902a47bf7e
5
+ SHA512:
6
+ metadata.gz: 08d79d1b7ee99dde3b063afab044f47a4d21e2628d15d9bd0119fc81de3fca087e6d5c85b882e5ae6b844e66e9016cfebd204b61cd0656e9b09c02c6880e23e1
7
+ data.tar.gz: df7df5ffb7fd5a7815241ef70ac3d29ff46d07d9f26c770e079e663a2450f45e33f535a603d8dfb1221d091297b902472c2c66ba9404d3cc880faaa5341e8e7e
@@ -1 +1 @@
1
- 1.9.3-p550
1
+ 2.3.0
data/Gemfile CHANGED
@@ -2,7 +2,9 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'simplecov', :require => false
5
+
5
6
  gem 'pry-nav'
7
+ gem 'pry-rescue'
6
8
 
7
9
  # required for CircleCI to build properly with ruby 1.9.3
8
10
  gem 'json', '~> 1.8.3'
@@ -141,6 +141,9 @@ module NetSuite
141
141
  autoload :GiftCertRedemption, 'netsuite/records/gift_cert_redemption'
142
142
  autoload :GiftCertRedemptionList, 'netsuite/records/gift_cert_redemption_list'
143
143
  autoload :Folder, 'netsuite/records/folder'
144
+ autoload :InventoryAdjustment, 'netsuite/records/inventory_adjustment'
145
+ autoload :InventoryAdjustmentInventory, 'netsuite/records/inventory_adjustment_inventory'
146
+ autoload :InventoryAdjustmentInventoryList, 'netsuite/records/inventory_adjustment_inventory_list'
144
147
  autoload :InventoryAssignment, 'netsuite/records/inventory_assignment'
145
148
  autoload :InventoryAssignmentList, 'netsuite/records/inventory_assignment_list'
146
149
  autoload :InventoryDetail, 'netsuite/records/inventory_detail'
@@ -239,6 +242,9 @@ module NetSuite
239
242
  autoload :VendorCreditItemList, 'netsuite/records/vendor_credit_item_list'
240
243
  autoload :VendorCreditExpense, 'netsuite/records/vendor_credit_expense'
241
244
  autoload :VendorCreditExpenseList, 'netsuite/records/vendor_credit_expense_list'
245
+ autoload :VendorReturnAuthorization, 'netsuite/records/vendor_return_authorization'
246
+ autoload :VendorReturnAuthorizationItem, 'netsuite/records/vendor_return_authorization_item'
247
+ autoload :VendorReturnAuthorizationItemList, 'netsuite/records/vendor_return_authorization_item_list'
242
248
  autoload :VendorPayment, 'netsuite/records/vendor_payment'
243
249
  autoload :VendorPaymentApply, 'netsuite/records/vendor_payment_apply'
244
250
  autoload :VendorPaymentApplyList, 'netsuite/records/vendor_payment_apply_list'
@@ -179,29 +179,25 @@ module NetSuite
179
179
  end
180
180
  end
181
181
 
182
- # TODO this needs to be DRYed up a bit
183
-
184
- if saved_search_id
185
- {
182
+ if saved_search_id || !columns_structure.empty?
183
+ search_structure = {
186
184
  'searchRecord' => {
187
- '@savedSearchId' => saved_search_id,
188
185
  '@xsi:type' => "#{namespace}:#{class_name}SearchAdvanced",
189
186
  :content! => {
190
187
  "#{namespace}:criteria" => criteria_structure
191
- # TODO need to optionally support columns here
192
- }
193
- }
194
- }
195
- elsif !columns_structure.empty?
196
- {
197
- 'searchRecord' => {
198
- '@xsi:type' => "#{namespace}:#{class_name}SearchAdvanced",
199
- :content! => {
200
- "#{namespace}:criteria" => criteria_structure,
201
- "#{namespace}:columns" => columns_structure
202
188
  }
203
189
  }
204
190
  }
191
+
192
+ if saved_search_id
193
+ search_structure['searchRecord']['@savedSearchId'] = saved_search_id
194
+ end
195
+
196
+ if !columns_structure.empty?
197
+ search_structure['searchRecord'][:content!]["#{namespace}:columns"] = columns_structure
198
+ end
199
+
200
+ search_structure
205
201
  else
206
202
  {
207
203
  'searchRecord' => {
@@ -4,6 +4,7 @@ module NetSuite
4
4
 
5
5
  def reset!
6
6
  NetSuite::Utilities.clear_cache!
7
+
7
8
  clear_wsdl_cache
8
9
 
9
10
  attributes.clear
@@ -55,11 +56,11 @@ module NetSuite
55
56
  end
56
57
 
57
58
  def cached_wsdl
58
- cached = wsdl_cache.fetch([api_version, wsdl], nil)
59
+ cached = wsdl_cache.fetch(wsdl, nil)
59
60
  if cached.is_a? String
60
61
  cached
61
62
  elsif cached.is_a? Savon::Client
62
- wsdl_cache[[api_version, wsdl]] = cached.instance_eval { @wsdl.xml }
63
+ wsdl_cache[wsdl] = cached.instance_eval { @wsdl.xml }
63
64
  end
64
65
  end
65
66
 
@@ -72,7 +73,7 @@ module NetSuite
72
73
  # For reference, see:
73
74
  # https://github.com/savonrb/savon/blob/d64925d3add33fa5531577ce9e3a28a7a93618b1/lib/savon/client.rb#L35-L37
74
75
  # https://github.com/savonrb/savon/blob/d64925d3add33fa5531577ce9e3a28a7a93618b1/lib/savon/operation.rb#L22
75
- wsdl_cache[[api_version, wsdl]] ||= client
76
+ wsdl_cache[wsdl] ||= client
76
77
  end
77
78
 
78
79
  def api_version(version = nil)
@@ -84,16 +85,26 @@ module NetSuite
84
85
  end
85
86
 
86
87
  def api_version=(version)
88
+ if attributes[:api_version] != version
89
+ attributes[:wsdl] = nil
90
+ attributes[:wsdl_domain] = nil
91
+ end
92
+
87
93
  attributes[:api_version] = version
88
94
  end
89
95
 
90
96
  def sandbox=(flag)
91
- attributes[:flag] = flag
97
+ if attributes[:sandbox] != flag
98
+ attributes[:wsdl] = nil
99
+ attributes[:wsdl_domain] = nil
100
+ end
101
+
102
+ attributes[:sandbox] = flag
92
103
  end
93
104
 
94
105
  def sandbox(flag = nil)
95
106
  if flag.nil?
96
- attributes[:flag] ||= false
107
+ attributes[:sandbox] ||= false
97
108
  else
98
109
  self.sandbox = flag
99
110
  end
@@ -135,6 +146,11 @@ module NetSuite
135
146
  end
136
147
 
137
148
  def wsdl_domain=(wsdl_domain)
149
+ if attributes[:wsdl_domain] != wsdl_domain
150
+ # reset full wsdl url to ensure it's regenerated with the updated `wsdl_domain` next time it's needed
151
+ attributes[:wsdl] = nil
152
+ end
153
+
138
154
  attributes[:wsdl_domain] = wsdl_domain
139
155
  end
140
156
 
@@ -2,8 +2,8 @@ class String
2
2
  def lower_camelcase
3
3
  str = dup
4
4
  str.gsub!(/\/(.?)/) { "::#{$1.upcase}" }
5
- str.gsub!(/(?:_+|-+)([a-z])/) { $1.upcase }
5
+ str.gsub!(/(?:_+|-+)([a-z]|[0-9])/) { $1.upcase }
6
6
  str.gsub!(/(\A|\s)([A-Z])/) { $1 + $2.downcase }
7
7
  str
8
8
  end
9
- end
9
+ end
@@ -96,12 +96,17 @@ module NetSuite
96
96
  end
97
97
 
98
98
  def extract_custom_field(custom_field_data)
99
- # TODO this seems brittle, but might sufficient, watch out for this if something breaks
100
- if (custom_field_data[:"@xsi:type"] || custom_field_data[:type]) == "platformCore:SelectCustomFieldRef"
101
- custom_field_data[:value] = CustomRecordRef.new(custom_field_data.delete(:value))
102
- end
99
+ if custom_field_data.kind_of?(CustomField)
100
+ custom_fields << custom_field_data
101
+ else
102
+ attrs = custom_field_data.clone
103
103
 
104
- custom_fields << CustomField.new(custom_field_data)
104
+ if (custom_field_data[:"@xsi:type"] || custom_field_data[:type]) == "platformCore:SelectCustomFieldRef"
105
+ attrs[:value] = CustomRecordRef.new(custom_field_data[:value])
106
+ end
107
+
108
+ custom_fields << CustomField.new(attrs)
109
+ end
105
110
  end
106
111
 
107
112
  def create_custom_field(reference_id, field_value)
@@ -13,7 +13,7 @@ module NetSuite
13
13
  def initialize(attributes_or_record = {})
14
14
  case attributes_or_record
15
15
  when Hash
16
- attributes = attributes_or_record
16
+ attributes = attributes_or_record.clone
17
17
  attributes.delete(:"@xmlns:platform_core")
18
18
  @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
19
19
  @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
@@ -39,7 +39,7 @@ module NetSuite
39
39
  :consol_overdue_balance, :unbilled_orders, :consol_unbilled_orders
40
40
 
41
41
  record_refs :access_role, :custom_form, :currency, :entity_status, :partner, :category, :lead_source,
42
- :price_level,:sales_rep, :subsidiary, :terms, :parent, :territory, :tax_item, :shipping_item, :receivables_account
42
+ :price_level, :sales_rep, :subsidiary, :terms, :parent, :territory, :tax_item, :shipping_item, :receivables_account
43
43
 
44
44
  attr_reader :internal_id
45
45
  attr_accessor :external_id
@@ -0,0 +1,30 @@
1
+ module NetSuite
2
+ module Records
3
+ class InventoryAdjustment
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::TranInvt
9
+
10
+ actions :get, :add, :delete, :search, :update, :upsert, :upsert_list
11
+
12
+ fields :created_date, :estimated_total_value, :last_modified_date, :tran_date, :tran_id, :memo
13
+
14
+ field :inventory_list, InventoryAdjustmentInventoryList
15
+ field :custom_field_list, CustomFieldList
16
+
17
+ record_refs :account, :adj_location, :customer, :posting_period, :location, :department,
18
+ :subsidiary, :custom_form
19
+
20
+ attr_reader :internal_id
21
+ attr_accessor :external_id
22
+
23
+ def initialize(attributes = {})
24
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
25
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
26
+ initialize_from_attributes_hash(attributes)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ module NetSuite
2
+ module Records
3
+ class InventoryAdjustmentInventory
4
+ include Support::Records
5
+ include Support::Fields
6
+ include Support::RecordRefs
7
+ include Namespaces::TranInvt
8
+
9
+ fields :adjust_qty_by, :description, :bin_numbers, :line,
10
+ :quantity_on_hand, :serial_numbers, :location
11
+
12
+ field :inventory_detail, InventoryDetail
13
+
14
+ record_refs :item, :units
15
+
16
+ def initialize(attributes = {})
17
+ initialize_from_attributes_hash(attributes)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ module NetSuite
2
+ module Records
3
+ class InventoryAdjustmentInventoryList < Support::Sublist
4
+ include Namespaces::TranInvt
5
+
6
+ sublist :inventory, InventoryAdjustmentInventory
7
+
8
+ end
9
+ end
10
+ end
@@ -12,7 +12,7 @@ module NetSuite
12
12
  fields :created_date, :last_modified_date, :tran_date, :tran_id, :memo
13
13
 
14
14
  field :inventory_list, InventoryTransferInventoryList
15
-
15
+
16
16
  record_refs :posting_period, :location, :transfer_location, :department,
17
17
  :subsidiary
18
18
 
@@ -13,7 +13,12 @@ module NetSuite
13
13
  record_refs :tax_schedule, :item, :effective_revision,
14
14
  :obsolete_revision
15
15
 
16
+ attr_reader :internal_id
17
+ attr_accessor :external_id
18
+
16
19
  def initialize(attributes = {})
20
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
21
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
17
22
  initialize_from_attributes_hash(attributes)
18
23
  end
19
24
  end
@@ -1,7 +1,6 @@
1
1
  module NetSuite
2
2
  module Records
3
3
  class MemberList < Support::Sublist
4
- include Support::Records
5
4
  include Namespaces::ListAcct
6
5
 
7
6
  fields :replace_all
@@ -0,0 +1,30 @@
1
+ module NetSuite
2
+ module Records
3
+ class VendorReturnAuthorization
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::TranPurch
9
+
10
+ actions :get, :get_list, :add, :initialize, :delete, :update, :upsert, :search
11
+
12
+ fields :billing_address, :created_date, :memo, :tran_date, :tran_id
13
+
14
+ record_refs :bill_address_list, :department, :entity, :location
15
+
16
+ field :custom_field_list, CustomFieldList
17
+ field :item_list, VendorReturnAuthorizationItemList
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
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ module NetSuite
2
+ module Records
3
+ class VendorReturnAuthorizationItem
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Namespaces::TranPurch
8
+
9
+ fields :amortization_end_date, :amortization_residual, :amount, :bin_numbers, :description,
10
+ :gross_amt, :is_billable, :is_closed, :is_drop_shipment, :line, :order_line, :quantity,
11
+ :rate, :vendor_name
12
+
13
+ field :inventory_detail, InventoryDetail
14
+
15
+ record_refs :item, :location, :tax_code, :units, :customer
16
+
17
+ def initialize(attributes = {})
18
+ initialize_from_attributes_hash(attributes)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module NetSuite
2
+ module Records
3
+ class VendorReturnAuthorizationItemList < Support::Sublist
4
+ include Namespaces::TranPurch
5
+
6
+ sublist :item, VendorReturnAuthorizationItem
7
+
8
+ alias :items :item
9
+
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.7.8'
2
+ VERSION = '0.7.9'
3
3
  end
@@ -107,51 +107,61 @@ describe NetSuite::Actions::Search do
107
107
  }
108
108
  }
109
109
  }
110
- }
110
+ },
111
+ "listRel:columns" => [
112
+ {"tranSales:basic"=>{"platformCommon:internalId/"=>{}}}
113
+ ],
111
114
  }
112
115
  },
113
116
  }).returns(File.read('spec/support/fixtures/search/saved_search_joined_custom_customer.xml'))
114
117
 
115
118
  search = NetSuite::Records::Customer.search({
116
- saved: 500,
117
- basic: [
118
- {
119
- field: 'entityId',
120
- value: 'New Keywords',
121
- operator: 'hasKeywords'
122
- },
123
- {
124
- field: 'stage',
125
- operator: 'anyOf',
126
- type: 'SearchMultiSelectCustomField',
127
- value: [
128
- '_lead',
129
- '_customer'
130
- ]
131
- },
132
- {
133
- field: 'customFieldList',
134
- value: [
135
- {
136
- field: 'custentity_customerandcontacttypelist',
137
- operator: 'anyOf',
138
- # type is needed for multiselect fields
139
- type: 'SearchMultiSelectCustomField',
140
- value: [
141
- NetSuite::Records::CustomRecordRef.new(:internal_id => 4),
142
- NetSuite::Records::CustomRecordRef.new(:internal_id => 11),
143
- ]
144
- },
145
- {
146
- field: 'custentity_relatedthing',
147
- # is in the GUI is the equivilent of anyOf with a single element array
148
- operator: 'anyOf',
149
- type: 'SearchMultiSelectCustomField',
150
- value: [
151
- NetSuite::Records::Customer.new(:internal_id => 88825)
152
- ]
153
- }
154
- ]
119
+ criteria: {
120
+ saved: 500,
121
+ basic: [
122
+ {
123
+ field: 'entityId',
124
+ value: 'New Keywords',
125
+ operator: 'hasKeywords'
126
+ },
127
+ {
128
+ field: 'stage',
129
+ operator: 'anyOf',
130
+ type: 'SearchMultiSelectCustomField',
131
+ value: [
132
+ '_lead',
133
+ '_customer'
134
+ ]
135
+ },
136
+ {
137
+ field: 'customFieldList',
138
+ value: [
139
+ {
140
+ field: 'custentity_customerandcontacttypelist',
141
+ operator: 'anyOf',
142
+ # type is needed for multiselect fields
143
+ type: 'SearchMultiSelectCustomField',
144
+ value: [
145
+ NetSuite::Records::CustomRecordRef.new(:internal_id => 4),
146
+ NetSuite::Records::CustomRecordRef.new(:internal_id => 11),
147
+ ]
148
+ },
149
+ {
150
+ field: 'custentity_relatedthing',
151
+ # is in the GUI is the equivilent of anyOf with a single element array
152
+ operator: 'anyOf',
153
+ type: 'SearchMultiSelectCustomField',
154
+ value: [
155
+ NetSuite::Records::Customer.new(:internal_id => 88825)
156
+ ]
157
+ }
158
+ ]
159
+ }
160
+ ]
161
+ },
162
+ columns: [
163
+ 'tranSales:basic' => {
164
+ 'platformCommon:internalId/' => {},
155
165
  }
156
166
  ]
157
167
  })
@@ -47,7 +47,7 @@ describe NetSuite::Configuration do
47
47
  conn = config.connection
48
48
 
49
49
  expect(
50
- config.wsdl_cache.fetch([config.api_version, config.wsdl])
50
+ config.wsdl_cache.fetch(config.wsdl)
51
51
  ).to eq(conn)
52
52
  end
53
53
 
@@ -99,13 +99,13 @@ describe NetSuite::Configuration do
99
99
  expect(config.wsdl_cache).to be_empty
100
100
  config.cache_wsdl("whatevs")
101
101
  expect(config.wsdl_cache).to eq(
102
- {[config.api_version, config.wsdl] => "whatevs"}
102
+ {config.wsdl => "whatevs"}
103
103
  )
104
104
  end
105
105
 
106
106
  it 'doesnt write over old values' do
107
107
  config.class_exec(config.api_version, config.wsdl) do |api, wsdl|
108
- wsdl_cache[[api, wsdl]] = "old value"
108
+ wsdl_cache[wsdl] = "old value"
109
109
  end
110
110
  config.cache_wsdl("new value")
111
111
 
@@ -116,13 +116,13 @@ describe NetSuite::Configuration do
116
116
  config.class_eval { @wsdl_cache = nil }
117
117
  config.cache_wsdl("whatevs")
118
118
  expect(config.wsdl_cache).to eq(
119
- {[config.api_version, config.wsdl] => "whatevs"}
119
+ {config.wsdl => "whatevs"}
120
120
  )
121
121
  end
122
122
 
123
123
  it 'can cache multiple values' do
124
124
  config.class_exec("2020_2", "fake wsdl") do |api, wsdl|
125
- wsdl_cache[[api, wsdl]] = "old value"
125
+ wsdl_cache[wsdl] = "old value"
126
126
  end
127
127
  expect(config.wsdl_cache.keys.count).to eq 1
128
128
  config.cache_wsdl("new value")
@@ -134,7 +134,7 @@ describe NetSuite::Configuration do
134
134
  context '#cached_wsdl' do
135
135
  it 'returns wsdl (xml)' do
136
136
  config.class_exec(config.api_version, config.wsdl) do |api, wsdl|
137
- wsdl_cache[[api, wsdl]] = "xml wsdl string"
137
+ wsdl_cache[wsdl] = "xml wsdl string"
138
138
  end
139
139
  expect( config.cached_wsdl ).to eq "xml wsdl string"
140
140
  end
@@ -146,7 +146,7 @@ describe NetSuite::Configuration do
146
146
  wsdl_dbl = double(:wsdl, xml: "xml wsdl")
147
147
  client.instance_exec(wsdl_dbl) {|wsdl| @wsdl = wsdl }
148
148
  config.class_exec(config.api_version, config.wsdl, client) do |api, wsdl, c|
149
- wsdl_cache[[api, wsdl]] = c
149
+ wsdl_cache[wsdl] = c
150
150
  end
151
151
 
152
152
  expect( config.wsdl_cache.values.first ).to eq client
@@ -314,8 +314,12 @@ describe NetSuite::Configuration do
314
314
  describe '#api_version=' do
315
315
  context 'when api version is defined' do
316
316
  it 'sets the api_version of the application' do
317
- config.api_version = '2012_1'
318
- expect(config.api_version).to eq('2012_1')
317
+ # retrieve wsdl to ensure setting the api works when the wsdl is cached
318
+ config.wsdl
319
+ config.api_version = '1980_1'
320
+
321
+ expect(config.api_version).to eq('1980_1')
322
+ expect(config.wsdl).to include('1980_1')
319
323
  end
320
324
  end
321
325
  end
@@ -343,13 +347,16 @@ describe NetSuite::Configuration do
343
347
  end
344
348
 
345
349
  it '#wsdl_domain' do
350
+ # NOTE wsdl is tested since it uses wsdl_domain
346
351
  expect(config.wsdl_domain).to eq('webservices.netsuite.com')
347
352
 
348
- config.wsdl_domain = 'custom.domain.com'
353
+ config.wsdl_domain('custom.domain.com')
349
354
  expect(config.wsdl_domain).to eq('custom.domain.com')
355
+ expect(config.wsdl).to include('custom.domain.com')
350
356
 
351
357
  config.sandbox = true
352
358
  expect(config.wsdl_domain).to eq('webservices.sandbox.netsuite.com')
359
+ expect(config.wsdl).to include('webservices.sandbox.netsuite.com')
353
360
  end
354
361
 
355
362
  describe '#logger=' do
@@ -45,6 +45,8 @@ describe 'basic records' do
45
45
  NetSuite::Records::ReturnAuthorization,
46
46
  NetSuite::Records::SerializedInventoryItem,
47
47
  NetSuite::Records::DepositApplication,
48
+ NetSuite::Records::InventoryAdjustment,
49
+ NetSuite::Records::VendorReturnAuthorization
48
50
  ]
49
51
  }
50
52
 
@@ -6,6 +6,42 @@ describe NetSuite::Records::CustomFieldList do
6
6
  it 'has a custom_fields attribute' do
7
7
  expect(list.custom_fields).to be_kind_of(Array)
8
8
  end
9
+
10
+ it 'accepts a collection of CustomField records' do
11
+ field = NetSuite::Records::CustomField.new({:value=>{:internal_id=>"5", :type_id=>"103"},
12
+ :script_id=>"custitem_item_category", :"@xsi:type"=>"platformCore:SelectCustomFieldRef"})
13
+ list = described_class.new(custom_field: [field])
14
+ expect(list.custom_fields).to eq([field])
15
+ end
16
+
17
+ context 'initializing with custom field attributes without a type' do
18
+ it 'does not mutate the attributes' do
19
+ field = {:value=>{:internal_id=>"5", :type_id=>"103"},
20
+ :script_id=>"custitem_item_category"}
21
+ described_class.new(custom_field: [field])
22
+ expect(field).to eq({:value=>{:internal_id=>"5", :type_id=>"103"},
23
+ :script_id=>"custitem_item_category"})
24
+ end
25
+ end
26
+
27
+ context 'initializing with custom field attributes and a type' do
28
+ it 'does not mutate the attributes' do
29
+ field = {:value=>{:internal_id=>"5", :type_id=>"103"},
30
+ :script_id=>"custitem_item_category", :"@xsi:type"=>"platformCore:SelectCustomFieldRef"}
31
+ described_class.new(custom_field: [field])
32
+ expect(field).to eq({:value=>{:internal_id=>"5", :type_id=>"103"},
33
+ :script_id=>"custitem_item_category", :"@xsi:type"=>"platformCore:SelectCustomFieldRef"})
34
+ end
35
+ end
36
+
37
+ context 'writing convience methods' do
38
+ it "should create a custom field entry when none exists" do
39
+ list.custrecord_somefield = 'a value'
40
+ list.custom_fields.size.should == 1
41
+ list.custom_fields.first.value.should == 'a value'
42
+ list.custom_fields.first.type.should == 'platformCore:StringCustomFieldRef'
43
+ end
44
+ end
9
45
 
10
46
  context 'custom field internalId-to-scriptId transition at WSDL 2013_2:' do
11
47
  before(:context) { @reset = NetSuite::Configuration.api_version }
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netsuite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
5
- prerelease:
4
+ version: 0.7.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ryan Moran
@@ -10,38 +9,34 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2017-02-15 00:00:00.000000000 Z
12
+ date: 2017-03-21 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: savon
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - ">="
21
19
  - !ruby/object:Gem::Version
22
20
  version: 2.3.0
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - ">="
29
26
  - !ruby/object:Gem::Version
30
27
  version: 2.3.0
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rspec
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ~>
32
+ - - "~>"
37
33
  - !ruby/object:Gem::Version
38
34
  version: 3.1.0
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ~>
39
+ - - "~>"
45
40
  - !ruby/object:Gem::Version
46
41
  version: 3.1.0
47
42
  description: NetSuite SuiteTalk API Wrapper
@@ -52,9 +47,9 @@ executables: []
52
47
  extensions: []
53
48
  extra_rdoc_files: []
54
49
  files:
55
- - .gitignore
56
- - .rspec
57
- - .ruby-version
50
+ - ".gitignore"
51
+ - ".rspec"
52
+ - ".ruby-version"
58
53
  - Gemfile
59
54
  - LICENSE
60
55
  - README.md
@@ -176,6 +171,9 @@ files:
176
171
  - lib/netsuite/records/gift_cert_redemption_list.rb
177
172
  - lib/netsuite/records/gift_certificate.rb
178
173
  - lib/netsuite/records/gift_certificate_item.rb
174
+ - lib/netsuite/records/inventory_adjustment.rb
175
+ - lib/netsuite/records/inventory_adjustment_inventory.rb
176
+ - lib/netsuite/records/inventory_adjustment_inventory_list.rb
179
177
  - lib/netsuite/records/inventory_assignment.rb
180
178
  - lib/netsuite/records/inventory_assignment_list.rb
181
179
  - lib/netsuite/records/inventory_detail.rb
@@ -277,6 +275,9 @@ files:
277
275
  - lib/netsuite/records/vendor_payment.rb
278
276
  - lib/netsuite/records/vendor_payment_apply.rb
279
277
  - lib/netsuite/records/vendor_payment_apply_list.rb
278
+ - lib/netsuite/records/vendor_return_authorization.rb
279
+ - lib/netsuite/records/vendor_return_authorization_item.rb
280
+ - lib/netsuite/records/vendor_return_authorization_item_list.rb
280
281
  - lib/netsuite/records/work_order.rb
281
282
  - lib/netsuite/records/work_order_item.rb
282
283
  - lib/netsuite/records/work_order_item_list.rb
@@ -466,27 +467,26 @@ files:
466
467
  - spec/support/savon.rb
467
468
  homepage: https://github.com/NetSweet/netsuite
468
469
  licenses: []
470
+ metadata: {}
469
471
  post_install_message:
470
472
  rdoc_options: []
471
473
  require_paths:
472
474
  - lib
473
475
  required_ruby_version: !ruby/object:Gem::Requirement
474
- none: false
475
476
  requirements:
476
- - - ! '>='
477
+ - - ">="
477
478
  - !ruby/object:Gem::Version
478
479
  version: '0'
479
480
  required_rubygems_version: !ruby/object:Gem::Requirement
480
- none: false
481
481
  requirements:
482
- - - ! '>='
482
+ - - ">="
483
483
  - !ruby/object:Gem::Version
484
484
  version: '0'
485
485
  requirements: []
486
486
  rubyforge_project:
487
- rubygems_version: 1.8.23.2
487
+ rubygems_version: 2.5.1
488
488
  signing_key:
489
- specification_version: 3
489
+ specification_version: 4
490
490
  summary: NetSuite SuiteTalk API (SOAP) Wrapper
491
491
  test_files:
492
492
  - spec/netsuite/actions/add_spec.rb