netsuite_rails 0.3.3 → 0.3.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 +4 -4
- data/Gemfile +0 -3
- data/lib/netsuite_rails/record_sync.rb +2 -0
- data/lib/netsuite_rails/record_sync/poll_manager.rb +31 -2
- data/lib/netsuite_rails/sync_trigger.rb +1 -0
- data/lib/netsuite_rails/transformations.rb +5 -2
- data/lib/netsuite_rails/url_helper.rb +2 -0
- data/netsuite_rails.gemspec +1 -1
- data/spec/models/poll_manager_spec.rb +68 -1
- data/spec/models/transformations_spec.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2f2197544aa8884365eda94c0b6d23069430e0e
|
4
|
+
data.tar.gz: 65012b398bc868048b9de452df38820ac102f383
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c486c007a6d97f0633e82a2d37a7b57321de8115e0a99c80331978b86137b649820bc7bd28c17c6223adfaca23ccf11c1df2fcf2cc1dca4f8409362cdce2b6f2
|
7
|
+
data.tar.gz: 87ef0a329e7ed7af87244d1b058dde0f390e5d887628dc200ee0f49c8d79f4aec525c879da73111003ced628549294d35261315adf0c453e0c0d27264b073423
|
data/Gemfile
CHANGED
@@ -60,7 +60,7 @@ module NetSuiteRails
|
|
60
60
|
search_criteria = {
|
61
61
|
criteria: {
|
62
62
|
basic: poll_basic_criteria(klass, opts)
|
63
|
-
}
|
63
|
+
}.merge(poll_join_criteria(klass, opts))
|
64
64
|
}
|
65
65
|
|
66
66
|
if opts[:saved_search_id]
|
@@ -85,7 +85,7 @@ module NetSuiteRails
|
|
85
85
|
}.merge(opts)
|
86
86
|
|
87
87
|
# allow custom criteria to be passed directly to the sync call
|
88
|
-
criteria = opts[:criteria]
|
88
|
+
criteria = extract_basic_search_criteria(opts[:criteria])
|
89
89
|
|
90
90
|
# allow custom criteria from the model level
|
91
91
|
criteria += klass.netsuite_sync_options[:criteria] || []
|
@@ -112,6 +112,35 @@ module NetSuiteRails
|
|
112
112
|
criteria
|
113
113
|
end
|
114
114
|
|
115
|
+
def poll_join_criteria(klass, opts)
|
116
|
+
extract_advanced_search_criteria(opts[:criteria])
|
117
|
+
end
|
118
|
+
|
119
|
+
def extract_advanced_search_criteria(criteria_option)
|
120
|
+
if criteria_option.is_a?(Hash)
|
121
|
+
criteria_option = criteria_option.dup
|
122
|
+
criteria_option.delete(:basic)
|
123
|
+
|
124
|
+
criteria_option
|
125
|
+
elsif criteria_option.is_a?(Array) || criteria_option.nil?
|
126
|
+
{}
|
127
|
+
else
|
128
|
+
# TODO unhandled criteria type
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def extract_basic_search_criteria(criteria_option)
|
133
|
+
# TODO use `kind_of?` instead?
|
134
|
+
|
135
|
+
if criteria_option.is_a?(Hash)
|
136
|
+
criteria_option[:basic] || []
|
137
|
+
elsif criteria_option.is_a?(Array)
|
138
|
+
criteria_option
|
139
|
+
else
|
140
|
+
# TODO unhandled criteria class
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
115
144
|
def process_search_results(klass, opts, search)
|
116
145
|
opts = {
|
117
146
|
skip_existing: false,
|
@@ -79,6 +79,7 @@ module NetSuiteRails
|
|
79
79
|
|
80
80
|
sync_options = local.netsuite_sync_options
|
81
81
|
|
82
|
+
# TODO should migrate to push_if for better self-documentation
|
82
83
|
# :if option is a block that returns a boolean
|
83
84
|
return if sync_options.has_key?(:if) && !local.instance_exec(&sync_options[:if])
|
84
85
|
|
@@ -49,8 +49,11 @@ module NetSuiteRails
|
|
49
49
|
return nil
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
email = email.
|
53
|
+
# an error will be thrown if period is on the end of a sentence
|
54
|
+
gsub(/[^A-Za-z]+$/, '').
|
55
|
+
# any commas in the email with throw an error
|
56
|
+
gsub(',', '')
|
54
57
|
|
55
58
|
email
|
56
59
|
else
|
@@ -62,6 +62,8 @@ module NetSuiteRails
|
|
62
62
|
"/accounting/transactions/transaction.nl?id=#{internal_id}"
|
63
63
|
elsif NetSuite::Records::Account == record_class
|
64
64
|
"/accounting/account/account.nl?id=#{internal_id}"
|
65
|
+
elsif NetSuite::Records::Subsidiary == record_class
|
66
|
+
"/common/otherlists/subsidiarytype.nl?id=#{internal_id}"
|
65
67
|
else
|
66
68
|
# TODO unsupported record type error?
|
67
69
|
end
|
data/netsuite_rails.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "netsuite_rails"
|
7
|
-
s.version = "0.3.
|
7
|
+
s.version = "0.3.4"
|
8
8
|
s.authors = ["Michael Bianco"]
|
9
9
|
s.email = ["mike@cliffsidemedia.com"]
|
10
10
|
s.summary = %q{Write Rails applications that integrate with NetSuite}
|
@@ -22,7 +22,8 @@ describe NetSuiteRails::RecordSync::PollManager do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should poll list sync objects" do
|
25
|
-
allow(NetSuite::Records::CustomList).to receive(:get)
|
25
|
+
allow(NetSuite::Records::CustomList).to receive(:get)
|
26
|
+
.and_return(OpenStruct.new(custom_value_list: OpenStruct.new(custom_value: [])))
|
26
27
|
|
27
28
|
StandardList.netsuite_poll(import_all: true)
|
28
29
|
|
@@ -51,4 +52,70 @@ describe NetSuiteRails::RecordSync::PollManager do
|
|
51
52
|
|
52
53
|
expect(record).to have_received(:netsuite_pull)
|
53
54
|
end
|
55
|
+
|
56
|
+
describe 'custom search criteria' do
|
57
|
+
let(:basic_search_field) do
|
58
|
+
{
|
59
|
+
field: 'type',
|
60
|
+
operator: 'anyOf',
|
61
|
+
value: [ '_itemFulfillment' ]
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:advanced_search_criteria) do
|
66
|
+
{
|
67
|
+
createdFromJoin: [
|
68
|
+
{
|
69
|
+
field: 'type',
|
70
|
+
operator: 'anyOf',
|
71
|
+
value: [ '_transferOrder' ]
|
72
|
+
}
|
73
|
+
]
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should merge basic search criteria' do
|
78
|
+
expect(NetSuite::Records::Customer).to receive(:search)
|
79
|
+
.with(hash_including(
|
80
|
+
criteria: hash_including(
|
81
|
+
basic: array_including(
|
82
|
+
basic_search_field
|
83
|
+
)
|
84
|
+
)
|
85
|
+
))
|
86
|
+
.and_return(OpenStruct.new(results: []))
|
87
|
+
|
88
|
+
NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
|
89
|
+
criteria: [ basic_search_field ]
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'merges advanced and basic criteria' do
|
94
|
+
expect(NetSuite::Records::Customer).to receive(:search)
|
95
|
+
.with(hash_including(
|
96
|
+
criteria: {
|
97
|
+
basic: array_including(
|
98
|
+
basic_search_field
|
99
|
+
)
|
100
|
+
}.merge(advanced_search_criteria)
|
101
|
+
))
|
102
|
+
.and_return(OpenStruct.new(results: []))
|
103
|
+
|
104
|
+
NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
|
105
|
+
criteria: {
|
106
|
+
basic: [ basic_search_field ]
|
107
|
+
}.merge(advanced_search_criteria)
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should merge join/advanced criteria' do
|
112
|
+
expect(NetSuite::Records::Customer).to receive(:search)
|
113
|
+
.with(hash_including(criteria: hash_including(advanced_search_criteria)))
|
114
|
+
.and_return(OpenStruct.new(results: []))
|
115
|
+
|
116
|
+
NetSuiteRails::RecordSync::PollManager.poll(StandardRecord,
|
117
|
+
criteria: advanced_search_criteria
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|
54
121
|
end
|
@@ -58,5 +58,9 @@ describe NetSuiteRails::Transformations do
|
|
58
58
|
netsuite_email = ' example+second@example.family. '
|
59
59
|
transformed_netsuite_email = NetSuiteRails::Transformations.email(netsuite_email, :push)
|
60
60
|
expect(transformed_netsuite_email.to_s).to eq('example+second@example.family')
|
61
|
+
|
62
|
+
netsuite_email = ' example,second@example.com '
|
63
|
+
transformed_netsuite_email = NetSuiteRails::Transformations.email(netsuite_email, :push)
|
64
|
+
expect(transformed_netsuite_email.to_s).to eq('examplesecond@example.com')
|
61
65
|
end
|
62
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netsuite_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Bianco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: netsuite
|