netsuite 0.8.6 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c52f30c1f82b68e1ac2e078d81eed79f6c34ec0cc5937dd4251a53cb9a5a5c0
4
- data.tar.gz: 4208277a164ec0b92520cef24b19367538788ecce870cd37f683ddb9fb85143e
3
+ metadata.gz: dbeff776d5c83998c7a1f32ede92f9dc5e23dc9779edb7f468c9069f78d45e2c
4
+ data.tar.gz: ae0a8d348549c9bfbdd069b2430ceb14d4d9934e5f3af32a2b9cfd4841c7a03b
5
5
  SHA512:
6
- metadata.gz: bd8c7a34e1ecced72b398715f17978677bc87021e0bc9581449299f918b51993770d956eb3553775c1631ef16c8e488e6ffe682d9575665d81434106635f7e53
7
- data.tar.gz: f40134f2aaf8824e9b51f9dba00a8a4d9b3b1e935df0d0d07f100018becf8180f6b603f63e52331e65877bbeb135de491fed75a9c5af0928e7409eedbc2f62b4
6
+ metadata.gz: e832952fe6eba8acb9f2126d6bc378a534a7d081c0f0007c995eebb9d4fe6c11e16a4a5ed8cacfb9135f2e4309d74ffa8535cb6e5825606788f9acff7f980e7b
7
+ data.tar.gz: 104588f1bba07662f374d67940ff06fb0cb9b8ffc30cebf402791113d2d8eda023812978025a07dfabd1677108228d6810564c5638fd87cffb1bbc4bb7c04c7b
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.6
1
+ 2.7.3
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 2.7.3
data/Gemfile CHANGED
@@ -9,8 +9,4 @@ gem 'pry-rescue'
9
9
 
10
10
  # optional dependency for more accurate timezone conversion
11
11
  gem 'tzinfo', '1.2.5'
12
- # gem 'tzinfo', '2.0.0'
13
-
14
- # required for CircleCI to build properly with ruby 1.9.3
15
- gem 'json', '~> 2.3.0'
16
- gem 'rack', '~> 2.1.4'
12
+ # gem 'tzinfo', '2.0.0'
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
2
2
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
3
- **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
3
+ **Table of Contents**
4
4
 
