netsuite 0.0.23 → 0.0.25

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.
Files changed (32) hide show
  1. data/Rakefile +1 -2
  2. data/lib/netsuite.rb +35 -25
  3. data/lib/netsuite/records/account.rb +3 -9
  4. data/lib/netsuite/records/classification.rb +3 -9
  5. data/lib/netsuite/records/credit_memo.rb +3 -23
  6. data/lib/netsuite/records/custom_record.rb +5 -11
  7. data/lib/netsuite/records/custom_record_type.rb +3 -9
  8. data/lib/netsuite/records/customer.rb +3 -14
  9. data/lib/netsuite/records/customer_payment.rb +10 -25
  10. data/lib/netsuite/records/customer_refund.rb +31 -0
  11. data/lib/netsuite/records/customer_refund_apply.rb +16 -0
  12. data/lib/netsuite/records/customer_refund_apply_list.rb +27 -0
  13. data/lib/netsuite/records/customer_refund_deposit.rb +16 -0
  14. data/lib/netsuite/records/customer_refund_deposit_list.rb +28 -0
  15. data/lib/netsuite/records/inventory_item.rb +3 -14
  16. data/lib/netsuite/records/invoice.rb +3 -23
  17. data/lib/netsuite/records/job.rb +3 -14
  18. data/lib/netsuite/records/journal_entry.rb +3 -14
  19. data/lib/netsuite/records/location.rb +3 -9
  20. data/lib/netsuite/records/non_inventory_sale_item.rb +3 -9
  21. data/lib/netsuite/records/payment_method.rb +3 -9
  22. data/lib/netsuite/support/actions.rb +80 -0
  23. data/lib/netsuite/version.rb +1 -1
  24. data/lib/netsuite/xml_logger.rb +31 -0
  25. data/netsuite.gemspec +1 -0
  26. data/spec/netsuite/records/customer_refund_apply_list_spec.rb +27 -0
  27. data/spec/netsuite/records/customer_refund_apply_spec.rb +14 -0
  28. data/spec/netsuite/records/customer_refund_deposit_list_spec.rb +27 -0
  29. data/spec/netsuite/records/customer_refund_deposit_spec.rb +14 -0
  30. data/spec/netsuite/records/customer_refund_spec.rb +172 -0
  31. data/spec/netsuite/support/actions_spec.rb +5 -0
  32. metadata +43 -10
data/Rakefile CHANGED
@@ -12,7 +12,6 @@ end
12
12
 
13
13
  desc 'Generate code coverage'
14
14
  RSpec::Core::RakeTask.new(:coverage) do |t|
15
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
16
15
  t.rcov = true
17
- t.rcov_opts = ['--exclude', 'spec']
16
+ t.rcov_opts = ['--exclude', '/gems/,spec']
18
17
  end
@@ -2,6 +2,7 @@ require 'set'
2
2
 
3
3
  require 'netsuite/version'
4
4
  require 'netsuite/errors'
5
+ require 'netsuite/xml_logger'
5
6
 
6
7
  module NetSuite
7
8
  autoload :Configuration, 'netsuite/configuration'
@@ -19,6 +20,7 @@ module NetSuite
19
20
  end
20
21
 
21
22
  module Support
23
+ autoload :Actions, 'netsuite/support/actions'
22
24
  autoload :Attributes, 'netsuite/support/attributes'
23
25
  autoload :Fields, 'netsuite/support/fields'
24
26
  autoload :RecordRefs, 'netsuite/support/record_refs'
@@ -34,37 +36,45 @@ module NetSuite
34
36
  end
35
37
 
36
38
  module Records
