remi 0.2.36 → 0.2.37

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b43c0f454a9c3df185534347b76d5d7ac0a37c4
4
- data.tar.gz: 024381d3a8b2da98b1de66fddd14c0929a304d3d
3
+ metadata.gz: 4053acf8d3794062479455dd42afc7d3820832b5
4
+ data.tar.gz: 363985988b27cda161515842f3469d8b34487904
5
5
  SHA512:
6
- metadata.gz: bc680e8048b300f645c013a3f261506b6c4e1efdef0f240f37eebb0d393f2cc948de06d53d1d3912122011ba8d2755ac8e851c6399af79c13d68b467389a1118
7
- data.tar.gz: cb5f72b9db98cdf7b79fcaee6a1597e9259b805779b93655ba0738b5e8a14240a0e57cc6078b92cdc2c414f21eb3af034eb78a185e974f3c28707667ea80f792
6
+ metadata.gz: 5882b3ea3e2ee615e7c280108138a5e3cb8f7d30321655191c2973a083e722f974a4250ed40f1aa5f52ee610529b0078051355c160b914feb821e7f652117dff
7
+ data.tar.gz: 6cfff4363a00d7b030a700340da60e1b590432f67ff74e6adc96783b6e14be3078c244f890f8f4a77fddfabc1567d18cb64657375b0a882f51cc8c59a25b574c
data/Gemfile.lock CHANGED
@@ -19,7 +19,7 @@ GIT
19
19
  PATH
20
20
  remote: .
21
21
  specs:
22
- remi (0.2.36)
22
+ remi (0.2.37)
23
23
  activesupport (~> 4.2)
24
24
  bond (~> 0.5)
25
25
  cucumber (~> 2.1)
@@ -0,0 +1,31 @@
1
+ Feature: This tests using json data in tests.
2
+
3
+ Background:
4
+ Given the job is 'Json'
5
+ And the job source 'Source Data'
6
+ And the job target 'Target Data'
7
+ And the source 'Source Data'
8
+ And the target 'Target Data'
9
+
10
+
11
+ Scenario: Using JSON data in an example record.
12
+
13
+ Given the following example record for 'Source Data':
14
+ | json_array | json_hash |
15
+ | [ "one", "two" ] | { "name": "Darwin" } |
16
+
17
+ Then the target field 'second_element' is populated with "two"
18
+ And the target field 'name_field' is populated with "Darwin"
19
+
20
+
21
+ Scenario: Using JSON data in long form
22
+
23
+ Given the source field 'json_hash' has the multiline value
24
+ """
25
+ {
26
+ "id": 97,
27
+ "name": "Darwin",
28
+ "birthday": "1809-02-12"
29
+ }
30
+ """
31
+ And the target field 'name_field' is populated with "Darwin"
@@ -139,16 +139,16 @@ Given /^the source field (?:has|is set to) the value "([^"]*)"$/ do |value|
139
139
  end
140
140
  end
141
141
 
142
- Given /^the source field '([^']+)' (?:has|is set to) the json value$/ do |source_field, value|
142
+ Given /^the source field '([^']+)' (?:has|is set to) the multiline value$/ do |source_field, value|
143
143
  step "the source field '#{source_field}'"
144
144
 
145
145
  source_name, source_field_name = @brt.sources.parse_full_field(source_field)
146
- @brt.sources[source_name].fields[source_field_name].value = JSON.parse(value)
146
+ @brt.sources[source_name].fields[source_field_name].value = Remi::BusinessRules::ParseFormula.parse(value)
147
147
  end
148
148
 
149
- Given /^the source field (?:has|is set to) the json value$/ do |value|
149
+ Given /^the source field (?:has|is set to) the multiline value$/ do |value|
150
150
  @brt.sources.fields.each do |field|
151
- step "the source field '#{field.full_name}' is set to the json value \"#{value}\""
151
+ step "the source field '#{field.full_name}' has the multiline value #{value}"
152
152
  end
153
153
  end
154
154
 
@@ -254,6 +254,8 @@ Then /^the target field is copied from the source field$/ do
254
254
  end
255
255
 
256
256
  Then /^the target field '([^']+)' is (?:set to the value|populated with) "([^"]*)"$/ do |target_field, value|
257
+ value = value.gsub(/(\\n|\\t)/, '\n' => "\n", '\t' => "\t" )
258
+
257
259
  expect_cucumber {
258
260
  target_names, target_field_name = @brt.targets.parse_full_field(target_field, multi: true)
259
261
 
@@ -336,7 +338,7 @@ end
336
338
  ### Transforms
337
339
 
338
340
  Then /^the target field '([^']+)' is a concatenation of the source fields '(.+)', delimited by "([^"]*)"$/ do |target_field, source_field_list, delimiter|
