ncs_mdes_warehouse 0.3.2 → 0.4.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.
Files changed (26) hide show
  1. data/CHANGELOG.md +31 -2
  2. data/README.md +25 -0
  3. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/drf_therm_verification.rb +1 -1
  4. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment.rb +4 -4
  5. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment_prob_log.rb +3 -3
  6. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/prec_therm_cert.rb +2 -2
  7. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ref_freezer_verification.rb +2 -2
  8. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_confirm.rb +1 -1
  9. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_equipment.rb +4 -4
  10. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_spsc_info.rb +2 -2
  11. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/srsc_info.rb +2 -2
  12. data/generated_models/ncs_navigator/warehouse/models/two_point_zero/trh_meter_calibration.rb +1 -1
  13. data/lib/ncs_navigator/warehouse/database_initializer.rb +112 -31
  14. data/lib/ncs_navigator/warehouse/table_modeler/mdes_ext.rb +1 -1
  15. data/lib/ncs_navigator/warehouse/transform_load.rb +15 -9
  16. data/lib/ncs_navigator/warehouse/transformers/vdr_xml/reader.rb +26 -6
  17. data/lib/ncs_navigator/warehouse/version.rb +1 -1
  18. data/lib/ncs_navigator/warehouse/xml_emitter.rb +8 -7
  19. data/spec/ncs_navigator/warehouse/database_initializer_spec.rb +113 -0
  20. data/spec/ncs_navigator/warehouse/table_modeler_spec.rb +7 -0
  21. data/spec/ncs_navigator/warehouse/transform_load_spec.rb +28 -0
  22. data/spec/ncs_navigator/warehouse/transformers/vdr_xml/made_up_vdr_xml.xml +12 -4
  23. data/spec/ncs_navigator/warehouse/transformers/vdr_xml/reader_spec.rb +18 -1
  24. data/spec/ncs_navigator/warehouse/xml_emitter_spec.rb +8 -2
  25. data/spec/spec_helper.rb +2 -1
  26. metadata +53 -51
@@ -17,6 +17,13 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
17
17
 
18
18
  def_delegator :@configuration, :shell
19
19
 
20
+ ##
21
+ # These code values indicate missing or unknown data.
22
+ # If one of them appears in a nullable, non-coded field, we will
23
+ # skip it. Similarly, if a record's PK is one of these values, we
24
+ # will skip the entire record.
25
+ MISSING_CODES = %w(-3 -4 -6 -7)
26
+
20
27
  ##
21
28
  # @return [Fixnum] the number of records that have been read so far.
22
29
  attr_reader :record_count
@@ -42,7 +49,7 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
42
49
  # @yield a series of model instances
43
50
  # @return [void]
44
51
  def each(&block)