37
- autoload :Account, 'netsuite/records/account'
38
- autoload :BillAddress, 'netsuite/records/bill_address'
39
- autoload :Classification, 'netsuite/records/classification'
40
- autoload :CreditMemo, 'netsuite/records/credit_memo'
41
- autoload :CustomField, 'netsuite/records/custom_field'
42
- autoload :CustomFieldList, 'netsuite/records/custom_field_list'
43
- autoload :CustomRecord, 'netsuite/records/custom_record'
44
- autoload :CustomRecordRef, 'netsuite/records/custom_record_ref'
45
- autoload :CustomRecordType, 'netsuite/records/custom_record_type'
46
- autoload :Customer, 'netsuite/records/customer'
47
- autoload :CustomerAddressbook, 'netsuite/records/customer_addressbook'
48
- autoload :CustomerAddressbookList, 'netsuite/records/customer_addressbook_list'
49
- autoload :CustomerPayment, 'netsuite/records/customer_payment'
50
- autoload :Duration, 'netsuite/records/duration'
51
- autoload :InventoryItem, 'netsuite/records/inventory_item'
52
- autoload :Invoice, 'netsuite/records/invoice'
53
- autoload :InvoiceItem, 'netsuite/records/invoice_item'
54
- autoload :InvoiceItemList, 'netsuite/records/invoice_item_list'
55
- autoload :Job, 'netsuite/records/job'
56
- autoload :JournalEntry, 'netsuite/records/journal_entry'
57
- autoload :JournalEntryLine, 'netsuite/records/journal_entry_line'
58
- autoload :JournalEntryLineList, 'netsuite/records/journal_entry_line_list'
59
- autoload :Location, 'netsuite/records/location'
60
- autoload :NonInventorySaleItem, 'netsuite/records/non_inventory_sale_item'
61
- autoload :PaymentMethod, 'netsuite/records/payment_method'
39
+ autoload :Account, 'netsuite/records/account'
40
+ autoload :BillAddress, 'netsuite/records/bill_address'
41
+ autoload :Classification, 'netsuite/records/classification'
42
+ autoload :CreditMemo, 'netsuite/records/credit_memo'
43
+ autoload :CustomField, 'netsuite/records/custom_field'
44
+ autoload :CustomFieldList, 'netsuite/records/custom_field_list'
45
+ autoload :CustomRecord, 'netsuite/records/custom_record'
46
+ autoload :CustomRecordRef, 'netsuite/records/custom_record_ref'
47
+ autoload :CustomRecordType, 'netsuite/records/custom_record_type'
48
+ autoload :Customer, 'netsuite/records/customer'
49
+ autoload :CustomerAddressbook, 'netsuite/records/customer_addressbook'
50
+ autoload :CustomerAddressbookList, 'netsuite/records/customer_addressbook_list'
51
+ autoload :CustomerPayment, 'netsuite/records/customer_payment'
52
+ autoload :CustomerRefund, 'netsuite/records/customer_refund'
53
+ autoload :CustomerRefundApply, 'netsuite/records/customer_refund_apply'
54
+ autoload :CustomerRefundApplyList, 'netsuite/records/customer_refund_apply_list'
55
+ autoload :CustomerRefundDeposit, 'netsuite/records/customer_refund_deposit'
56
+ autoload :CustomerRefundDepositList, 'netsuite/records/customer_refund_deposit_list'
57
+ autoload :Duration, 'netsuite/records/duration'
58
+ autoload :InventoryItem, 'netsuite/records/inventory_item'
59
+ autoload :Invoice, 'netsuite/records/invoice'
60
+ autoload :InvoiceItem, 'netsuite/records/invoice_item'
61
+ autoload :InvoiceItemList, 'netsuite/records/invoice_item_list'
62
+ autoload :Job, 'netsuite/records/job'
63
+ autoload :JournalEntry, 'netsuite/records/journal_entry'
64
+ autoload :JournalEntryLine, 'netsuite/records/journal_entry_line'
65
+ autoload :JournalEntryLineList, 'netsuite/records/journal_entry_line_list'
66
+ autoload :Location, 'netsuite/records/location'
67
+ autoload :NonInventorySaleItem, 'netsuite/records/non_inventory_sale_item'
68
+ autoload :PaymentMethod, 'netsuite/records/payment_method'
62
69
  autoload :RecordRef, 'netsuite/records/record_ref'
63
70
  autoload :ShipAddress, 'netsuite/records/ship_address'
64
71
  end
65
72
 
66
73
  def self.configure(&block)
67
74
  NetSuite::Configuration.instance_eval(&block)
75
+ Savon.configure do |config|
76
+ config.logger = NetSuite::XmlLogger.new(STDOUT)
77
+ end
68
78
  end
69
79
 
70
80
  end
@@ -3,6 +3,9 @@ module NetSuite
3
3
  class Account
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
+ include Support::Actions
7
+
8
+ actions :get
6
9
 
7
10
  fields :acct_name, :acct_number, :acct_type, :cash_flow_rate, :cur_doc_num, :description, :eliminate, :exchange_rate,
8
11
  :general_rate, :include_children, :inventory, :is_inactive, :opening_balance, :revalue, :tran_date
@@ -18,15 +21,6 @@ module NetSuite
18
21
  initialize_from_attributes_hash(attributes)
19
22
  end
20
23
 
21
- def self.get(options = {})
22
- response = Actions::Get.call(self, options)
23
- if response.success?
24
- new(response.body)
25
- else
26
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
27
- end
28
- end
29
-
30
24
  end
31
25
  end
32
26
  end
@@ -2,6 +2,9 @@ module NetSuite
2
2
  module Records
3
3
  class Classification
4
4
  include Support::Fields
5
+ include Support::Actions
6
+
7
+ actions :get
5
8
 
6
9
  fields :name, :include_children, :is_inactive, :class_translation_list, :subsidiary_list, :custom_field_list
7
10
 
@@ -14,15 +17,6 @@ module NetSuite
14
17
  initialize_from_attributes_hash(attributes)
15
18
  end
16
19
 
17
- def self.get(options = {})
18
- response = Actions::Get.call(self, options)
19
- if response.success?
20
- new(response.body)
21
- else
22
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
23
- end
24
- end
25
-
26
20
  end
27
21
  end
28
22
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::TranCust
8
9
 
10
+ actions :get, :add, :initialize
11
+
9
12
  fields :alt_handling_cost, :alt_shipping_cost, :amount_paid, :amount_remaining, :auto_apply, :balance,
10
13
  :bill_address, :contrib_pct, :created_date, :currency_name, :deferred_revenue, :discount_rate, :email,
11
14
  :est_gross_profit, :est_gross_profit_percent, :exchange_rate, :exclude_commission, :fax, :gift_cert_applied,
@@ -31,29 +34,6 @@ module NetSuite
31
34
  initialize_from_attributes_hash(attributes)
32
35
  end
33
36
 