339
- delimiter = delimiter.gsub(/(\\n|\\t)/, '\n' => "\n", '\t' => "t" )
341
+ delimiter = delimiter.gsub(/(\\n|\\t)/, '\n' => "\n", '\t' => "\t" )
340
342
  source_fields = "'#{source_field_list}'".gsub(' and ', ', ').split(',').map do |field_with_quotes|
341
343
  full_field_name = field_with_quotes.match(/'(.+)'/)[1]
342
344
 
data/jobs/json_job.rb ADDED
@@ -0,0 +1,30 @@
1
+ require_relative 'all_jobs_shared'
2
+
3
+ class JsonJob
4
+ include AllJobsShared
5
+
6
+ define_source :source_data, Remi::DataSource::DataFrame,
7
+ fields: {
8
+ :json_array => { type: :json },
9
+ :json_hash => { type: :json }
10
+ }
11
+
12
+ define_target :target_data, Remi::DataTarget::DataFrame,
13
+ fields: {
14
+ :second_element => {},
15
+ :name_field => {}
16
+ }
17
+
18
+ define_transform :main do
19
+ Remi::SourceToTargetMap.apply(source_data.df, target_data.df, source_metadata: source_data.fields) do
20
+ map source(:json_array) .target(:second_element)
21
+ .transform(->(*values) { values[1] })
22
+ # This is NOT the way I would like it to work, but we need to do some work on STTM first
23
+ map source(:json_hash) .target(:name_field)
24
+ .transform(->(*json_hash) { json_hash.to_h['name'] })
25
+ # preferred
26
+ # map source(:json_hash) .target(:name_field)
27
+ # .transform(->(json_hash) { json_hash['name'] })
28
+ end
29
+ end
30
+ end
@@ -293,12 +293,6 @@ module Remi::BusinessRules
293
293
  end
294
294
  end
295
295
 
296
- # For debugging only
297
- def _df
298
- @data_subject.df
299
- end
300
-
301
-
302
296
  # Would like to have this return a new DataSubject and not a dataframe.
303
297
  # Need more robust duping to make that feasible.
304
298
  # Don't use results for anything more than size.
@@ -333,7 +327,13 @@ module Remi::BusinessRules
333
327
  end
334
328
 
335
329
  def example_to_df(example)
336
- example.to_df(@data_subject.df.row[0].to_h, field_symbolizer: @data_subject.field_symbolizer)
330
+ df = example.to_df(@data_subject.df.row[0].to_h, field_symbolizer: @data_subject.field_symbolizer)
331
+ data_subject.fields.each do |vector, metadata|
332
+ if metadata[:type] == :json
333
+ df[vector].recode! { |v| JSON.parse(v) rescue v }
334
+ end
335
+ end
336
+ df
337
337
  end
338
338
 
339
339
  def stub_data_with(example)
@@ -486,7 +486,13 @@ module Remi::BusinessRules
486
486
  end
487
487
 
488
488
  def value=(arg)
489
- vector.recode! { |v| arg }
489
+ typed_arg = if metadata[:type] == :json
490
+ JSON.parse(arg)
491
+ else
492
+ arg
493
+ end
494
+
495
+ vector.recode! { |_v| typed_arg }
490
496
  end
491
497
  end
492
498
 
data/lib/remi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Remi
2
- VERSION = '0.2.36'
2
+ VERSION = '0.2.37'
3
3
  end
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.2.36
4
+ version: 0.2.37
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-06-17 00:00:00.000000000 Z
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bond
@@ -186,6 +186,7 @@ files:
186
186
  - features/csv_file_target_job.feature
187
187
  - features/examples.feature
188
188
  - features/formulas.feature
189
+ - features/json.feature
189
190
  - features/metadata.feature
190
191
  - features/parameters.feature
191
192
  - features/sample_job.feature
@@ -205,6 +206,7 @@ files:
205
206
  - jobs/all_jobs_shared.rb
206
207
  - jobs/copy_source_job.rb
207
208
  - jobs/csv_file_target_job.rb
209
+ - jobs/json_job.rb
208
210
  - jobs/metadata_job.rb
209
211
  - jobs/parameters_job.rb
210
212
  - jobs/sample_job.rb
@@ -289,6 +291,7 @@ test_files:
289
291
  - features/csv_file_target_job.feature
290
292
  - features/examples.feature
291
293
  - features/formulas.feature
294
+ - features/json.feature
292
295
  - features/metadata.feature
293
296
  - features/parameters.feature
294
297
  - features/sample_job.feature