45
- shell.say_line("Beginning VDR XML read#{" of #{filename}" if filename}")
52
+ shell.say_line("Reading VDR XML #{filename if filename}")
46
53
  @start = Time.now
47
54
 
48
55
  Nokogiri::XML::Reader(@io).each do |node|
@@ -69,7 +76,10 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
69
76
  elsif @current_model_class
70
77
  if !is_open && node.local_name == @current_model_class.mdes_table_name
71
78
  # on the way out of this record
72
- yield build_current_instance
79
+ rec = build_current_instance
80
+ unless MISSING_CODES.include?(rec.key.first)
81
+ yield rec
82
+ end
73
83
  @current_model_class = nil
74
84
  @record_count += 1
75
85
  shell.clear_line_then_say('%6d records (%3.1f per second); up to %s' %
@@ -103,12 +113,22 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
103
113
 
104
114
  def should_filter_out(model_class, variable_name, value)
105
115
  return true if variable_name == :transaction_type
106
- # if it's a key to another table...
107
- if @current_model_class.relationships.detect { |r| r.child_key.collect(&:name).include?(variable_name) }
108
- # ...and it is unknown or empty
109
- return value == '-3' || value.strip.empty?
116
+
117
+ if is_foreign_key_in_current_model?(variable_name)
118
+ return MISSING_CODES.include?(value) || value.strip.empty?
110
119
  end
120
+
121
+ property = @current_model_class.properties.find { |p| p.name == variable_name }
122
+ unless property.required? || property.options[:set]
123
+ return MISSING_CODES.include?(value)
124
+ end
125
+ end
126
+
127
+ def is_foreign_key_in_current_model?(variable_name)
128
+ @current_model_class.relationships.
129
+ detect { |r| r.child_key.collect(&:name).include?(variable_name) }
111
130
  end
131
+ private :is_foreign_key_in_current_model?
112
132
 
113
133
  def build_current_instance
114
134
  @current_model_class.new(@current_parameter_values)
@@ -1,5 +1,5 @@
1
1
  module NcsNavigator
2
2
  module Warehouse
3
- VERSION = '0.3.2'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -58,8 +58,8 @@ XML
58
58
  ##
59
59
  # @param configuration [Configuration]
60
60
  # @return [Pathname] the default filename to use for a VDR XML
61
- # submission. The format is `{county}-{YYYYMMDD}.xml`.
62
- def self.default_filename(configuration)
61
+ # submission. The format is `{county}-{YYYYMMDD}{-PII}.xml`.
62
+ def self.default_filename(configuration, include_pii=false)
63
63
  psu_type = configuration.mdes.types.detect { |type| type.name =~ /^psu_cl/ }
64
64
  unless psu_type
65
65
  fail 'Cannot find the PSU code list. Please specify a filename manually.'
@@ -71,9 +71,10 @@ XML
71
71
  fail "Cannot find PSU #{psu_id} in #{psu_type.name}. Please specify a filename manually."
72
72
  end
73
73
 
74
- Pathname.new '%s-%s.xml' % [
74
+ Pathname.new '%s-%s%s.xml' % [
75
75
  psu_entry.label.split(',', 2).first.downcase.gsub(/\s*county\s*/, '').strip.gsub(' ', '_'),
76
- Time.now.iso8601.split('T').first.gsub('-', '')
76
+ Time.now.iso8601.split('T').first.gsub('-', ''),
77
+ include_pii ? '-PII' : ''
77
78
  ]
78
79
  end
79
80
 
@@ -98,18 +99,18 @@ XML
98
99
  # produced alongside the XML file?
99
100
  def initialize(config, filename, options={})
100
101
  @configuration = config
102
+ @include_pii = options[:'include-pii']
101
103
  @filename = case filename
102
104
  when Pathname
103
105
  filename
104
106
  when nil
105
- self.class.default_filename(configuration)
107
+ self.class.default_filename(configuration, @include_pii)
106
108
  else
107
109
  Pathname.new(filename.to_s)
108
110
  end
109
111
  @record_count = 0
110
112
  @block_size = options[:'block-size'] || 5000
111
113
  @zip = options.has_key?(:zip) ? options[:zip] : true
112
- @include_pii = options[:'include-pii']
113
114
  @models =
114
115
  if options[:tables]
115
116
  options[:tables].collect { |t| t.to_s }.collect { |t|
@@ -125,7 +126,7 @@ XML
125
126
  #
126
127
  # @return [void]
127
128
  def emit_xml
128
- shell.say_line("Exporting to #{filename}")
129
+ shell.say_line("Exporting to #{filename}#{include_pii? ? ' with PII' : ''}")
129
130
  log.info("Beginning XML export to #{filename}")
130
131
 
131
132
  @start = Time.now
@@ -0,0 +1,113 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ module NcsNavigator::Warehouse
4
+ describe DatabaseInitializer do
5
+ describe '#replace_schema', :slow, :use_mdes do
6
+ subject { DatabaseInitializer.new(spec_config) }
7
+ let(:mdes_models) { spec_config.models_module.mdes_order }
8
+ let(:mdes_table_names) { mdes_models.collect(&:mdes_table_name) }
9
+
10
+ before do
11
+ subject.set_up_repository(:both)
12
+ end
13
+
14
+ def table_names(schema)
15
+ ::DataMapper.repository("mdes_warehouse_#{schema}").adapter.select(
16
+ "SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
17
+ end
18
+
19
+ it 'does not touch the reporting repository' do
20
+ subject.drop_all(:reporting) # just to make sure
21
+ subject.replace_schema
22
+ table_names(:reporting).should == []
23
+ end
24
+
25
+ it 'creates all the MDES model tables' do
26
+ subject.replace_schema
27
+ (mdes_table_names - table_names(:working)).
28
+ should == []
29
+ end
30
+
31
+ it 'creates the ancillary warehouse information tables' do
32
+ subject.replace_schema
33
+ table_names(:working).select { |n| n =~ /^wh_/ }.size.should == 2
34
+ end
35
+
36
+ describe 'with foreign keys' do
37
+ let(:foreign_keys) {
38
+ ::DataMapper.repository(:mdes_warehouse_working).adapter.select(
39
+ %q{
40
+ SELECT constraint_name, is_deferrable
41
+ FROM information_schema.table_constraints
42
+ WHERE constraint_schema='public'
43
+ AND constraint_type='FOREIGN KEY'
44
+ })
45
+ }
46
+
47
+ before do
48
+ subject.replace_schema
49
+ end
50
+
51
+ it 'creates them' do
52
+ foreign_keys.should_not == []
53
+ end
54
+
55
+ it 'flags them as deferrable' do
56
+ foreign_keys.collect(&:is_deferrable).uniq.should == %w(YES)
57
+ end
58
+ end
59
+
60
+ describe 'including no-pii views' do
61
+ def select_from_working(sql)
62
+ ::DataMapper.repository(:mdes_warehouse_working).adapter.select(sql)
63
+ end
64
+
65
+ let(:pii_variables) {
66
+ spec_config.mdes.transmission_tables.collect { |t|
67
+ t.variables.reject { |v| v.pii.blank? }.collect { |v| [t.name, v.name].join('.') }
68
+ }.flatten.sort
69
+ }
70
+
71
+ let(:nonpii_variables) {
72
+ spec_config.mdes.transmission_tables.collect { |t|
73
+ t.variables.select { |v| v.pii.blank? }.
74
+ reject { |v| v.name == 'transaction_type' }.
75
+ collect { |v| [t.name, v.name].join('.') }
76
+ }.flatten.sort
77
+ }
78
+
79
+ let(:no_pii_views) {
80
+ select_from_working(%q{
81
+ SELECT table_name
82
+ FROM information_schema.views
83
+ WHERE table_schema='no_pii'
84
+ })
85
+ }
86
+
87
+ let(:no_pii_view_column_usage) {
88
+ select_from_working(%q(
89
+ SELECT table_name || '.' || column_name
90
+ FROM information_schema.view_column_usage
91
+ WHERE view_schema='no_pii' AND table_schema='public'
92
+ )).uniq.sort
93
+ }
94
+
95
+ before do
96
+ subject.replace_schema
97
+ end
98
+
99
+ it 'creates a no-pii view for every table' do
100
+ (mdes_table_names - no_pii_views).should == []
101
+ end
102
+
103
+ it 'does not include values for any PII variables in the views' do
104
+ (pii_variables & no_pii_view_column_usage).should == []
105
+ end
106
+
107
+ it 'does include values for all non-PII variables in the views' do
108
+ (nonpii_variables - no_pii_view_column_usage).should == []
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -353,6 +353,13 @@ end
353
353
  model_property.pii.should == :possible
354
354
  end
355
355
 
356
+ it 'ignores blank PII values' do
357
+ variable.pii = ' '
358
+ subject.load!
359
+
360
+ model_property.pii.should be_nil
361
+ end
362
+
356
363
  it 'preserves the omittableness' do
357
364
  variable.omittable = true
358
365
  subject.load!
@@ -134,6 +134,34 @@ module NcsNavigator::Warehouse
134
134
  end
135
135
  end
136
136
 
137
+ describe 'with an integrity error on transaction commit' do
138
+ let(:runs) { [] }
139
+
140
+ before do
141
+ config.add_transformer(BlockTransformer.new { |s| runs << 'A' })
142
+ config.add_transformer(BlockTransformer.new { |s| runs << 'B' })
143
+ config.add_transformer(BlockTransformer.new { |s| runs << 'C3' })
144
+
145
+ TransformStatus.should_receive(:transaction).ordered.and_yield
146
+ TransformStatus.should_receive(:transaction).ordered.
147
+ and_raise(DataObjects::IntegrityError.new('Foo'))
148
+ TransformStatus.should_receive(:transaction).ordered.and_yield
149
+
150
+ loader.run
151
+ end
152
+
153
+ it 'records a TransformError' do
154
+ TransformStatus.all[1].transform_errors.first.message.
155
+ should =~ /^Transform failed with data integrity error: Foo/
156
+ end
157
+
158
+ it 'still runs all the transformers' do
159
+ # this is not A B C3 due to a limitation in rspec-mocks --
160
+ # you apparently can't .and_yield.and_raise and have both apply.
161
+ runs.should == %w(A C3)
162
+ end
163
+ end
164
+
137
165
  describe 'sending e-mail' do
138
166
  it 'sends on success'
139
167
 
@@ -10,7 +10,7 @@
10
10
  <study_center>
11
11
  <sc_id>20000029</sc_id>
12
12
  <sc_name>Northwestern University</sc_name>
13
- <comments>NA</comments>
13
+ <comments>-7</comments>
14
14
  <transaction_type>NA</transaction_type>
15
15
  </study_center>
16
16
 
@@ -30,13 +30,21 @@
30
30
  <transaction_type>NA</transaction_type>
31
31
  </ssu>
32
32
 
33
+ <ssu>
34
+ <sc_id>20000029</sc_id>
35
+ <psu_id>20000030</psu_id>
36
+ <ssu_id>-7</ssu_id>
37
+ <ssu_name>-7</ssu_name>
38
+ <transaction_type>NA</transaction_type>
39
+ </ssu>
40
+
33
41
  <listing_unit>
34
42
  <psu_id>20000030</psu_id>
35
43
  <list_id>100</list_id>
36
44
  <ssu_id>13.1</ssu_id>
37
45
  <tsu_id>-7</tsu_id>
38
- <list_line random_attr='foo'>-7</list_line>
39
- <list_source>3</list_source>
46
+ <list_line>-7</list_line>
47
+ <list_source random_attr='foo'>3</list_source>
40
48
  <list_comment>NA</list_comment>
41
49
  <transaction_type>NA</transaction_type>
42
50
  </listing_unit>
@@ -51,7 +59,7 @@
51
59
  <maiden_name></maiden_name>
52
60
  <suffix>-7</suffix>
53
61
  <title>-7</title>
54
- <sex>2</sex>
62
+ <sex>-6</sex>
55
63
  <age>49</age>
56
64
  <age_range>5</age_range>
57
65
  <person_dob>1962-01-01</person_dob>
@@ -9,6 +9,7 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
9
9
  let(:person) { reader.detect { |rec| rec.class.name =~ /Person$/ } }
10
10
  let(:link_contact) { reader.detect { |rec| rec.class.name =~ /LinkContact$/ } }
11
11
  let(:listing_unit) { reader.detect { |rec| rec.class.name =~ /ListingUnit$/ } }
12
+ let(:study_center) { reader.detect { |rec| rec.class.name =~ /StudyCenter$/ } }
12
13
  let(:email) { reader.detect { |rec| rec.class.name =~ /Email$/ } }
13
14
 
14
15
  it 'verifies the PSU matches the configuration'
@@ -31,8 +32,24 @@ class NcsNavigator::Warehouse::Transformers::VdrXml
31
32
  person.new_address_id.should be_nil
32
33
  end
33
34
 
35
+ it 'converts a -7 FK to no assocation' do
36
+ listing_unit.tsu_id.should be_nil
37
+ end
38
+
34
39
  it 'ignores random attributes' do
35
- listing_unit.list_line.should == "-7"
40
+ listing_unit.list_source.should == "3"
41
+ end
42
+
43
+ it 'converts an "unknown" code in a text field to no value' do
44
+ study_center.comments.should be_nil
45
+ end
46
+
47
+ it 'leaves alone "unknown" codes in coded fields' do
48
+ person.sex.should == "-6"
49
+ end
50
+
51
+ it 'completely ignores records whose key is an "unknown" code' do
52
+ reader.select { |rec| rec.class.name =~ /Ssu$/ }.collect(&:key).should == [['13']]
36
53
  end
37
54
 
38
55
  describe 'with a blank variable value' do
@@ -228,7 +228,8 @@ module NcsNavigator::Warehouse
228
228
  end
229
229
 
230
230
  describe 'the default filename', :slow, :use_mdes do
231
- subject { XmlEmitter.new(spec_config, nil).filename }
231
+ subject { XmlEmitter.new(spec_config, nil, options).filename }
232
+ let(:options) { { } }
232
233
 
233
234
  before do
234
235
  pending "ncs_mdes doesn't work on JRuby" if RUBY_PLATFORM == 'java'
@@ -239,13 +240,18 @@ module NcsNavigator::Warehouse
239
240
  # Time.parse uses Time.now internally, so this needs to be
240
241
  # defined before starting to register the mock.
241
242
  t = Time.parse('2011-07-28')
242
- Time.should_receive(:now).and_return(t)
243
+ Time.stub!(:now).and_return(t)
243
244
  end
244
245
 
245
246
  it 'is county_name-DATE.xml' do
246
247
  subject.to_s.should == 'bear_lake-20110728.xml'
247
248
  end
248
249
 
250
+ it 'is county_name-DATE-PII.xml when PII is included' do
251
+ options[:'include-pii'] = true
252
+ subject.to_s.should == 'bear_lake-20110728-PII.xml'
253
+ end
254
+
249
255
  it 'is a Pathname' do
250
256
  subject.should be_a Pathname
251
257
  end
@@ -78,9 +78,10 @@ RSpec.configure do |config|
78
78
  end
79
79
 
80
80
  config.after(:each, :use_database) do
81
+ DataMapper.repository.adapter.execute("SET client_min_messages = warning")
81
82
  ::DataMapper::Model.descendants.each do |model|
82
83
  begin
83
- DataMapper.repository.adapter.execute("TRUNCATE TABLE #{model.storage_name}")
84
+ DataMapper.repository.adapter.execute("TRUNCATE TABLE #{model.storage_name} CASCADE")
84
85
  rescue DataObjects::SyntaxError
85
86
  # table was never created
86
87
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncs_mdes_warehouse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-03 00:00:00.000000000Z
12
+ date: 2012-02-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ncs_mdes
16
- requirement: &2152198740 !ruby/object:Gem::Requirement
16
+ requirement: &70266978643600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.5'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152198740
24
+ version_requirements: *70266978643600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: ncs_navigator_configuration
27
- requirement: &2152197440 !ruby/object:Gem::Requirement
27
+ requirement: &70266978643100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.2'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2152197440
35
+ version_requirements: *70266978643100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activesupport
38
- requirement: &2152196400 !ruby/object:Gem::Requirement
38
+ requirement: &70266978642640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2152196400
46
+ version_requirements: *70266978642640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: i18n
49
- requirement: &2152195520 !ruby/object:Gem::Requirement
49
+ requirement: &70266978642180 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0.4'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2152195520
57
+ version_requirements: *70266978642180
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: thor
60
- requirement: &2152194580 !ruby/object:Gem::Requirement
60
+ requirement: &70266978641720 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.14.6
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2152194580
68
+ version_requirements: *70266978641720
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubyzip
71
- requirement: &2152193540 !ruby/object:Gem::Requirement
71
+ requirement: &70266978641260 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.4
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *2152193540
79
+ version_requirements: *70266978641260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: childprocess
82
- requirement: &2152192480 !ruby/object:Gem::Requirement
82
+ requirement: &70266978640800 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 0.2.3
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *2152192480
90
+ version_requirements: *70266978640800
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: json
93
- requirement: &2152191600 !ruby/object:Gem::Requirement
93
+ requirement: &70266978640340 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '1.6'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *2152191600
101
+ version_requirements: *70266978640340
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: nokogiri
104
- requirement: &2152190680 !ruby/object:Gem::Requirement
104
+ requirement: &70266978639880 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 1.5.0
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *2152190680
112
+ version_requirements: *70266978639880
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: builder
115
- requirement: &2152189820 !ruby/object:Gem::Requirement
115
+ requirement: &70266978639420 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 2.1.2
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *2152189820
123
+ version_requirements: *70266978639420
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: dm-core
126
- requirement: &2152188600 !ruby/object:Gem::Requirement
126
+ requirement: &70266978638800 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 1.2.0
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *2152188600
134
+ version_requirements: *70266978638800
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: dm-constraints
137
- requirement: &2152187620 !ruby/object:Gem::Requirement
137
+ requirement: &70266978638360 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 1.2.0
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *2152187620
145
+ version_requirements: *70266978638360
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: dm-migrations
148
- requirement: &2152186720 !ruby/object:Gem::Requirement
148
+ requirement: &70266974531160 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ~>
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 1.2.0
154
154
  type: :runtime
155
155
  prerelease: false
156
- version_requirements: *2152186720
156
+ version_requirements: *70266974531160
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: dm-transactions
159
- requirement: &2152185700 !ruby/object:Gem::Requirement
159
+ requirement: &70266974530720 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ~>
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 1.2.0
165
165
  type: :runtime
166
166
  prerelease: false
167
- version_requirements: *2152185700
167
+ version_requirements: *70266974530720
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: dm-validations
170
- requirement: &2152184580 !ruby/object:Gem::Requirement
170
+ requirement: &70266974530280 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: 1.2.0
176
176
  type: :runtime
177
177
  prerelease: false
178
- version_requirements: *2152184580
178
+ version_requirements: *70266974530280
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: dm-types
181
- requirement: &2152183640 !ruby/object:Gem::Requirement
181
+ requirement: &70266974529840 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ~>
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: 1.2.0
187
187
  type: :runtime
188
188
  prerelease: false
189
- version_requirements: *2152183640
189
+ version_requirements: *70266974529840
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: dm-aggregates
192
- requirement: &2152182340 !ruby/object:Gem::Requirement
192
+ requirement: &70266974529400 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ~>
@@ -197,10 +197,10 @@ dependencies:
197
197
  version: 1.2.0
198
198
  type: :runtime
199
199
  prerelease: false
200
- version_requirements: *2152182340
200
+ version_requirements: *70266974529400
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: dm-postgres-adapter
203
- requirement: &2152181640 !ruby/object:Gem::Requirement
203
+ requirement: &70266974528960 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
206
206
  - - ~>
@@ -208,10 +208,10 @@ dependencies:
208
208
  version: 1.2.0
209
209
  type: :runtime
210
210
  prerelease: false
211
- version_requirements: *2152181640
211
+ version_requirements: *70266974528960
212
212
  - !ruby/object:Gem::Dependency
213
213
  name: bcdatabase
214
- requirement: &2152180900 !ruby/object:Gem::Requirement
214
+ requirement: &70266974528500 !ruby/object:Gem::Requirement
215
215
  none: false
216
216
  requirements:
217
217
  - - ~>
@@ -219,10 +219,10 @@ dependencies:
219
219
  version: '1.1'
220
220
  type: :runtime
221
221
  prerelease: false
222
- version_requirements: *2152180900
222
+ version_requirements: *70266974528500
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: rspec
225
- requirement: &2152180100 !ruby/object:Gem::Requirement
225
+ requirement: &70266974528040 !ruby/object:Gem::Requirement
226
226
  none: false
227
227
  requirements:
228
228
  - - ~>
@@ -230,10 +230,10 @@ dependencies:
230
230
  version: '2.6'
231
231
  type: :development
232
232
  prerelease: false
233
- version_requirements: *2152180100
233
+ version_requirements: *70266974528040
234
234
  - !ruby/object:Gem::Dependency
235
235
  name: rake
236
- requirement: &2152179300 !ruby/object:Gem::Requirement
236
+ requirement: &70266974527580 !ruby/object:Gem::Requirement
237
237
  none: false
238
238
  requirements:
239
239
  - - ~>
@@ -241,10 +241,10 @@ dependencies:
241
241
  version: 0.9.2
242
242
  type: :development
243
243
  prerelease: false
244
- version_requirements: *2152179300
244
+ version_requirements: *70266974527580
245
245
  - !ruby/object:Gem::Dependency
246
246
  name: yard
247
- requirement: &2152178340 !ruby/object:Gem::Requirement
247
+ requirement: &70266974527120 !ruby/object:Gem::Requirement
248
248
  none: false
249
249
  requirements:
250
250
  - - ~>
@@ -252,10 +252,10 @@ dependencies:
252
252
  version: 0.7.2
253
253
  type: :development
254
254
  prerelease: false
255
- version_requirements: *2152178340
255
+ version_requirements: *70266974527120
256
256
  - !ruby/object:Gem::Dependency
257
257
  name: ci_reporter
258
- requirement: &2152177500 !ruby/object:Gem::Requirement
258
+ requirement: &70266974526660 !ruby/object:Gem::Requirement
259
259
  none: false
260
260
  requirements:
261
261
  - - =
@@ -263,10 +263,10 @@ dependencies:
263
263
  version: 1.6.6
264
264
  type: :development
265
265
  prerelease: false
266
- version_requirements: *2152177500
266
+ version_requirements: *70266974526660
267
267
  - !ruby/object:Gem::Dependency
268
268
  name: fakefs
269
- requirement: &2152176600 !ruby/object:Gem::Requirement
269
+ requirement: &70266974526200 !ruby/object:Gem::Requirement
270
270
  none: false
271
271
  requirements:
272
272
  - - ~>
@@ -274,7 +274,7 @@ dependencies:
274
274
  version: 0.4.0
275
275
  type: :development
276
276
  prerelease: false
277
- version_requirements: *2152176600
277
+ version_requirements: *70266974526200
278
278
  description:
279
279
  email:
280
280
  - r-sutphin@northwestern.edu
@@ -596,6 +596,7 @@ files:
596
596
  - spec/navigator.ini
597
597
  - spec/ncs_navigator/warehouse/configuration_spec.rb
598
598
  - spec/ncs_navigator/warehouse/data_mapper_spec.rb
599
+ - spec/ncs_navigator/warehouse/database_initializer_spec.rb
599
600
  - spec/ncs_navigator/warehouse/models/mdes_model_spec.rb
600
601
  - spec/ncs_navigator/warehouse/postgresql/pgpass_spec.rb
601
602
  - spec/ncs_navigator/warehouse/table_modeler_spec.rb
@@ -633,7 +634,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
633
634
  version: '0'
634
635
  requirements: []
635
636
  rubyforge_project:
636
- rubygems_version: 1.8.10
637
+ rubygems_version: 1.8.15
637
638
  signing_key:
638
639
  specification_version: 3
639
640
  summary: Scripts and models for building and maintaining the MDES-based reporting
@@ -646,6 +647,7 @@ test_files:
646
647
  - spec/navigator.ini
647
648
  - spec/ncs_navigator/warehouse/configuration_spec.rb
648
649
  - spec/ncs_navigator/warehouse/data_mapper_spec.rb
650
+ - spec/ncs_navigator/warehouse/database_initializer_spec.rb
649
651
  - spec/ncs_navigator/warehouse/models/mdes_model_spec.rb
650
652
  - spec/ncs_navigator/warehouse/postgresql/pgpass_spec.rb
651
653
  - spec/ncs_navigator/warehouse/table_modeler_spec.rb