34
- def self.get(options = {})
35
- response = Actions::Get.call(self, options)
36
- if response.success?
37
- new(response.body)
38
- else
39
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
40
- end
41
- end
42
-
43
- def self.initialize(object)
44
- response = Actions::Initialize.call(self, object)
45
- if response.success?
46
- new(response.body)
47
- else
48
- raise InitializationError, "#{self}.initialize with #{object} failed."
49
- end
50
- end
51
-
52
- def add
53
- response = Actions::Add.call(self)
54
- response.success?
55
- end
56
-
57
37
  end
58
38
  end
59
39
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::SetupCustom
8
9
 
10
+ actions :get, :add
11
+
9
12
  fields :allow_attachments, :allow_inline_editing, :allow_numbering_override, :allow_quick_search, :created,
10
13
  :custom_record_id, :description, :disclaimer, :enabl_email_merge, :enable_numbering, :include_name,
11
14
  :is_available_offline, :is_inactive, :is_numbering_updateable, :is_ordered, :last_modified, :name,
@@ -28,17 +31,8 @@ module NetSuite
28
31
 
29
32
  def self.get(options = {})
30
33
  options.merge!(:type_id => type_id) unless options[:type_id]
31
- response = Actions::Get.call(self, options.merge!(:custom => true))
32
- if response.success?
33
- new(response.body)
34
- else
35
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
36
- end
37
- end
38
-
39
- def add
40
- response = Actions::Add.call(self)
41
- response.success?
34
+ options.merge!(:custom => true)
35
+ super(options)
42
36
  end
43
37
 
44
38
  def self.type_id(id = nil)
@@ -3,6 +3,9 @@ module NetSuite
3
3
  class CustomRecordType
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
+ include Support::Actions
7
+
8
+ actions :get
6
9
 
7
10
  fields :allow_attachments, :allow_inline_editing, :allow_numbering_override, :allow_quick_search, :description,
8
11
  :disclaimer, :enable_mail_merge, :enable_numbering, :include_name, :is_available_offline, :is_inactive,
@@ -22,15 +25,6 @@ module NetSuite
22
25
  initialize_from_attributes_hash(attributes)
23
26
  end
24
27
 
25
- def self.get(options = {})
26
- response = Actions::Get.call(self, options)
27
- if response.success?
28
- new(response.body)
29
- else
30
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
31
- end
32
- end
33
-
34
28
  end
35
29
  end
36
30
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::ListRel
8
9
 
10
+ actions :get, :add
11
+
9
12
  fields :access_role, :account_number, :aging, :alt_email, :alt_name, :alt_phone, :bill_pay,
10
13
  :buying_reason, :buying_time_frame, :campaign_category, :category, :click_stream, :comments, :company_name,
11
14
  :consol_aging, :consol_days_overdue, :contact_roles_list, :contrib_pct, :credit_cards_list, :credit_hold_override,
@@ -38,20 +41,6 @@ module NetSuite
38
41
  initialize_from_attributes_hash(attributes)
39
42
  end
40
43
 
41
- def self.get(options = {})
42
- response = Actions::Get.call(self, options)
43
- if response.success?
44
- new(response.body)
45
- else
46
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
47
- end
48
- end
49
-
50
- def add
51
- response = Actions::Add.call(self)
52
- response.success?
53
- end
54
-
55
44
  end
56
45
  end
57
46
  end
@@ -4,9 +4,12 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::TranCust
8
9
 
9
- fields :auth_code, :auto_apply, :balance, :cc_approved, :cc_avs_street_match, :cc_avs_zip_match,
10
+ actions :get, :initialize, :add
11
+
12
+ fields :auth_code, :auto_apply, :cc_approved, :cc_avs_street_match, :cc_avs_zip_match,
10
13
  :cc_expire_date, :cc_name, :cc_number, :cc_security_code, :cc_security_code_match, :cc_street, :cc_zip_code,
11
14
  :charge_it, :check_num, :created_date, :currency_name, :debit_card_issue_no, :exchange_rate, :ignore_avs,
12
15
  :last_modified_date, :memo, :payment, :pending, :pn_ref_num, :status, :three_d_status_code, :tran_date,
@@ -14,38 +17,20 @@ module NetSuite
14
17
 
15
18
  field :custom_field_list, CustomFieldList
16
19
 
17
- read_only_fields :applied, :total, :unapplied
20
+ read_only_fields :applied, :balance, :total, :unapplied
18
21
 
19
22
  record_refs :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass,
20
23
  :location, :payment_method, :posting_period, :subsidiary
21
24
 
25
+ attr_reader :internal_id
26
+ attr_accessor :external_id
27
+
22
28
  def initialize(attributes = {})
29
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
30
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
23
31
  initialize_from_attributes_hash(attributes)
24
32
  end
25
33
 
26
- def self.get(options = {})
27
- response = Actions::Get.call(self, options)
28
- if response.success?
29
- new(response.body)
30
- else
31
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
32
- end
33
- end
34
-
35
- def self.initialize(object)
36
- response = Actions::Initialize.call(self, object)
37
- if response.success?
38
- new(response.body)
39
- else
40
- raise InitializationError, "#{self}.initialize with #{object} failed."
41
- end
42
- end
43
-
44
- def add
45
- response = Actions::Add.call(self)
46
- response.success?
47
- end
48
-
49
34
  end
50
35
  end
51
36
  end