5
5
  - [NetSuite SuiteTalk API Ruby Gem](#netsuite-suitetalk-api-ruby-gem)
6
6
  - [Help & Support](#help--support)
@@ -13,7 +13,6 @@
13
13
  - [Custom Records & Fields](#custom-records--fields)
14
14
  - [Searching](#searching)
15
15
  - [Non-standard Operations](#non-standard-operations)
16
- - [About SuiteSync](#about-suitesync)
17
16
 
18
17
  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
19
18
 
@@ -24,24 +23,23 @@
24
23
  # NetSuite SuiteTalk API Ruby Gem
25
24
 
26
25
  * This gem will act as a wrapper around the NetSuite SuiteTalk WebServices API.
27
- * The gem does not cover the entire API, only the subset contributors have used so far.
28
- * NetSuite is a complex system. There's a lot to learn and sparse resources available to learn from. Here's a list of [NetSuite Development Resources](https://github.com/NetSweet/netsuite/wiki/NetSuite-Development-Resources) that might make things a bit less painful.
26
+ * The gem does not cover the entire API, only the subset contributors have used so far. Please submit a PR for any functionality that's missing!
27
+ * NetSuite is a complex system. There's a lot to learn and sparse resources available to learn from. Here's a list of [NetSuite Development Resources](https://github.com/NetSweet/netsuite/wiki/NetSuite-Development-Resources).
29
28
 
30
29
  # Help & Support
31
30
 
32
31
  Join the [slack channel](http://opensuite-slackin.herokuapp.com) for help with any NetSuite issues. Please do not post usage questions as issues in GitHub.
33
32
 
34
- Messages in the Slack ground are [archived here](https://suitechat.slackarchive.io). Search the archives to see if your question has been answered before.
35
-
36
33
  There is some additional helpful resources for NetSuite development [listed here](https://dashboard.suitesync.io/docs/resources#netsuite).
37
34
 
38
35
  # Testing
39
36
 
40
37
  Before contributing a patch make sure all existing tests pass.
41
38
 
42
- ```
39
+ ```shell
43
40
  git clone git://github.com/NetSweet/netsuite.git
44
41
  cd netsuite
42
+
45
43
  bundle
46
44
  bundle exec rspec
47
45
  ```
@@ -56,28 +54,44 @@ gem 'netsuite'
56
54
 
57
55
  If you'd like more accurate time conversion support, include the `tzinfo` gem.
58
56
 
59
- This gem is built for ruby 1.9.x+, checkout the [1-8-stable](https://github.com/NetSweet/netsuite/tree/1-8-stable) branch for ruby 1.8.x support.
57
+ This gem is built for ruby 2.6.x+, but should work on older versions down to 1.9. There's a [1-8-stable](https://github.com/NetSweet/netsuite/tree/1-8-stable) branch for ruby 1.8.x support.
60
58
 
61
59
  ## Configuration
62
60
 
63
61
  The most important thing you'll need is your NetSuite account ID. Not sure how to find your account id? [Here's a guide.](http://mikebian.co/find-netsuite-web-services-account-number/)
64
62
 
65
- For most use-cases, the following configuration will be sufficient:
63
+ How you connect to NetSuite has changed a lot over the years and differs between API versions. For instance:
64
+
65
+ * Older API versions (~2015) allowed authentication via username and password
66
+ * Newever API versions (> 2016) still allowed for username and password authentication, but required an application ID
67
+ * "OAuth", which requires four separate keys to be manually generated, was supported sometime after 2015
68
+ * API versions greater than 2018_2 require `endpoint` to be set directly ([more info](https://github.com/NetSweet/netsuite/pull/473))
69
+
70
+ Here's an example connection configuration. You don't want to actually use username + password config; token based authentication is detailed below in a separate section:
66
71
 
67
72
  ```ruby
68
73
  NetSuite.configure do
69
74
  reset!
70
75
 
76
+ # production & sandbox account numbers will differ
71
77
  account 'TSTDRV1576318'
72
78
  api_version '2018_2'
73
79
 
80
+ # password-based login information
81
+ # in most cases you should use token based authentication instead
74
82
  email 'email@example.com'
75
83
  password 'password'
76
84
  role 10
77
85
 
78
- # use `NetSuite::Utilities.data_center_url('TSTDRV1576318')` to retrieve the URL
86
+ # recent API versions require a account-specific endpoint o be set
87
+ # use `NetSuite::Utilities.data_center_url('TSTDRV1576318')` to retrieve wsdl URL
79
88
  # you'll want to do this in a background process and strip the protocol out of the return string
80
89
  wsdl_domain 'tstdrv1576318.suitetalk.api.netsuite.com'
90
+
91
+ # the endpoint indicated in the > 2018_2 wsdl is invalid
92
+ # you must set the endpoint directly
93
+ # https://github.com/NetSweet/netsuite/pull/473
94
+ endpoint "#{wsdl_domain}/services/NetSuitePort_#{api_version}"
81
95
  end
82
96
  ```
83
97
 
@@ -115,6 +129,7 @@ NetSuite.configure do
115
129
  # log_level :debug
116
130
 
117
131
  # password-based login information
132
+ # in most cases you should use token based authentication instead
118
133
  email 'email@domain.com'
119
134
  password 'password'
120
135
  account '12345'
@@ -127,9 +142,9 @@ NetSuite.configure do
127
142
  end
128
143
  ```
129
144
 
130
- If you'd like to use a API endpoints greater than 2015_1 you'll need to specify an application ID:
145
+ If are using username + password authentication (which you shouldn't be!) *and* you'd like to use a API endpoints greater than 2015_1 you'll need to specify an application ID:
131
146
 
132
- ```
147
+ ```ruby
133
148
  NetSuite::Configuration.soap_header = {
134
149
  'platformMsgs:ApplicationInfo' => {
135
150
  'platformMsgs:applicationId' => 'your-netsuite-app-id'
@@ -139,7 +154,7 @@ NetSuite::Configuration.soap_header = {
139
154
 
140
155
  ### Token based Authentication
141
156
 
142
- OAuth credentials are also supported. [Learn more about how to set up token based authentication here](http://mikebian.co/using-netsuites-token-based-authentication-with-suitetalk/).
157
+ OAuth credentials are supported and the recommended authentication approach. [Learn more about how to set up token based authentication here](http://mikebian.co/using-netsuites-token-based-authentication-with-suitetalk/).
143
158
 
144
159
  ```ruby
145
160
  NetSuite.configure do
@@ -154,6 +169,11 @@ NetSuite.configure do
154
169
 
155
170
  # oauth does not work with API versions less than 2015_2
156
171
  api_version '2016_2'
172
+
173
+ # the endpoint indicated in the > 2018_2 wsdl is invalid
174
+ # you must set the endpoint directly
175
+ # https://github.com/NetSweet/netsuite/pull/473
176
+ endpoint "#{wsdl_domain}/services/NetSuitePort_#{api_version}"
157
177
  end
158
178
  ```
159
179
 
@@ -593,7 +613,3 @@ states = NetSuite::Configuration.connection.call(:get_all, message: {
593
613
  })
594
614
  states.to_array.first[:get_all_response][:get_all_result][:record_list][:record].map { |r| { country: r[:country], abbr: r[:shortname], name: r[:full_name] } }
595
615
  ```
596
-
597
- # About SuiteSync
598
-
599
- [SuiteSync, the Stripe-NetSuite integration](http://suitesync.io) uses this gem and funds the majority of it's development and maintenance.
data/circle.yml CHANGED
@@ -3,7 +3,7 @@ version: 2.1
3
3
  orbs:
4
4
  # orbs are basically bundles of pre-written build scripts that work for common cases
5
5
  # https://github.com/CircleCI-Public/ruby-orb
6
- ruby: circleci/ruby@1.1
6
+ ruby: circleci/ruby@1.1.2
7
7
 
8
8
  jobs:
9
9
  # skipping build step because Gemfile.lock is not included in the source
@@ -17,8 +17,11 @@ jobs:
17
17
  steps:
18
18
  - checkout
19
19
  - ruby/install-deps:
20
- bundler-version: '1.17.2'
20
+ bundler-version: '2.1.4'
21
21
  with-cache: false
22
+ # without specifying a non-standard path `--deployment` will be used when running bundler
23
+ # which causes the bundler to fail
24
+ path: './vendor/custom_bundle'
22
25
  - ruby/rspec-test
23
26
 
24
27
  # strangely, there seems to be very little documentation about exactly how martix builds work.
data/lib/netsuite.rb CHANGED
@@ -123,6 +123,8 @@ module NetSuite
123
123
  autoload :CustomerPayment, 'netsuite/records/customer_payment'
124
124
  autoload :CustomerPaymentApply, 'netsuite/records/customer_payment_apply'
125
125
  autoload :CustomerPaymentApplyList, 'netsuite/records/customer_payment_apply_list'
126
+ autoload :CustomerPaymentCredit, 'netsuite/records/customer_payment_credit'
127
+ autoload :CustomerPaymentCreditList, 'netsuite/records/customer_payment_credit_list'
126
128
  autoload :CustomerPartner, 'netsuite/records/customer_partner'
127
129
  autoload :CustomerRefund, 'netsuite/records/customer_refund'
128
130
  autoload :CustomerRefundApply, 'netsuite/records/customer_refund_apply'
@@ -297,6 +299,8 @@ module NetSuite
297
299
  autoload :VendorCreditItemList, 'netsuite/records/vendor_credit_item_list'
298
300
  autoload :VendorCreditExpense, 'netsuite/records/vendor_credit_expense'
299
301
  autoload :VendorCreditExpenseList, 'netsuite/records/vendor_credit_expense_list'
302
+ autoload :VendorCurrencyList, 'netsuite/records/vendor_currency_list'
303
+ autoload :VendorCurrency, 'netsuite/records/vendor_currency'
300
304
  autoload :VendorReturnAuthorization, 'netsuite/records/vendor_return_authorization'
301
305
  autoload :VendorReturnAuthorizationItem, 'netsuite/records/vendor_return_authorization_item'
302
306
  autoload :VendorReturnAuthorizationItemList, 'netsuite/records/vendor_return_authorization_item_list'
@@ -17,6 +17,7 @@ module NetSuite
17
17
  def connection(params={}, credentials={})
18
18
  client = Savon.client({
19
19
  wsdl: cached_wsdl || wsdl,
20
+ endpoint: endpoint,
20
21
  read_timeout: read_timeout,
21
22
  open_timeout: open_timeout,
22
23
  namespaces: namespaces,
@@ -94,6 +95,18 @@ module NetSuite
94
95
  attributes[:api_version] = version
95
96
  end
96
97
 
98
+ def endpoint=(endpoint)
99
+ attributes[:endpoint] = endpoint
100
+ end
101
+
102
+ def endpoint(endpoint=nil)
103
+ if endpoint
104
+ self.endpoint = endpoint
105
+ else
106
+ attributes[:endpoint]
107
+ end
108
+ end
109
+
97
110
  def sandbox=(flag)
98
111
  if attributes[:sandbox] != flag
99
112
  attributes[:wsdl] = nil
@@ -8,12 +8,12 @@ module NetSuite
8
8
 
9
9
  actions :get, :get_list, :add, :delete, :upsert, :search
10
10
 
11
- fields :allow_non_gl_changes, :end_date, :is_adjust, :is_quarter, :is_year, :period_name, :start_date
11
+ fields :allow_non_gl_changes, :end_date, :is_adjust, :is_quarter, :is_year, :period_name, :start_date, :closed
12
12
 
13
13
  record_refs :parent
14
14
 
15
15
  attr_reader :internal_id
16
- attr_accessor :external_id
16
+ attr_accessor :external_id, :search_joins
17
17
 
18
18
  def initialize(attributes = {})
19
19
  @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
@@ -7,7 +7,7 @@ module NetSuite
7
7
  include Support::Actions
8
8
  include Namespaces::ListRel
9
9
 
10
- actions :get, :get_list, :add, :delete, :delete_list, :search, :update, :upsert
10
+ actions :get, :get_deleted, :get_list, :add, :delete, :delete_list, :search, :update, :upsert, :upsert_list
11
11
 
12
12
  fields :salutation, :first_name, :middle_name, :last_name, :title, :phone, :fax, :email, :default_address,
13
13
  :entity_id, :phonetic_name, :alt_email, :office_phone, :home_phone, :mobile_phone, :supervisor_phone,
@@ -17,7 +17,7 @@ module NetSuite
17
17
  :sales_effective_date, :shipping_cost, :shipping_tax1_rate, :shipping_tax2_rate, :source, :status,
18
18
  :sync_partner_teams, :sync_sales_teams, :tax2_total, :tax_rate, :to_be_emailed, :to_be_faxed,
19
19
  :to_be_printed, :total_cost_estimate, :tran_date, :tran_id, :tran_is_vsoe_bundle, :vat_reg_num,
20
- :vsoe_auto_calc
20
+ :vsoe_auto_calc, :tax_details_override, :tax_reg_override
21
21
 
22
22
  field :custom_field_list, CustomFieldList
23
23
  field :item_list, CreditMemoItemList
@@ -21,11 +21,11 @@ module NetSuite
21
21
  field :apply_list, CustomerDepositApplyList
22
22
  # accountingBookDetailList
23
23
 
24
- record_refs :customer, :sales_order, :account, :department, :payment_method,
25
- :custom_form, :currency, :posting_period, :subsidiary, :location,
26
-
27
- # only available in an advanced search result
28
- :deposit_transaction
24
+ record_refs :customer, :sales_order, :account, :department,
25
+ :payment_method, :payment_option, :custom_form, :currency,
26
+ :posting_period, :subsidiary, :location,
27
+ # only available in an advanced search result
28
+ :deposit_transaction
29
29
 
30
30
  attr_reader :internal_id
31
31
  attr_accessor :external_id
@@ -17,11 +17,14 @@ module NetSuite
17
17
 
18
18
  field :custom_field_list, CustomFieldList
19
19
  field :apply_list, CustomerPaymentApplyList
20
+ field :credit_list, CustomerPaymentCreditList
20
21
 
21
22
  read_only_fields :applied, :balance, :pending, :total, :unapplied
22
23
 
23
- record_refs :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass,
24
- :location, :payment_method, :posting_period, :subsidiary, :currency
24
+ record_refs :account, :ar_acct, :credit_card, :credit_card_processor,
25
+ :custom_form, :customer, :department, :klass, :location,
26
+ :payment_method, :payment_option, :posting_period, :subsidiary,
27
+ :currency
25
28
 
26
29
  attr_reader :internal_id
27
30
  attr_accessor :external_id
@@ -0,0 +1,17 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerPaymentCredit
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::TranCust
7
+
8
+ fields :amount, :applied_to, :apply, :credit_date, :currency, :doc, :due, :line,
9
+ :ref_num, :total, :type
10
+
11
+ def initialize(attributes = {})
12
+ initialize_from_attributes_hash(attributes)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomerPaymentCreditList < Support::Sublist
4
+ include Namespaces::TranCust
5
+
6
+ sublist :credit, CustomerPaymentCredit
7
+
8
+ alias :credits :credit
9
+
10
+ end
11
+ end
12
+ end
@@ -51,7 +51,8 @@ module NetSuite
51
51
  :parent, :preferred_location, :pricing_group, :purchase_price_variance_acct, :purchase_tax_code, :purchase_unit,
52
52
  :quantity_pricing_schedule, :rev_rec_schedule, :sale_unit, :sales_tax_code, :ship_package, :soft_descriptor,
53
53
  :stock_unit, :store_display_image, :store_display_thumbnail, :store_item_template, :supply_lot_sizing_method,
54
- :supply_replenishment_method, :supply_type, :tax_schedule, :units_type, :vendor
54
+ :supply_replenishment_method, :supply_type, :tax_schedule, :units_type, :vendor, :create_revenue_plans_on,
55
+ :revenue_recognition_rule, :rev_rec_forecast_rule
55
56
 
56
57
  field :pricing_matrix, PricingMatrix
57
58
  field :custom_field_list, CustomFieldList
@@ -8,15 +8,17 @@ module NetSuite
8
8
  include Support::RecordRefs
9
9
  include Namespaces::ListRel
10
10
 
11
- # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2014_1/schema/record/partner.html
11
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2020_2/schema/record/partner.html
12
12
 
13
13
  actions :get, :get_list, :add, :update, :upsert, :upsert_list, :delete, :search
14
14
 
15
- fields :phone, :home_phone, :first_name, :last_name, :alt_name, :is_inactive, :email, :give_access,
16
- :partner_code, :is_person, :company_name, :eligible_for_commission, :entity_id, :last_modified_date,
17
- :date_created, :title, :mobile_phone, :comments, :middle_name, :send_email, :password, :password2
15
+ fields :alt_email, :alt_name, :bcn, :comments, :company_name, :date_created, :default_address,
16
+ :eligible_for_commission, :email, :entity_id, :fax, :first_name, :give_access, :home_phone, :is_inactive,
17
+ :is_person, :last_modified_date, :last_name, :login_as, :middle_name, :mobile_phone, :partner_code,
18
+ :password, :password2, :phone, :phonetic_name, :print_on_check_as, :referring_url, :require_pwd_change,
19
+ :salutation, :send_email, :sub_partner_login, :tax_id_num, :title, :url, :vat_reg_number
18
20
 
19
- record_refs :klass, :access_role, :department, :subsidiary
21
+ record_refs :access_role, :klass, :custom_form, :default_tax_reg, :department, :image, :location, :parent, :subsidiary
20
22
 
21
23
  attr_reader :internal_id
22
24
  attr_accessor :external_id
@@ -11,7 +11,7 @@ module NetSuite
11
11
 
12
12
  fields :account_number, :alt_email, :alt_name, :alt_phone, :balance,
13
13
  :balance_primary, :bcn, :bill_pay, :comments, :company_name, :credit_limit,
14
- :currency_list, :date_created, :default_address, :eligible_for_commission,
14
+ :date_created, :default_address, :eligible_for_commission,
15
15
  :email, :email_preference, :email_transactions, :entity_id, :fax, :fax_transactions,
16
16
  :first_name, :give_access, :global_subscription_status, :home_phone, :is1099_eligible,
17
17
  :is_accountant, :is_inactive, :is_job_resource_vend, :is_person, :labor_cost,
@@ -22,6 +22,7 @@ module NetSuite
22
22
  :url, :vat_reg_number
23
23
 
24
24
  field :custom_field_list, CustomFieldList
25
+ field :currency_list, VendorCurrencyList
25
26
  # TODO should change name to VendorAddressBookList
26
27
  field :addressbook_list, CustomerAddressbookList
27
28
 
@@ -0,0 +1,26 @@
1
+ module NetSuite
2
+ module Records
3
+ class VendorCurrency
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Namespaces::ListRel
8
+
9
+ fields :balance, :consol_balance, :consol_deposit_balance, :consol_overdue_balance,
10
+ :consol_unbilled_orders, :deposit_balance, :display_symbol, :overdue_balance,
11
+ :override_currency_format, :symbol_placement, :unbilled_orders
12
+
13
+ record_refs :currency
14
+
15
+ def initialize(attributes_or_record = {})
16
+ case attributes_or_record
17
+ when Hash
18
+ initialize_from_attributes_hash(attributes_or_record)
19
+ when self.class
20
+ initialize_from_record(attributes_or_record)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ module NetSuite
2
+ module Records
3
+ class VendorCurrencyList < Support::Sublist
4
+ include Namespaces::ListRel
5
+
6
+ sublist :vendor_currency, NetSuite::Records::VendorCurrency
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module NetSuite
2
- VERSION = '0.8.6'
2
+ VERSION = '0.8.7'
3
3
  end
@@ -29,10 +29,12 @@ describe NetSuite::Configuration do
29
29
  end
30
30
 
31
31
  describe '#connection' do
32
+ EXAMPLE_ENDPOINT = 'https://1023.suitetalk.api.netsuite.com/services/NetSuitePort_2020_2'
32
33
  before(:each) do
33
34
  # reset clears out the password info
34
35
  config.email 'me@example.com'
35
36
  config.password 'me@example.com'
37
+ config.endpoint EXAMPLE_ENDPOINT
36
38
  config.account 1023
37
39
  config.wsdl "my_wsdl"
38
40
  config.api_version "2012_2"
@@ -57,6 +59,19 @@ describe NetSuite::Configuration do
57
59
 
58
60
  expect(config).to have_received(:cached_wsdl)
59
61
  end
62
+
63
+ it 'sets the endpoint on the Savon client' do
64
+ # this is ugly/brittle, but it's hard to see how else to test this
65
+ savon_configs = config.connection.globals.instance_eval {@options}
66
+ expect(savon_configs.fetch(:endpoint)).to eq(EXAMPLE_ENDPOINT)
67
+ end
68
+
69
+ it 'handles a nil endpoint' do
70
+ config.endpoint = nil
71
+ # this is ugly/brittle, but it's hard to see how else to test this
72
+ savon_configs = config.connection.globals.instance_eval {@options}
73
+ expect(savon_configs.fetch(:endpoint)).to eq(nil)
74
+ end
60
75
  end
61
76
 
62
77
  describe '#wsdl' do
@@ -166,6 +181,23 @@ describe NetSuite::Configuration do
166
181
  end
167
182
  end
168
183
 
184
+ describe '#endpoint' do
185
+ it 'can be set with endpoint=' do
186
+ config.endpoint = 42
187
+ expect(config.endpoint).to eq(42)
188
+ end
189
+
190
+ it 'can be set with just endpoint(value)' do
191
+ config.endpoint(42)
192
+ expect(config.endpoint).to eq(42)
193
+ end
194
+
195
+ it 'supports nil endpoints' do
196
+ config.endpoint = nil
197
+ expect(config.endpoint).to eq(nil)
198
+ end
199
+ end
200
+
169
201
  describe '#auth_header' do
170
202
  context 'when doing user authentication' do
171
203
  before do
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'basic records' do
4
+ # all records with internal IDs should be added to this list
4
5
  let(:basic_record_list) {
5
6
  [
6
7
  NetSuite::Records::Currency,
@@ -49,6 +50,7 @@ describe 'basic records' do
49
50
  NetSuite::Records::SerializedInventoryItem,
50
51
  NetSuite::Records::DepositApplication,
51
52
  NetSuite::Records::InventoryAdjustment,
53
+ NetSuite::Records::Vendor,
52
54
  NetSuite::Records::VendorReturnAuthorization,
53
55
  NetSuite::Records::AssemblyBuild,
54
56
  NetSuite::Records::AssemblyUnbuild,
@@ -61,6 +63,7 @@ describe 'basic records' do
61
63
  NetSuite::Records::BinTransfer,
62
64
  NetSuite::Records::SerializedAssemblyItem,
63
65
  NetSuite::Records::CustomerStatus,
66
+ NetSuite::Records::CustomerPayment,
64
67
  NetSuite::Records::TransactionBodyCustomField,
65
68
  NetSuite::Records::TransactionColumnCustomField,
66
69
  NetSuite::Records::EntityCustomField
@@ -108,8 +111,12 @@ describe 'basic records' do
108
111
 
109
112
  if !sublist_fields.empty?
110
113
  sublist_fields.each do |sublist_field|
114
+ sublist = record_instance.send(sublist_field)
115
+
111
116
  # TODO make a sublist entry with some fields valid for that sublist item
112
- record_instance.send(sublist_field) << {}
117
+ sublist << {}
118
+
119
+ expect(sublist.send(sublist.sublist_key).count).to be(1)
113
120
  end
114
121
  end
115
122
 
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomerPaymentCreditList do
4
+ let(:list) { NetSuite::Records::CustomerPaymentCreditList.new }
5
+ let(:apply) { NetSuite::Records::CustomerPaymentCredit.new }
6
+
7
+ it 'can have credits be added to it' do
8
+ list.credits << apply
9
+ credit_list = list.credits
10
+ expect(credit_list).to be_kind_of(Array)
11
+ expect(credit_list.length).to eql(1)
12
+ credit_list.each { |i| expect(i).to be_kind_of(NetSuite::Records::CustomerPaymentCredit) }
13
+ end
14
+
15
+ describe '#to_record' do
16
+ it 'can represent itself as a SOAP record' do
17
+ record = {
18
+ 'tranCust:credit' => [{},{}]
19
+ }
20
+
21
+ list.credits.concat([apply, apply])
22
+ expect(list.to_record).to eql(record)
23
+ end
24
+ end
25
+
26
+ end
@@ -18,7 +18,7 @@ describe NetSuite::Records::CustomerPayment do
18
18
 
19
19
  it 'has all the right record refs' do
20
20
  [
21
- :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass, :location, :payment_method, :posting_period, :subsidiary
21
+ :account, :ar_acct, :credit_card, :credit_card_processor, :custom_form, :customer, :department, :klass, :location, :payment_method, :payment_option, :posting_period, :subsidiary
22
22
  ].each do |record_ref|
23
23
  expect(payment).to have_record_ref(record_ref)
24
24
  end
@@ -49,11 +49,6 @@ describe NetSuite::Records::CustomerPayment do
49
49
  it 'can be set from a CustomerPaymentApplyList object'
50
50
  end
51
51
 
52
- describe '#credit_list' do
53
- it 'can be set from attributes'
54
- it 'can be set from a CustomerPaymentCreditList object'
55
- end
56
-
57
52
  describe '#deposit_list' do
58
53
  it 'can be set from attributes'
59
54
  it 'can be set from a CustomerPaymentDepositList object'
@@ -5,9 +5,11 @@ describe NetSuite::Records::Partner do
5
5
 
6
6
  it 'has all the right fields' do
7
7
  [
8
- :phone, :home_phone, :first_name, :last_name, :alt_name, :is_inactive, :email, :give_access,
9
- :partner_code, :is_person, :company_name, :eligible_for_commission, :entity_id, :last_modified_date,
10
- :date_created, :title, :mobile_phone, :comments, :middle_name, :send_email, :password, :password2
8
+ :alt_email, :alt_name, :bcn, :comments, :company_name, :date_created, :default_address,
9
+ :eligible_for_commission, :email, :entity_id, :fax, :first_name, :give_access, :home_phone, :is_inactive,
10
+ :is_person, :last_modified_date, :last_name, :login_as, :middle_name, :mobile_phone, :partner_code,
11
+ :password, :password2, :phone, :phonetic_name, :print_on_check_as, :referring_url, :require_pwd_change,
12
+ :salutation, :send_email, :sub_partner_login, :tax_id_num, :title, :url, :vat_reg_number
11
13
  ].each do |field|
12
14
  expect(partner).to have_field(field)
13
15
  end
@@ -15,7 +17,7 @@ describe NetSuite::Records::Partner do
15
17
 
16
18
  it 'has all the right record refs' do
17
19
  [
18
- :klass, :access_role, :department, :subsidiary
20
+ :access_role, :klass, :custom_form, :default_tax_reg, :department, :image, :location, :parent, :subsidiary
19
21
  ].each do |record_ref|
20
22
  expect(partner).to have_record_ref(record_ref)
21
23
  end
@@ -7,7 +7,7 @@ describe NetSuite::Records::Vendor do
7
7
  [
8
8
  :account_number, :alt_email, :alt_name, :alt_phone, :balance,
9
9
  :balance_primary, :bcn, :bill_pay, :comments, :company_name, :credit_limit,
10
- :currency_list, :date_created, :default_address, :eligible_for_commission,
10
+ :date_created, :default_address, :eligible_for_commission,
11
11
  :email, :email_preference, :email_transactions, :entity_id, :fax, :fax_transactions,
12
12
  :first_name, :give_access, :global_subscription_status, :home_phone, :is1099_eligible,
13
13
  :is_accountant, :is_inactive, :is_job_resource_vend, :is_person, :labor_cost,
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netsuite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Moran
8
8
  - Michael Bianco
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-23 00:00:00.000000000 Z
12
+ date: 2021-05-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -56,6 +56,7 @@ files:
56
56
  - ".gitignore"
57
57
  - ".rspec"
58
58
  - ".ruby-version"
59
+ - ".tool-versions"
59
60
  - Gemfile
60
61
  - LICENSE
61
62
  - README.md
@@ -168,6 +169,8 @@ files:
168
169
  - lib/netsuite/records/customer_payment.rb
169
170
  - lib/netsuite/records/customer_payment_apply.rb
170
171
  - lib/netsuite/records/customer_payment_apply_list.rb
172
+ - lib/netsuite/records/customer_payment_credit.rb
173
+ - lib/netsuite/records/customer_payment_credit_list.rb
171
174
  - lib/netsuite/records/customer_refund.rb
172
175
  - lib/netsuite/records/customer_refund_apply.rb
173
176
  - lib/netsuite/records/customer_refund_apply_list.rb
@@ -331,6 +334,8 @@ files:
331
334
  - lib/netsuite/records/vendor_credit_expense_list.rb
332
335
  - lib/netsuite/records/vendor_credit_item.rb
333
336
  - lib/netsuite/records/vendor_credit_item_list.rb
337
+ - lib/netsuite/records/vendor_currency.rb
338
+ - lib/netsuite/records/vendor_currency_list.rb
334
339
  - lib/netsuite/records/vendor_payment.rb
335
340
  - lib/netsuite/records/vendor_payment_apply.rb
336
341
  - lib/netsuite/records/vendor_payment_apply_list.rb
@@ -407,6 +412,7 @@ files:
407
412
  - spec/netsuite/records/customer_addressbook_spec.rb
408
413
  - spec/netsuite/records/customer_credit_cards_list_spec.rb
409
414
  - spec/netsuite/records/customer_payment_apply_list_spec.rb
415
+ - spec/netsuite/records/customer_payment_credit_list_spec.rb
410
416
  - spec/netsuite/records/customer_payment_spec.rb
411
417
  - spec/netsuite/records/customer_refund_apply_list_spec.rb
412
418
  - spec/netsuite/records/customer_refund_apply_spec.rb
@@ -556,7 +562,7 @@ homepage: https://github.com/NetSweet/netsuite
556
562
  licenses:
557
563
  - MIT
558
564
  metadata: {}
559
- post_install_message:
565
+ post_install_message:
560
566
  rdoc_options: []
561
567
  require_paths:
562
568
  - lib
@@ -571,8 +577,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
571
577
  - !ruby/object:Gem::Version
572
578
  version: '0'
573
579
  requirements: []
574
- rubygems_version: 3.0.3
575
- signing_key:
580
+ rubygems_version: 3.1.6
581
+ signing_key:
576
582
  specification_version: 4
577
583
  summary: NetSuite SuiteTalk API (SOAP) Wrapper
578
584
  test_files:
@@ -627,6 +633,7 @@ test_files:
627
633
  - spec/netsuite/records/customer_addressbook_spec.rb
628
634
  - spec/netsuite/records/customer_credit_cards_list_spec.rb
629
635
  - spec/netsuite/records/customer_payment_apply_list_spec.rb
636
+ - spec/netsuite/records/customer_payment_credit_list_spec.rb
630
637
  - spec/netsuite/records/customer_payment_spec.rb
631
638
  - spec/netsuite/records/customer_refund_apply_list_spec.rb
632
639
  - spec/netsuite/records/customer_refund_apply_spec.rb