remi 0.2.42 → 0.3.0
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/.yardopts +7 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -26
- data/README.md +1 -1
- data/features/step_definitions/remi_step.rb +33 -13
- data/features/sub_job_example.feature +24 -0
- data/features/sub_transform_example.feature +35 -0
- data/features/sub_transform_many_to_many.feature +49 -0
- data/features/support/env_app.rb +1 -1
- data/jobs/all_jobs_shared.rb +19 -16
- data/jobs/copy_source_job.rb +11 -9
- data/jobs/csv_file_target_job.rb +10 -9
- data/jobs/json_job.rb +18 -14
- data/jobs/metadata_job.rb +33 -28
- data/jobs/parameters_job.rb +14 -11
- data/jobs/sample_job.rb +106 -77
- data/jobs/sftp_file_target_job.rb +14 -13
- data/jobs/sub_job_example_job.rb +86 -0
- data/jobs/sub_transform_example_job.rb +43 -0
- data/jobs/sub_transform_many_to_many_job.rb +46 -0
- data/jobs/transforms/concatenate_job.rb +16 -12
- data/jobs/transforms/data_frame_sieve_job.rb +24 -19
- data/jobs/transforms/date_diff_job.rb +15 -11
- data/jobs/transforms/nvl_job.rb +16 -12
- data/jobs/transforms/parse_date_job.rb +17 -14
- data/jobs/transforms/partitioner_job.rb +27 -19
- data/jobs/transforms/prefix_job.rb +13 -10
- data/jobs/transforms/truncate_job.rb +14 -10
- data/jobs/transforms/truthy_job.rb +11 -8
- data/lib/remi.rb +25 -11
- data/lib/remi/data_frame.rb +4 -4
- data/lib/remi/data_frame/daru.rb +1 -37
- data/lib/remi/data_subject.rb +234 -48
- data/lib/remi/data_subjects/csv_file.rb +171 -0
- data/lib/remi/data_subjects/data_frame.rb +106 -0
- data/lib/remi/data_subjects/file_system.rb +115 -0
- data/lib/remi/data_subjects/local_file.rb +109 -0
- data/lib/remi/data_subjects/none.rb +31 -0
- data/lib/remi/data_subjects/postgres.rb +186 -0
- data/lib/remi/data_subjects/s3_file.rb +84 -0
- data/lib/remi/data_subjects/salesforce.rb +211 -0
- data/lib/remi/data_subjects/sftp_file.rb +196 -0
- data/lib/remi/data_subjects/sub_job.rb +50 -0
- data/lib/remi/dsl.rb +74 -0
- data/lib/remi/encoder.rb +45 -0
- data/lib/remi/extractor.rb +21 -0
- data/lib/remi/field_symbolizers.rb +1 -0
- data/lib/remi/job.rb +279 -113
- data/lib/remi/job/parameters.rb +90 -0
- data/lib/remi/job/sub_job.rb +35 -0
- data/lib/remi/job/transform.rb +165 -0
- data/lib/remi/loader.rb +22 -0
- data/lib/remi/monkeys/daru.rb +4 -0
- data/lib/remi/parser.rb +44 -0
- data/lib/remi/testing/business_rules.rb +17 -23
- data/lib/remi/testing/data_stub.rb +2 -2
- data/lib/remi/version.rb +1 -1
- data/remi.gemspec +3 -0
- data/spec/data_subject_spec.rb +475 -11
- data/spec/data_subjects/csv_file_spec.rb +69 -0
- data/spec/data_subjects/data_frame_spec.rb +52 -0
- data/spec/{extractor → data_subjects}/file_system_spec.rb +0 -0
- data/spec/{extractor → data_subjects}/local_file_spec.rb +0 -0
- data/spec/data_subjects/none_spec.rb +41 -0
- data/spec/data_subjects/postgres_spec.rb +80 -0
- data/spec/{extractor → data_subjects}/s3_file_spec.rb +0 -0
- data/spec/data_subjects/salesforce_spec.rb +117 -0
- data/spec/{extractor → data_subjects}/sftp_file_spec.rb +16 -0
- data/spec/data_subjects/sub_job_spec.rb +33 -0
- data/spec/encoder_spec.rb +38 -0
- data/spec/extractor_spec.rb +11 -0
- data/spec/fixtures/sf_bulk_helper_stubs.rb +443 -0
- data/spec/job/transform_spec.rb +257 -0
- data/spec/job_spec.rb +507 -0
- data/spec/loader_spec.rb +11 -0
- data/spec/parser_spec.rb +38 -0
- data/spec/sf_bulk_helper_spec.rb +117 -0
- data/spec/testing/data_stub_spec.rb +5 -3
- metadata +109 -27
- data/features/aggregate.feature +0 -42
- data/jobs/aggregate_job.rb +0 -31
- data/jobs/transforms/transform_jobs.rb +0 -4
- data/lib/remi/data_subject/csv_file.rb +0 -162
- data/lib/remi/data_subject/data_frame.rb +0 -52
- data/lib/remi/data_subject/postgres.rb +0 -134
- data/lib/remi/data_subject/salesforce.rb +0 -136
- data/lib/remi/data_subject/sftp_file.rb +0 -65
- data/lib/remi/extractor/file_system.rb +0 -92
- data/lib/remi/extractor/local_file.rb +0 -43
- data/lib/remi/extractor/s3_file.rb +0 -57
- data/lib/remi/extractor/sftp_file.rb +0 -83
- data/spec/data_subject/csv_file_spec.rb +0 -79
- data/spec/data_subject/data_frame.rb +0 -27
data/spec/loader_spec.rb
ADDED
data/spec/parser_spec.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'remi_spec'
|
2
|
+
|
3
|
+
describe Remi::Parser do
|
4
|
+
let(:field_symbolizer) { double('field_symbolizer') }
|
5
|
+
let(:context) { double('context') }
|
6
|
+
let(:fields) { double('fields') }
|
7
|
+
let(:parser) { Parser.new(context: context, fields: fields, field_symbolizer: field_symbolizer) }
|
8
|
+
|
9
|
+
context '#parse' do
|
10
|
+
it 'has a parse method' do
|
11
|
+
expect(parser).respond_to? :parse
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context '#field_symbolizer' do
|
16
|
+
it 'can be set in the constructor' do
|
17
|
+
expect(parser.field_symbolizer).to eq field_symbolizer
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'the field_symbolizer defined in the context takes priority' do
|
21
|
+
symbolizer_from_context = double('symbolizer_from_context')
|
22
|
+
allow(context).to receive(:field_symbolizer) { symbolizer_from_context }
|
23
|
+
expect(parser.field_symbolizer).to eq symbolizer_from_context
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context '#fields' do
|
28
|
+
it 'can be set in the constructor' do
|
29
|
+
expect(parser.fields).to eq fields
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'the field_symbolizer defined in the context takes priority' do
|
33
|
+
fields_from_context = double('fields_from_context')
|
34
|
+
allow(context).to receive(:fields) { fields_from_context }
|
35
|
+
expect(parser.fields).to eq fields_from_context
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require_relative 'remi_spec'
|
2
|
+
require 'remi/data_subjects/salesforce'
|
3
|
+
require_relative 'fixtures/sf_bulk_helper_stubs'
|
4
|
+
|
5
|
+
describe Remi::SfBulkHelper do
|
6
|
+
|
7
|
+
describe SfBulkHelper::SfBulkQuery do
|
8
|
+
before do
|
9
|
+
@sf_query = SfBulkHelper::SfBulkQuery.new({}, 'Contact', SfBulkHelperStubs.contact_query)
|
10
|
+
allow(@sf_query).to receive(:send_bulk_operation) { SfBulkHelperStubs.contact_query_raw_result }
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
describe 'info' do
|
15
|
+
it 'contains the bulk job id' do
|
16
|
+
expect(@sf_query.info['id']).to eq SfBulkHelperStubs.contact_query_raw_result['id']
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'contains the query submitted' do
|
20
|
+
expect(@sf_query.info['query']).to eq SfBulkHelperStubs.contact_query
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'collected result' do
|
25
|
+
it 'returns the number of records specified in info' do
|
26
|
+
expect(@sf_query.result.size).to eq @sf_query.info['numberRecordsProcessed'].first.to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'has elements composed of hashes' do
|
30
|
+
expect(@sf_query.result.first).to be_a Hash
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'has hash values that are not arrays' do
|
34
|
+
expect(@sf_query.result.first['Id']).to be_a String
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'as_lookup' do
|
39
|
+
it 'creates a row lookup based on a key' do
|
40
|
+
some_row = @sf_query.result[2]
|
41
|
+
expect(@sf_query.as_lookup(key: 'Id')[some_row['Id']]).to eq some_row
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'with duplicates' do
|
45
|
+
before do
|
46
|
+
allow(@sf_query).to receive(:result) { SfBulkHelperStubs.contact_query_duplicated_result }
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'returns the first record when duplicates are allowed' do
|
50
|
+
first_duplicated_row = @sf_query.result[0]
|
51
|
+
expect(@sf_query.as_lookup(key: 'Student_ID__c', duplicates: true)[first_duplicated_row['Student_ID__c']]).to eq first_duplicated_row
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'raises an error when duplicates are not allowed' do
|
55
|
+
expect { @sf_query.as_lookup(key: 'Student_ID__c') }.to raise_error SfBulkHelper::DupeLookupKeyError
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'can query for realz', skip: 'Skip live test' do
|
61
|
+
sf_client = SfConnection.new
|
62
|
+
q = SfBulkHelper::SfBulkQuery.new(sf_client.client, 'Contact', SfBulkHelperStubs.contact_query)
|
63
|
+
puts JSON.pretty_generate(q.raw_result)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
describe SfBulkHelper::SfBulkUpdate do
|
70
|
+
before do
|
71
|
+
@sf_update = SfBulkHelper::SfBulkUpdate.new({}, 'Contact', SfBulkHelperStubs.contact_update_data, max_attempts: 3)
|
72
|
+
allow(@sf_update).to receive(:send_bulk_operation) { SfBulkHelperStubs.contact_update_raw_result }
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'collected result' do
|
76
|
+
it 'indicates whether each record was successful' do
|
77
|
+
expect(@sf_update.result.map { |r| r.has_key? 'success' }.uniq).to match_array([true])
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'indicates whether each record was created' do
|
81
|
+
expect(@sf_update.result.map { |r| r.has_key? 'created' }.uniq).to match_array([true])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe 'retrying failed records' do
|
86
|
+
context 'when the retry fails' do
|
87
|
+
before do
|
88
|
+
allow(@sf_update).to receive(:send_bulk_operation) { SfBulkHelperStubs.contact_update_with_fail_raw_result }
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'raises an error' do
|
92
|
+
expect { @sf_update.result }.to raise_error(SfBulkHelper::MaxAttemptError)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'includes only the failed records in the retry attempt' do
|
96
|
+
@sf_update.result rescue SfBulkHelper::MaxAttemptError
|
97
|
+
retry_data = @sf_update.instance_eval('@data')
|
98
|
+
expect(retry_data.size).to eq SfBulkHelperStubs.contact_update_with_fail_raw_result['numberRecordsFailed'].first.to_i
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context 'when the retry is successful' do
|
103
|
+
before do
|
104
|
+
allow(@sf_update).to receive(:send_bulk_operation).and_return(
|
105
|
+
SfBulkHelperStubs.contact_update_with_fail_raw_result,
|
106
|
+
SfBulkHelperStubs.contact_update_subsequent_success_raw_result
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'stops retrying after success' do
|
111
|
+
@sf_update.result
|
112
|
+
expect(@sf_update.instance_eval('@attempts[:total]')).to eq 2
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -137,11 +137,13 @@ describe Testing::DataStub do
|
|
137
137
|
|
138
138
|
|
139
139
|
context 'stubbed dataframe data' do
|
140
|
-
let(:stub_tester)
|
141
|
-
|
140
|
+
let(:stub_tester) { StubTester.new }
|
141
|
+
|
142
|
+
before do
|
143
|
+
stub_tester.fields = {
|
142
144
|
my_date: { type: :date, in_format: '%m/%d/%Y' },
|
143
145
|
my_str: {}
|
144
|
-
}
|
146
|
+
}
|
145
147
|
end
|
146
148
|
|
147
149
|
context '#empty_stub_df' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sterling Paramore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bond
|
@@ -164,6 +164,48 @@ dependencies:
|
|
164
164
|
- - '='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 0.2.7
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: yard
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.9'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.9'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: redcarpet
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '3.3'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '3.3'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: github-markup
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.4'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.4'
|
167
209
|
description: Data manipulation and ETL in Ruby
|
168
210
|
email:
|
169
211
|
- sterling.paramore@insidetrack.com
|
@@ -176,13 +218,13 @@ files:
|
|
176
218
|
- ".gitignore"
|
177
219
|
- ".rspec"
|
178
220
|
- ".ruby-version"
|
221
|
+
- ".yardopts"
|
179
222
|
- Gemfile
|
180
223
|
- Gemfile.lock
|
181
224
|
- LICENSE.txt
|
182
225
|
- README.md
|
183
226
|
- bin/remi
|
184
227
|
- doc/install-rbenv-os_x.md
|
185
|
-
- features/aggregate.feature
|
186
228
|
- features/csv_file_target_job.feature
|
187
229
|
- features/examples.feature
|
188
230
|
- features/formulas.feature
|
@@ -192,6 +234,9 @@ files:
|
|
192
234
|
- features/sample_job.feature
|
193
235
|
- features/sftp_file_target_job.feature
|
194
236
|
- features/step_definitions/remi_step.rb
|
237
|
+
- features/sub_job_example.feature
|
238
|
+
- features/sub_transform_example.feature
|
239
|
+
- features/sub_transform_many_to_many.feature
|
195
240
|
- features/support/env.rb
|
196
241
|
- features/support/env_app.rb
|
197
242
|
- features/transforms/concatenate.feature
|
@@ -203,7 +248,6 @@ files:
|
|
203
248
|
- features/transforms/prefix.feature
|
204
249
|
- features/transforms/truncate.feature
|
205
250
|
- features/transforms/truthy.feature
|
206
|
-
- jobs/aggregate_job.rb
|
207
251
|
- jobs/all_jobs_shared.rb
|
208
252
|
- jobs/copy_source_job.rb
|
209
253
|
- jobs/csv_file_target_job.rb
|
@@ -212,6 +256,9 @@ files:
|
|
212
256
|
- jobs/parameters_job.rb
|
213
257
|
- jobs/sample_job.rb
|
214
258
|
- jobs/sftp_file_target_job.rb
|
259
|
+
- jobs/sub_job_example_job.rb
|
260
|
+
- jobs/sub_transform_example_job.rb
|
261
|
+
- jobs/sub_transform_many_to_many_job.rb
|
215
262
|
- jobs/transforms/concatenate_job.rb
|
216
263
|
- jobs/transforms/data_frame_sieve_job.rb
|
217
264
|
- jobs/transforms/date_diff_job.rb
|
@@ -219,7 +266,6 @@ files:
|
|
219
266
|
- jobs/transforms/parse_date_job.rb
|
220
267
|
- jobs/transforms/partitioner_job.rb
|
221
268
|
- jobs/transforms/prefix_job.rb
|
222
|
-
- jobs/transforms/transform_jobs.rb
|
223
269
|
- jobs/transforms/truncate_job.rb
|
224
270
|
- jobs/transforms/truthy_job.rb
|
225
271
|
- lib/remi.rb
|
@@ -228,18 +274,28 @@ files:
|
|
228
274
|
- lib/remi/data_frame.rb
|
229
275
|
- lib/remi/data_frame/daru.rb
|
230
276
|
- lib/remi/data_subject.rb
|
231
|
-
- lib/remi/
|
232
|
-
- lib/remi/
|
233
|
-
- lib/remi/
|
234
|
-
- lib/remi/
|
235
|
-
- lib/remi/
|
236
|
-
- lib/remi/
|
237
|
-
- lib/remi/
|
238
|
-
- lib/remi/
|
239
|
-
- lib/remi/
|
277
|
+
- lib/remi/data_subjects/csv_file.rb
|
278
|
+
- lib/remi/data_subjects/data_frame.rb
|
279
|
+
- lib/remi/data_subjects/file_system.rb
|
280
|
+
- lib/remi/data_subjects/local_file.rb
|
281
|
+
- lib/remi/data_subjects/none.rb
|
282
|
+
- lib/remi/data_subjects/postgres.rb
|
283
|
+
- lib/remi/data_subjects/s3_file.rb
|
284
|
+
- lib/remi/data_subjects/salesforce.rb
|
285
|
+
- lib/remi/data_subjects/sftp_file.rb
|
286
|
+
- lib/remi/data_subjects/sub_job.rb
|
287
|
+
- lib/remi/dsl.rb
|
288
|
+
- lib/remi/encoder.rb
|
289
|
+
- lib/remi/extractor.rb
|
240
290
|
- lib/remi/field_symbolizers.rb
|
241
291
|
- lib/remi/fields.rb
|
242
292
|
- lib/remi/job.rb
|
293
|
+
- lib/remi/job/parameters.rb
|
294
|
+
- lib/remi/job/sub_job.rb
|
295
|
+
- lib/remi/job/transform.rb
|
296
|
+
- lib/remi/loader.rb
|
297
|
+
- lib/remi/monkeys/daru.rb
|
298
|
+
- lib/remi/parser.rb
|
243
299
|
- lib/remi/refinements/symbolizer.rb
|
244
300
|
- lib/remi/settings.rb
|
245
301
|
- lib/remi/sf_bulk_helper.rb
|
@@ -251,19 +307,31 @@ files:
|
|
251
307
|
- lib/remi/transform.rb
|
252
308
|
- lib/remi/version.rb
|
253
309
|
- remi.gemspec
|
254
|
-
- spec/data_subject/csv_file_spec.rb
|
255
|
-
- spec/data_subject/data_frame.rb
|
256
310
|
- spec/data_subject_spec.rb
|
257
|
-
- spec/
|
258
|
-
- spec/
|
259
|
-
- spec/
|
260
|
-
- spec/
|
311
|
+
- spec/data_subjects/csv_file_spec.rb
|
312
|
+
- spec/data_subjects/data_frame_spec.rb
|
313
|
+
- spec/data_subjects/file_system_spec.rb
|
314
|
+
- spec/data_subjects/local_file_spec.rb
|
315
|
+
- spec/data_subjects/none_spec.rb
|
316
|
+
- spec/data_subjects/postgres_spec.rb
|
317
|
+
- spec/data_subjects/s3_file_spec.rb
|
318
|
+
- spec/data_subjects/salesforce_spec.rb
|
319
|
+
- spec/data_subjects/sftp_file_spec.rb
|
320
|
+
- spec/data_subjects/sub_job_spec.rb
|
321
|
+
- spec/encoder_spec.rb
|
322
|
+
- spec/extractor_spec.rb
|
261
323
|
- spec/fields_spec.rb
|
262
324
|
- spec/fixtures/basic.csv
|
263
325
|
- spec/fixtures/basic2.csv
|
326
|
+
- spec/fixtures/sf_bulk_helper_stubs.rb
|
264
327
|
- spec/fixtures/unsupported_escape.csv
|
328
|
+
- spec/job/transform_spec.rb
|
329
|
+
- spec/job_spec.rb
|
330
|
+
- spec/loader_spec.rb
|
265
331
|
- spec/metadata_spec.rb
|
332
|
+
- spec/parser_spec.rb
|
266
333
|
- spec/remi_spec.rb
|
334
|
+
- spec/sf_bulk_helper_spec.rb
|
267
335
|
- spec/source_to_target_map_spec.rb
|
268
336
|
- spec/testing/data_stub_spec.rb
|
269
337
|
- spec/transform_spec.rb
|
@@ -294,7 +362,6 @@ signing_key:
|
|
294
362
|
specification_version: 4
|
295
363
|
summary: Remi (Ruby Extract Map Integrate)
|
296
364
|
test_files:
|
297
|
-
- features/aggregate.feature
|
298
365
|
- features/csv_file_target_job.feature
|
299
366
|
- features/examples.feature
|
300
367
|
- features/formulas.feature
|
@@ -304,6 +371,9 @@ test_files:
|
|
304
371
|
- features/sample_job.feature
|
305
372
|
- features/sftp_file_target_job.feature
|
306
373
|
- features/step_definitions/remi_step.rb
|
374
|
+
- features/sub_job_example.feature
|
375
|
+
- features/sub_transform_example.feature
|
376
|
+
- features/sub_transform_many_to_many.feature
|
307
377
|
- features/support/env.rb
|
308
378
|
- features/support/env_app.rb
|
309
379
|
- features/transforms/concatenate.feature
|
@@ -315,19 +385,31 @@ test_files:
|
|
315
385
|
- features/transforms/prefix.feature
|
316
386
|
- features/transforms/truncate.feature
|
317
387
|
- features/transforms/truthy.feature
|
318
|
-
- spec/data_subject/csv_file_spec.rb
|
319
|
-
- spec/data_subject/data_frame.rb
|
320
388
|
- spec/data_subject_spec.rb
|
321
|
-
- spec/
|
322
|
-
- spec/
|
323
|
-
- spec/
|
324
|
-
- spec/
|
389
|
+
- spec/data_subjects/csv_file_spec.rb
|
390
|
+
- spec/data_subjects/data_frame_spec.rb
|
391
|
+
- spec/data_subjects/file_system_spec.rb
|
392
|
+
- spec/data_subjects/local_file_spec.rb
|
393
|
+
- spec/data_subjects/none_spec.rb
|
394
|
+
- spec/data_subjects/postgres_spec.rb
|
395
|
+
- spec/data_subjects/s3_file_spec.rb
|
396
|
+
- spec/data_subjects/salesforce_spec.rb
|
397
|
+
- spec/data_subjects/sftp_file_spec.rb
|
398
|
+
- spec/data_subjects/sub_job_spec.rb
|
399
|
+
- spec/encoder_spec.rb
|
400
|
+
- spec/extractor_spec.rb
|
325
401
|
- spec/fields_spec.rb
|
326
402
|
- spec/fixtures/basic.csv
|
327
403
|
- spec/fixtures/basic2.csv
|
404
|
+
- spec/fixtures/sf_bulk_helper_stubs.rb
|
328
405
|
- spec/fixtures/unsupported_escape.csv
|
406
|
+
- spec/job/transform_spec.rb
|
407
|
+
- spec/job_spec.rb
|
408
|
+
- spec/loader_spec.rb
|
329
409
|
- spec/metadata_spec.rb
|
410
|
+
- spec/parser_spec.rb
|
330
411
|
- spec/remi_spec.rb
|
412
|
+
- spec/sf_bulk_helper_spec.rb
|
331
413
|
- spec/source_to_target_map_spec.rb
|
332
414
|
- spec/testing/data_stub_spec.rb
|
333
415
|
- spec/transform_spec.rb
|
data/features/aggregate.feature
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
Feature: Tests the aggregate refinement to the Daru library
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given the job is 'Aggregate'
|
5
|
-
And the job source 'Source Data'
|
6
|
-
And the job target 'Target Data'
|
7
|
-
And the job target 'Multigroup Target Data'
|
8
|
-
|
9
|
-
And the source 'Source Data'
|
10
|
-
|
11
|
-
|
12
|
-
Scenario: The aggregator should find the minimum year for each 'Alpha'
|
13
|
-
Given the target 'Target Data'
|
14
|
-
And the following example record for 'Source Data':
|
15
|
-
| Alpha | Beta | Year |
|
16
|
-
| a | aa | 2016 |
|
17
|
-
| a | aa | 2018 |
|
18
|
-
| b | bb | 2016 |
|
19
|
-
| b | bb | 2010 |
|
20
|
-
| a | ab | 2017 |
|
21
|
-
And the following example record called 'expected result':
|
22
|
-
| Alpha | Year |
|
23
|
-
| a | Group a has a minimum value of 2016 |
|
24
|
-
| b | Group b has a minimum value of 2010 |
|
25
|
-
Then the target should match the example 'expected result'
|
26
|
-
|
27
|
-
|
28
|
-
Scenario: The aggregator should find the minimum year for each 'Alpha'
|
29
|
-
Given the target 'Multigroup Target Data'
|
30
|
-
And the following example record for 'Source Data':
|
31
|
-
| Alpha | Beta | Year |
|
32
|
-
| a | aa | 2016 |
|
33
|
-
| a | aa | 2018 |
|
34
|
-
| b | bb | 2016 |
|
35
|
-
| b | bb | 2010 |
|
36
|
-
| a | ab | 2017 |
|
37
|
-
And the following example record called 'expected result':
|
38
|
-
| Alpha | Beta | Year |
|
39
|
-
| a | aa | Group ["a", "aa"] has a minimum value of 2016 |
|
40
|
-
| a | ab | Group ["a", "ab"] has a minimum value of 2017 |
|
41
|
-
| b | bb | Group ["b", "bb"] has a minimum value of 2010 |
|
42
|
-
Then the target should match the example 'expected result'
|