@@ -0,0 +1,31 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerRefund
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::TranCust
9
+
10
+ actions :get, :initialize, :add
11
+
12
+ fields :address, :balance, :cc_approved, :cc_expire_date, :cc_name, :cc_number, :cc_street, :cc_zip_code, :charge_it,
13
+ :created_date, :currency_name, :debit_card_issue_no, :exchange_rate, :last_modified_date, :memo, :pn_ref_num, :status,
14
+ :to_be_printed, :tran_date, :tran_id, :valid_from
15
+
16
+ field :custom_field_list, CustomFieldList
17
+ field :apply_list, CustomerRefundApplyList
18
+ field :deposit_list, CustomerRefundDepositList
19
+
20
+ read_only_fields :total
21
+
22
+ record_refs :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass,
23
+ :location, :payment_method, :posting_period, :subsidiary, :void_journal
24
+
25
+ def initialize(attributes = {})
26
+ initialize_from_attributes_hash(attributes)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerRefundApply
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::TranCust
7
+
8
+ fields :amount, :apply, :apply_date, :currency, :doc, :due, :line, :ref_num, :total, :type
9
+
10
+ def initialize(attributes = {})
11
+ initialize_from_attributes_hash(attributes)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerRefundApplyList
4
+ include Namespaces::TranCust
5
+
6
+ def initialize(attributes = {})
7
+ case attributes[:apply]
8
+ when Hash
9
+ applies << CustomerRefundApply.new(attributes[:apply])
10
+ when Array
11
+ attributes[:apply].each { |apply| applies << CustomerRefundApply.new(apply) }
12
+ end
13
+ end
14
+
15
+ def applies
16
+ @applies ||= []
17
+ end
18
+
19
+ def to_record
20
+ applies.map do |apply|
21
+ { "#{record_namespace}:apply" => apply.to_record }
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerRefundDeposit
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::TranCust
7
+
8
+ fields :amount, :apply, :currency, :deposit_date, :doc, :line, :ref_num, :remaining, :total
9
+
10
+ def initialize(attributes = {})
11
+ initialize_from_attributes_hash(attributes)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerRefundDepositList
4
+ include Support::Records
5
+ include Namespaces::TranCust
6
+
7
+ def initialize(attributes = {})
8
+ case attributes[:customer_refund_deposit]
9
+ when Hash
10
+ deposits << CustomerRefundDeposit.new(attributes[:customer_refund_deposit])
11
+ when Array
12
+ attributes[:customer_refund_deposit].each { |deposit| deposits << CustomerRefundDeposit.new(deposit) }
13
+ end
14
+ end
15
+
16
+ def deposits
17
+ @deposits ||= []
18
+ end
19
+
20
+ def to_record
21
+ deposits.map do |deposit|
22
+ { "#{record_namespace}:customerRefundDeposit" => deposit.to_record }
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::ListAcct
8
9
 
10
+ actions :get, :add
11
+
9
12
  fields :auto_lead_time, :auto_preferred_stock_level, :auto_reorder_point, :available_to_partners, :average_cost,
10
13
  :copy_description, :cost, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :cost_units, :costing_method,
11
14
  :costing_method_display, :country_of_manufacture, :created_date, :currency, :date_converted_to_inv,
@@ -46,20 +49,6 @@ module NetSuite
46
49
  initialize_from_attributes_hash(attributes)
47
50
  end
48
51
 
49
- def self.get(options = {})
50
- response = Actions::Get.call(self, options)
51
- if response.success?
52
- new(response.body)
53
- else
54
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
55
- end
56
- end
57
-
58
- def add
59
- response = Actions::Add.call(self)
60
- response.success?
61
- end
62
-
63
52
  end
64
53
  end
65
54
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::TranSales
8
9
 
10
+ actions :get, :initialize, :add
11
+
9
12
  fields :alt_handling_cost, :alt_shipping_cost, :balance, :bill_address,
10
13
  :billing_schedule, :contrib_pct, :created_date, :created_from, :currency_name, :custom_field_list,
11
14
  :deferred_revenue, :department, :discount_amount, :discount_date, :discount_item, :discount_rate,
@@ -45,29 +48,6 @@ module NetSuite
45
48
  initialize_from_attributes_hash(attributes)
46
49
  end
47
50
 
48
- def self.get(options = {})
49
- response = Actions::Get.call(self, options)
50
- if response.success?
51
- new(response.body)
52
- else
53
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
54
- end
55
- end
56
-
57
- def self.initialize(object)
58
- response = Actions::Initialize.call(self, object)
59
- if response.success?
60
- new(response.body)
61
- else
62
- raise InitializationError, "#{self}.initialize with #{object} failed."
63
- end
64
- end
65
-
66
- def add
67
- response = Actions::Add.call(self)
68
- response.success?
69
- end
70
-
71
51
  end
72
52
  end
73
53
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::ListRel
8
9
 
10
+ actions :get, :add
11
+
9
12
  fields :account_number, :allocate_payroll_expenses, :allow_all_resources_for_tasks, :allow_expenses, :allow_time,
10
13
  :alt_name, :alt_phone, :bill_pay, :calculated_end_date, :calculated_end_date_baseline, :comments, :company_name,
11
14
  :date_created, :default_address, :email, :email_preference, :end_date, :entity_id, :estimated_cost,
