netsuite_rails 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|