netsuite 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/netsuite.rb +1 -1
- data/lib/netsuite/actions/search.rb +3 -7
- data/lib/netsuite/records/custom_field_list.rb +14 -12
- data/lib/netsuite/records/employee.rb +4 -0
- data/lib/netsuite/records/invoice.rb +1 -1
- data/lib/netsuite/records/location.rb +1 -0
- data/lib/netsuite/support/search_result.rb +3 -4
- data/lib/netsuite/version.rb +1 -1
- data/spec/netsuite/records/custom_field_list_spec.rb +68 -22
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjY3MzQ4ZTcwOTU2YjM1YzE1YmFkMWVjMGI3YmE0NWMzNWFmYzE2Zg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzgzZTEyNjNhYTVmNjMwZjIyNDc2YmU2ZjhjZTRlNGVmYzk4NmI1Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Mzc1ZDMwMzFjMzhkNzQxMmIyZmYzNmY5ZGQzN2I5NWM2MmU0YTBmYTcwZTM4
|
10
|
+
Y2Q3OGExNTlmMDYyNTNmZWI0YThkMzk2YzZlNjk2ZDA1ODk4ZjNmNTFiZDlm
|
11
|
+
MmY5ODY5MGVhOTAzZDAxZTcxODczNzc1NmVhYmFiYWM3ZTFhYTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODUzZjFhMGVjMGY2MjhmYzdiMTU5NGZmYmRhYzhkOWEwZDhjMWU3NTVmZGJh
|
14
|
+
OTU1YjlhMTg4YzQ3ZGMyNWQzOTFmYWFjZDMwZjYzZDcxMWYyMGVjNzY1OTU5
|
15
|
+
NmEwNjk0NjgyOTg1ZDJlNDk1ZDc1ZGViYTM1YTc3OTEzZjFlZjc=
|
data/lib/netsuite.rb
CHANGED
@@ -194,7 +194,7 @@ module NetSuite
|
|
194
194
|
def self.configure_from_env(&block)
|
195
195
|
NetSuite.configure do
|
196
196
|
reset!
|
197
|
-
|
197
|
+
|
198
198
|
email ENV['NETSUITE_EMAIL'] unless ENV['NETSUITE_EMAIL'].nil?
|
199
199
|
password ENV['NETSUITE_PASSWORD'] unless ENV['NETSUITE_PASSWORD'].nil?
|
200
200
|
account ENV['NETSUITE_ACCOUNT'] unless ENV['NETSUITE_ACCOUNT'].nil?
|
@@ -223,14 +223,10 @@ module NetSuite
|
|
223
223
|
@success ||= search_result[:status][:@is_success] == 'true'
|
224
224
|
end
|
225
225
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
error_obj = [error_obj] if error_obj.class == Hash
|
230
|
-
error_obj.map do |error|
|
231
|
-
NetSuite::Error.new(error)
|
226
|
+
protected
|
227
|
+
def method_name
|
228
|
+
|
232
229
|
end
|
233
|
-
end
|
234
230
|
|
235
231
|
module Support
|
236
232
|
def self.included(base)
|
@@ -10,13 +10,11 @@ module NetSuite
|
|
10
10
|
when Array
|
11
11
|
attributes[:custom_field].each { |custom_field| extract_custom_field(custom_field) }
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
@custom_fields_assoc = Hash.new
|
15
15
|
custom_fields.each do |custom_field|
|
16
|
-
reference_id = custom_field.script_id || custom_field.internal_id
|
17
|
-
|
18
16
|
# not all custom fields have an id; https://github.com/NetSweet/netsuite/issues/182
|
19
|
-
if reference_id
|
17
|
+
if reference_id = custom_field.send(reference_id_type)
|
20
18
|
@custom_fields_assoc[reference_id.to_sym] = custom_field
|
21
19
|
end
|
22
20
|
end
|
@@ -27,7 +25,7 @@ module NetSuite
|
|
27
25
|
end
|
28
26
|
|
29
27
|
def delete_custom_field(field)
|
30
|
-
custom_fields.delete_if { |c| c.
|
28
|
+
custom_fields.delete_if { |c| c.send(reference_id_type).to_sym == field }
|
31
29
|
@custom_fields_assoc.delete(field)
|
32
30
|
end
|
33
31
|
|
@@ -38,7 +36,7 @@ module NetSuite
|
|
38
36
|
def custom_fields_by_type(type)
|
39
37
|
custom_fields.select { |field| field.type == "platformCore:#{type}" }
|
40
38
|
end
|
41
|
-
|
39
|
+
|
42
40
|
def method_missing(sym, *args, &block)
|
43
41
|
# read custom field if already set
|
44
42
|
if @custom_fields_assoc.include?(sym)
|
@@ -93,6 +91,10 @@ module NetSuite
|
|
93
91
|
end
|
94
92
|
|
95
93
|
private
|
94
|
+
def reference_id_type
|
95
|
+
@reference_id_type ||= Configuration.api_version >= '2013_2' ? :script_id : :internal_id
|
96
|
+
end
|
97
|
+
|
96
98
|
def extract_custom_field(custom_field_data)
|
97
99
|
# TODO this seems brittle, but might sufficient, watch out for this if something breaks
|
98
100
|
if custom_field_data[:"@xsi:type"] == "platformCore:SelectCustomFieldRef"
|
@@ -102,7 +104,7 @@ module NetSuite
|
|
102
104
|
custom_fields << CustomField.new(custom_field_data)
|
103
105
|
end
|
104
106
|
|
105
|
-
def create_custom_field(
|
107
|
+
def create_custom_field(reference_id, field_value)
|
106
108
|
# all custom fields need types; infer type based on class sniffing
|
107
109
|
field_type = case
|
108
110
|
when field_value.is_a?(Array)
|
@@ -123,7 +125,7 @@ module NetSuite
|
|
123
125
|
# TODO seems like DateTime doesn't need the iso8601 call
|
124
126
|
# not sure if this is specific to my env though
|
125
127
|
|
126
|
-
custom_field_value = case
|
128
|
+
custom_field_value = case
|
127
129
|
when field_value.is_a?(Hash)
|
128
130
|
CustomRecordRef.new(field_value)
|
129
131
|
when field_value.is_a?(Date)
|
@@ -146,13 +148,13 @@ module NetSuite
|
|
146
148
|
end
|
147
149
|
|
148
150
|
custom_field = CustomField.new(
|
149
|
-
|
150
|
-
value
|
151
|
-
type
|
151
|
+
reference_id_type => reference_id,
|
152
|
+
:value => custom_field_value,
|
153
|
+
:type => "#{record_namespace}:#{field_type}"
|
152
154
|
)
|
153
155
|
|
154
156
|
custom_fields << custom_field
|
155
|
-
@custom_fields_assoc[
|
157
|
+
@custom_fields_assoc[reference_id.to_sym] = custom_field
|
156
158
|
end
|
157
159
|
end
|
158
160
|
end
|
@@ -7,7 +7,7 @@ module NetSuite
|
|
7
7
|
include Support::Actions
|
8
8
|
include Namespaces::TranSales
|
9
9
|
|
10
|
-
actions :get, :get_list, :initialize, :add, :delete, :upsert, :search
|
10
|
+
actions :get, :get_list, :initialize, :add, :update, :delete, :upsert, :search
|
11
11
|
|
12
12
|
fields :balance, :bill_address,
|
13
13
|
:billing_schedule, :contrib_pct, :created_date, :currency_name, :custom_field_list,
|
@@ -20,7 +20,7 @@ module NetSuite
|
|
20
20
|
def initialize(response, result_class)
|
21
21
|
@result_class = result_class
|
22
22
|
@response = response
|
23
|
-
|
23
|
+
|
24
24
|
@total_records = response.body[:total_records].to_i
|
25
25
|
@total_pages = response.body[:total_pages].to_i
|
26
26
|
@current_page = response.body[:page_index].to_i
|
@@ -48,7 +48,7 @@ module NetSuite
|
|
48
48
|
next if search_group.to_s.start_with?('@')
|
49
49
|
|
50
50
|
record[search_group].each_pair do |k, v|
|
51
|
-
# all return values
|
51
|
+
# all return values are wrapped in a <SearchValue/>
|
52
52
|
# extract the value from <SearchValue/> to make results easier to work with
|
53
53
|
|
54
54
|
if v.is_a?(Hash) && v.has_key?(:search_value)
|
@@ -63,7 +63,6 @@ module NetSuite
|
|
63
63
|
end
|
64
64
|
|
65
65
|
result_wrapper = result_class.new(record.delete(:basic))
|
66
|
-
# TODO if custom record search the type id should be copied over
|
67
66
|
result_wrapper.search_joins = record
|
68
67
|
results << result_wrapper
|
69
68
|
end
|
@@ -98,4 +97,4 @@ module NetSuite
|
|
98
97
|
|
99
98
|
end
|
100
99
|
end
|
101
|
-
end
|
100
|
+
end
|
data/lib/netsuite/version.rb
CHANGED
@@ -7,31 +7,77 @@ describe NetSuite::Records::CustomFieldList do
|
|
7
7
|
expect(list.custom_fields).to be_kind_of(Array)
|
8
8
|
end
|
9
9
|
|
10
|
-
context '
|
11
|
-
|
12
|
-
|
13
|
-
expect(list.custom_fields.size).to eq(1)
|
14
|
-
expect(list.custom_fields.first.value).to eq('a value')
|
15
|
-
expect(list.custom_fields.first.type).to eq('platformCore:StringCustomFieldRef')
|
16
|
-
end
|
10
|
+
context 'custom field internalId-to-scriptId transition at WSDL 2013_2:' do
|
11
|
+
before(:context) { @reset = NetSuite::Configuration.api_version }
|
12
|
+
after(:context) { NetSuite::Configuration.api_version = @reset }
|
17
13
|
|
18
|
-
|
19
|
-
list.custrecord_somefield = Date.parse("12/12/2012")
|
20
|
-
expect(list.custom_fields.first.value).to eq('2012-12-12T00:00:00+00:00')
|
21
|
-
end
|
14
|
+
transition_version = '2013_2'
|
22
15
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
['2012_2', '2013_2', '2014_2'].each do |version|
|
17
|
+
|
18
|
+
comparison = ['==', '>', '<'][version <=> transition_version]
|
19
|
+
|
20
|
+
context "when WSDL version #{comparison} #{transition_version}," do
|
21
|
+
before { NetSuite::Configuration.api_version = version }
|
22
|
+
|
23
|
+
context 'convenience methods' do
|
24
|
+
reference_id_type = version < transition_version ? :internal_id : :script_id
|
25
|
+
|
26
|
+
it "should create a custom field entry when none exists" do
|
27
|
+
list.some_custom_field = 'a value'
|
28
|
+
|
29
|
+
expect(list.custom_fields.size).to eq(1)
|
30
|
+
expect(list.custom_fields.first.value).to eq('a value')
|
31
|
+
expect(list.custom_fields.first.type).to eq('platformCore:StringCustomFieldRef')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should set #{reference_id_type} to method name when creating a custom field" do
|
35
|
+
list.some_custom_field = 'a value'
|
36
|
+
|
37
|
+
expect(list.some_custom_field.send(reference_id_type)).to eq('some_custom_field')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should update a custom field's value when one exists" do
|
41
|
+
list.existing_custom_field = 'old value'
|
42
|
+
list.existing_custom_field = 'new value'
|
43
|
+
|
44
|
+
expect(list.existing_custom_field.value).to eq('new value')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should handle date custom field creation" do
|
48
|
+
list.some_custom_field = Date.parse("12/12/2012")
|
49
|
+
|
50
|
+
expect(list.custom_fields.first.value).to eq('2012-12-12T00:00:00+00:00')
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should handle datetime custom field creation" do
|
54
|
+
list.some_custom_field = DateTime.parse("12/12/2012 10:05am")
|
55
|
+
|
56
|
+
expect(list.custom_fields.first.value).to eq('2012-12-12T10:05:00+00:00')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should convert a list of numbers into a list of custom field refs" do
|
60
|
+
list.some_custom_field = [1,2]
|
61
|
+
|
62
|
+
expect(list.custom_fields.first.type).to eq('platformCore:MultiSelectCustomFieldRef')
|
63
|
+
expect(list.custom_fields.first.value.map(&:to_record)).to eql([
|
64
|
+
NetSuite::Records::CustomRecordRef.new(:internal_id => 1),
|
65
|
+
NetSuite::Records::CustomRecordRef.new(:internal_id => 2)
|
66
|
+
].map(&:to_record))
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return custom field record when entry exists" do
|
70
|
+
list.existing_custom_field = 'a value'
|
71
|
+
|
72
|
+
expect(list.existing_custom_field).to be_a(NetSuite::Records::CustomField)
|
73
|
+
expect(list.existing_custom_field.value).to eq('a value')
|
74
|
+
end
|
27
75
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
NetSuite::Records::CustomRecordRef.new(:internal_id => 2)
|
34
|
-
].map(&:to_record))
|
76
|
+
it "should raise an error if custom field entry does not exist" do
|
77
|
+
expect{ list.nonexisting_custom_field }.to raise_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
35
81
|
end
|
36
82
|
end
|
37
83
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netsuite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Moran
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-08-
|
12
|
+
date: 2015-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|