@@ -32,20 +35,6 @@ module NetSuite
32
35
  initialize_from_attributes_hash(attributes)
33
36
  end
34
37
 
35
- def self.get(options = {})
36
- response = Actions::Get.call(self, options)
37
- if response.success?
38
- new(response.body)
39
- else
40
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
41
- end
42
- end
43
-
44
- def add
45
- response = Actions::Add.call(self)
46
- response.success?
47
- end
48
-
49
38
  end
50
39
  end
51
40
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::TranGeneral
8
9
 
10
+ actions :get, :add
11
+
9
12
  fields :approved, :created_date, :exchange_rate, :last_modified_date, :reversal_date, :reversal_defer, :reversal_entry,
10
13
  :tran_date, :tran_id
11
14
 
@@ -19,20 +22,6 @@ module NetSuite
19
22
  initialize_from_attributes_hash(attributes)
20
23
  end
21
24
 
22
- def self.get(options = {})
23
- response = Actions::Get.call(self, options)
24
- if response.success?
25
- new(response.body)
26
- else
27
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
28
- end
29
- end
30
-
31
- def add
32
- response = Actions::Add.call(self)
33
- response.success?
34
- end
35
-
36
25
  end
37
26
  end
38
27
  end
@@ -3,6 +3,9 @@ module NetSuite
3
3
  class Location
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
+ include Support::Actions
7
+
8
+ actions :get
6
9
 
7
10
  fields :addr1, :addr2, :addr3, :addr_phone, :addr_text, :addressee, :attention, :city, :country, :include_children,
8
11
  :is_inactive, :make_inventory_available, :make_inventory_available_store, :name, :override, :state, :tran_prefix, :zip
@@ -18,15 +21,6 @@ module NetSuite
18
21
  initialize_from_attributes_hash(attributes)
19
22
  end
20
23
 
21
- def self.get(options = {})
22
- response = Actions::Get.call(self, options)
23
- if response.success?
24
- new(response.body)
25
- else
26
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
27
- end
28
- end
29
-
30
24
  end
31
25
  end
32
26
  end
@@ -4,8 +4,11 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Records
7
+ include Support::Actions
7
8
  include Namespaces::ListAcct
8
9
 
10
+ actions :get
11
+
9
12
  fields :available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :country_of_manufacture,
10
13
  :created_date, :custom_field_list, :display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap,
11
14
  :featured_description, :handling_cost, :handling_cost_units, :include_children, :is_donation_item, :is_fulfillable,
@@ -36,15 +39,6 @@ module NetSuite
36
39
  initialize_from_attributes_hash(attributes)
37
40
  end
38
41
 
39
- def self.get(options = {})
40
- response = Actions::Get.call(self, options)
41
- if response.success?
42
- new(response.body)
43
- else
44
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
45
- end
46
- end
47
-
48
42
  end
49
43
  end
50
44
  end
@@ -3,6 +3,9 @@ module NetSuite
3
3
  class PaymentMethod
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
+ include Support::Actions
7
+
8
+ actions :get
6
9
 
7
10
  fields :credit_card, :express_checkout_arrangement, :is_debit_card, :is_inactive, :is_online, :name,
8
11
  :pay_pal_email_address, :undep_funds, :use_express_checkout
@@ -18,15 +21,6 @@ module NetSuite
18
21
  initialize_from_attributes_hash(attributes)
19
22
  end
20
23
 
21
- def self.get(options = {})
22
- response = Actions::Get.call(self, options)
23
- if response.success?
24
- new(response.body)
25
- else
26
- raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
27
- end
28
- end
29
-
30
24
  end
31
25
  end
32
26
  end
@@ -0,0 +1,80 @@
1
+ module NetSuite
2
+ module Support
3
+ module Actions
4
+
5
+ def self.included(base)
6
+ base.send(:extend, ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ def actions(*args)
12
+ instance_module = Module.new
13
+ class_module = Module.new
14
+ args.each do |action|
15
+ define_action(instance_module, class_module, action)
16
+ end
17
+ self.send(:include, instance_module)
18
+ self.send(:extend, class_module)
19
+ end
20
+
21
+ def define_action(instance_module, class_module, action)
22
+ case action
23
+ when :get
24
+ define_get(class_module)
25
+ when :add
26
+ define_add(instance_module)
27
+ when :initialize
28
+ define_initialize(class_module)
29
+ else
30
+ raise "Unknown action: #{action.inspect}"
31
+ end
32
+ end
33
+
34
+ def define_get(class_module)
35
+ class_module.module_eval do
36
+ define_method :get do |*args|
37
+ options, *ignored = *args
38
+ response = NetSuite::Actions::Get.call(self, options)
39
+ if response.success?
40
+ new(response.body)
41
+ else
42
+ raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ def define_add(instance_module)
49
+ instance_module.module_eval do
50
+ define_method :add do
51
+ response = NetSuite::Actions::Add.call(self)
52
+ response.success?
53
+ end
54
+ end
55
+ end
56
+
57
+ def define_initialize(class_module)
58
+ (class << self; self; end).instance_eval do
59
+ define_method :initialize do |*args|
60
+ super(*args)
61
+ end
62
+ end
63
+
64
+ class_module.module_eval do
65
+ define_method :initialize do |object|
66
+ response = NetSuite::Actions::Initialize.call(self, object)
67
+ if response.success?
68
+ new(response.body)
69
+ else
70
+ raise InitializationError, "#{self}.initialize with #{object} failed."
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.0.23'
2
+ VERSION = '0.0.25'
3
3
  end
@@ -0,0 +1,31 @@
1
+ module NetSuite
2
+ require 'logger'
3
+ class XmlLogger < ::Logger
4
+ def format_message(severity, timestamp, progname, msg)
5
+ if msg.match('<?xml') && !(msg.match('SOAPAction'))
6
+ xp(msg)
7
+ else
8
+ "#{msg}\n"
9
+ end
10
+ end
11
+
12
+ def xp(xml_text)
13
+ xsl = <<XSL
14
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
15
+ <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
16
+ <xsl:strip-space elements="*"/>
17
+ <xsl:template match="/">
18
+ <xsl:copy-of select="."/>
19
+ </xsl:template>
20
+ </xsl:stylesheet>
21
+ XSL
22
+
23
+ doc = Nokogiri::XML(xml_text)
24
+ xslt = Nokogiri::XSLT(xsl)
25
+ out = xslt.transform(doc)
26
+
27
+ puts out.to_xml
28
+ end
29
+
30
+ end
31
+ end
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Netsuite::VERSION
17
17
 
18
18
  gem.add_dependency 'savon', '0.9.7'
19
+ gem.add_dependency 'nokogiri'
19
20
 
20
21
  gem.add_development_dependency 'rspec', '2.8.0'
21
22
  gem.add_development_dependency 'autotest-standalone', '4.5.9'
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerRefundApplyList do
4
+ let(:list) { NetSuite::Records::CustomerRefundApplyList.new }
5
+
6
+ it 'has a applies attribute' do
7
+ list.applies.should be_kind_of(Array)
8
+ end
9
+
10
+ describe '#to_record' do
11
+ before do
12
+ list.applies << NetSuite::Records::CustomerRefundApply.new(:amount => 10)
13
+ end
14
+
15
+ it 'can represent itself as a SOAP record' do
16
+ record = [
17
+ {
18
+ 'tranCust:apply' => {
19
+ 'tranCust:amount' => 10
20
+ }
21
+ }
22
+ ]
23
+ list.to_record.should eql(record)
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerRefundApply do
4
+ let(:apply) { NetSuite::Records::CustomerRefundApply.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :amount, :apply, :apply_date, :currency, :doc, :due, :line, :ref_num, :total, :type
9
+ ].each do |field|
10
+ apply.should have_field(field)
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerRefundDepositList do
4
+ let(:list) { NetSuite::Records::CustomerRefundDepositList.new }
5
+
6
+ it 'has a deposits attribute' do
7
+ list.deposits.should be_kind_of(Array)
8
+ end
9
+
10
+ describe '#to_record' do
11
+ before do
12
+ list.deposits << NetSuite::Records::CustomerRefundDeposit.new(:apply => false)
13
+ end
14
+
15
+ it 'can represent itself as a SOAP record' do
16
+ record = [
17
+ {
18
+ 'tranCust:customerRefundDeposit' => {
19
+ 'tranCust:apply' => false
20
+ }
21
+ }
22
+ ]
23
+ list.to_record.should eql(record)
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerRefundDeposit do
4
+ let(:deposit) { NetSuite::Records::CustomerRefundDeposit.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :amount, :apply, :currency, :deposit_date, :doc, :line, :ref_num, :remaining, :total
9
+ ].each do |field|
10
+ deposit.should have_field(field)
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,172 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerRefund do
4
+ let(:refund) { NetSuite::Records::CustomerRefund.new }
5
+ let(:memo) { NetSuite::Records::CreditMemo.new }
6
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
7
+
8
+ # <element name="depositList" type="tranCust:CustomerRefundDepositList" minOccurs="0"/>
9
+
10
+ it 'has all the right fields' do
11
+ [
12
+ :address, :balance, :cc_approved, :cc_expire_date, :cc_name, :cc_number, :cc_street, :cc_zip_code, :charge_it,
13
+ :created_date, :currency_name, :debit_card_issue_no, :exchange_rate, :last_modified_date, :memo, :pn_ref_num, :status,
14
+ :to_be_printed, :total, :tran_date, :tran_id, :valid_from
15
+ ].each do |field|
16
+ refund.should have_field(field)
17
+ end
18
+ end
19
+
20
+ it 'has all the right record refs' do
21
+ [
22
+ :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass, :location,
23
+ :payment_method, :posting_period, :subsidiary, :void_journal
24
+ ].each do |record_ref|
25
+ refund.should have_record_ref(record_ref)
26
+ end
27
+ end
28
+
29
+ describe '#custom_field_list' do
30
+ it 'can be set from attributes' do
31
+ attributes = {
32
+ :custom_field => {
33
+ :amount => 10
34
+ }
35
+ }
36
+ refund.custom_field_list = attributes
37
+ refund.custom_field_list.should be_kind_of(NetSuite::Records::CustomFieldList)
38
+ refund.custom_field_list.custom_fields.length.should eql(1)
39
+ end
40
+
41
+ it 'can be set from a CustomFieldList object' do
42
+ custom_field_list = NetSuite::Records::CustomFieldList.new
43
+ refund.custom_field_list = custom_field_list
44
+ refund.custom_field_list.should eql(custom_field_list)
45
+ end
46
+ end
47
+
48
+ describe '#apply_list' do
49
+ it 'can be set from attributes' do
50
+ attributes = {
51
+ :apply => {
52
+ :amount => 10
53
+ }
54
+ }
55
+ refund.apply_list = attributes
56
+ refund.apply_list.should be_kind_of(NetSuite::Records::CustomerRefundApplyList)
57
+ refund.apply_list.applies.length.should eql(1)
58
+ end
59
+
60
+ it 'can be set from a CustomerRefundApplyList object' do
61
+ apply_list = NetSuite::Records::CustomerRefundApplyList.new
62
+ refund.apply_list = apply_list
63
+ refund.apply_list.should eql(apply_list)
64
+ end
65
+ end
66
+
67
+ describe '#deposit_list' do
68
+ it 'can be set from attributes' do
69
+ attributes = {
70
+ :customer_refund_deposit => {
71
+ :apply => false
72
+ }
73
+ }
74
+ refund.deposit_list = attributes
75
+ refund.deposit_list.should be_kind_of(NetSuite::Records::CustomerRefundDepositList)
76
+ refund.deposit_list.deposits.length.should eql(1)
77
+ end
78
+
79
+ it 'can be set from a CustomerRefundDepositList object' do
80
+ deposit_list = NetSuite::Records::CustomerRefundDepositList.new
81
+ refund.deposit_list = deposit_list
82
+ refund.deposit_list.should eql(deposit_list)
83
+ end
84
+ end
85
+
86
+ describe '.get' do
87
+ context 'when the response is successful' do
88
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :is_person => true }) }
89
+
90
+ it 'returns an CustomerRefund instance populated with the data from the response object' do
91
+ NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::CustomerRefund, :external_id => 10).and_return(response)
92
+ refund = NetSuite::Records::CustomerRefund.get(:external_id => 10)
93
+ refund.should be_kind_of(NetSuite::Records::CustomerRefund)
94
+ end
95
+ end
96
+
97
+ context 'when the response is unsuccessful' do
98
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
99
+
100
+ it 'raises a RecordNotFound exception' do
101
+ NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::CustomerRefund, :external_id => 10).and_return(response)
102
+ lambda {
103
+ NetSuite::Records::CustomerRefund.get(:external_id => 10)
104
+ }.should raise_error(NetSuite::RecordNotFound,
105
+ /NetSuite::Records::CustomerRefund with OPTIONS=(.*) could not be found/)
106
+ end
107
+ end
108
+ end
109
+
110
+ describe '.initialize' do
111
+ context 'when the request is successful' do
112
+ it 'returns an initialized invoice from the customer entity' do
113
+ NetSuite::Actions::Initialize.should_receive(:call).with(NetSuite::Records::CustomerRefund, memo).and_return(response)
114
+ refund = NetSuite::Records::CustomerRefund.initialize(memo)
115
+ refund.should be_kind_of(NetSuite::Records::CustomerRefund)
116
+ end
117
+ end
118
+
119
+ context 'when the response is unsuccessful' do
120
+ pending
121
+ end
122
+ end
123
+
124
+ describe '#add' do
125
+ let(:test_data) { { :memo => 'This is a memo', :balance => 100 } }
126
+
127
+ context 'when the response is successful' do
128
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
129
+
130
+ it 'returns true' do
131
+ refund = NetSuite::Records::CustomerRefund.new(test_data)
132
+ NetSuite::Actions::Add.should_receive(:call).
133
+ with(refund).
134
+ and_return(response)
135
+ refund.add.should be_true
136
+ end
137
+ end
138
+
139
+ context 'when the response is unsuccessful' do
140
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
141
+
142
+ it 'returns false' do
143
+ refund = NetSuite::Records::Invoice.new(test_data)
144
+ NetSuite::Actions::Add.should_receive(:call).
145
+ with(refund).
146
+ and_return(response)
147
+ refund.add.should be_false
148
+ end
149
+ end
150
+ end
151
+
152
+ describe '#to_record' do
153
+ before do
154
+ refund.memo = 'This is a memo'
155
+ refund.balance = 100
156
+ end
157
+ it 'can represent itself as a SOAP record' do
158
+ record = {
159
+ 'tranCust:memo' => 'This is a memo',
160
+ 'tranCust:balance' => 100
161
+ }
162
+ refund.to_record.should eql(record)
163
+ end
164
+ end
165
+
166
+ describe '#record_type' do
167
+ it 'returns a string representation of the SOAP type' do
168
+ refund.record_type.should eql('tranCust:CustomerRefund')
169
+ end
170
+ end
171
+
172
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Support::Actions do
4
+ pending
5
+ 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: 49
4
+ hash: 45
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 23
10
- version: 0.0.23
9
+ - 25
10
+ version: 0.0.25
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-20 00:00:00 Z
18
+ date: 2012-01-23 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: savon
@@ -34,9 +34,23 @@ dependencies:
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: rspec
37
+ name: nokogiri
38
38
  prerelease: false
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
40
54
  none: false
41
55
  requirements:
42
56
  - - "="
@@ -48,11 +62,11 @@ dependencies:
48
62
  - 0
49
63
  version: 2.8.0
50
64
  type: :development
51
- version_requirements: *id002
65
+ version_requirements: *id003
52
66
  - !ruby/object:Gem::Dependency
53
67
  name: autotest-standalone
54
68
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
56
70
  none: false
57
71
  requirements:
58
72
  - - "="
@@ -64,11 +78,11 @@ dependencies:
64
78
  - 9
65
79
  version: 4.5.9
66
80
  type: :development
67
- version_requirements: *id003
81
+ version_requirements: *id004
68
82
  - !ruby/object:Gem::Dependency
69
83
  name: savon_spec
70
84
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
85
+ requirement: &id005 !ruby/object:Gem::Requirement
72
86
  none: false
73
87
  requirements:
74
88
  - - "="
@@ -80,7 +94,7 @@ dependencies:
80
94
  - 6
81
95
  version: 0.1.6
82
96
  type: :development
83
- version_requirements: *id004
97
+ version_requirements: *id005
84
98
  description: NetSuite SuiteTalk API Wrapper
85
99
  email:
86
100
  - ryan.moran@gmail.com
@@ -127,6 +141,11 @@ files:
127
141
  - lib/netsuite/records/customer_addressbook.rb
128
142
  - lib/netsuite/records/customer_addressbook_list.rb
129
143
  - lib/netsuite/records/customer_payment.rb
144
+ - lib/netsuite/records/customer_refund.rb
145
+ - lib/netsuite/records/customer_refund_apply.rb
146
+ - lib/netsuite/records/customer_refund_apply_list.rb
147
+ - lib/netsuite/records/customer_refund_deposit.rb
148
+ - lib/netsuite/records/customer_refund_deposit_list.rb
130
149
  - lib/netsuite/records/duration.rb
131
150
  - lib/netsuite/records/inventory_item.rb
132
151
  - lib/netsuite/records/invoice.rb
@@ -142,12 +161,14 @@ files:
142
161
  - lib/netsuite/records/record_ref.rb
143
162
  - lib/netsuite/records/ship_address.rb
144
163
  - lib/netsuite/response.rb
164
+ - lib/netsuite/support/actions.rb
145
165
  - lib/netsuite/support/attributes.rb
146
166
  - lib/netsuite/support/fields.rb
147
167
  - lib/netsuite/support/record_refs.rb
148
168
  - lib/netsuite/support/records.rb
149
169
  - lib/netsuite/support/requests.rb
150
170
  - lib/netsuite/version.rb
171
+ - lib/netsuite/xml_logger.rb
151
172
  - netsuite.gemspec
152
173
  - spec/netsuite/actions/add_spec.rb
153
174
  - spec/netsuite/actions/get_spec.rb
@@ -166,6 +187,11 @@ files:
166
187
  - spec/netsuite/records/customer_addressbook_list_spec.rb
167
188
  - spec/netsuite/records/customer_addressbook_spec.rb
168
189
  - spec/netsuite/records/customer_payment_spec.rb
190
+ - spec/netsuite/records/customer_refund_apply_list_spec.rb
191
+ - spec/netsuite/records/customer_refund_apply_spec.rb
192
+ - spec/netsuite/records/customer_refund_deposit_list_spec.rb
193
+ - spec/netsuite/records/customer_refund_deposit_spec.rb
194
+ - spec/netsuite/records/customer_refund_spec.rb
169
195
  - spec/netsuite/records/customer_spec.rb
170
196
  - spec/netsuite/records/duration_spec.rb
171
197
  - spec/netsuite/records/inventory_item_spec.rb
@@ -182,6 +208,7 @@ files:
182
208
  - spec/netsuite/records/record_ref_spec.rb
183
209
  - spec/netsuite/records/ship_address_spec.rb
184
210
  - spec/netsuite/response_spec.rb
211
+ - spec/netsuite/support/actions_spec.rb
185
212
  - spec/netsuite/support/attributes_spec.rb
186
213
  - spec/netsuite/support/fields_spec.rb
187
214
  - spec/netsuite/support/record_refs_spec.rb
@@ -253,6 +280,11 @@ test_files:
253
280
  - spec/netsuite/records/customer_addressbook_list_spec.rb
254
281
  - spec/netsuite/records/customer_addressbook_spec.rb
255
282
  - spec/netsuite/records/customer_payment_spec.rb
283
+ - spec/netsuite/records/customer_refund_apply_list_spec.rb
284
+ - spec/netsuite/records/customer_refund_apply_spec.rb
285
+ - spec/netsuite/records/customer_refund_deposit_list_spec.rb
286
+ - spec/netsuite/records/customer_refund_deposit_spec.rb
287
+ - spec/netsuite/records/customer_refund_spec.rb
256
288
  - spec/netsuite/records/customer_spec.rb
257
289
  - spec/netsuite/records/duration_spec.rb
258
290
  - spec/netsuite/records/inventory_item_spec.rb
@@ -269,6 +301,7 @@ test_files:
269
301
  - spec/netsuite/records/record_ref_spec.rb
270
302
  - spec/netsuite/records/ship_address_spec.rb
271
303
  - spec/netsuite/response_spec.rb
304
+ - spec/netsuite/support/actions_spec.rb
272
305
  - spec/netsuite/support/attributes_spec.rb
273
306
  - spec/netsuite/support/fields_spec.rb
274
307
  - spec/netsuite/support/record_refs_spec.rb