ncs_mdes_warehouse 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +31 -2
- data/README.md +25 -0
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/drf_therm_verification.rb +1 -1
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment.rb +4 -4
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/env_equipment_prob_log.rb +3 -3
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/prec_therm_cert.rb +2 -2
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/ref_freezer_verification.rb +2 -2
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/sample_receipt_confirm.rb +1 -1
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_equipment.rb +4 -4
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/spec_spsc_info.rb +2 -2
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/srsc_info.rb +2 -2
- data/generated_models/ncs_navigator/warehouse/models/two_point_zero/trh_meter_calibration.rb +1 -1
- data/lib/ncs_navigator/warehouse/database_initializer.rb +112 -31
- data/lib/ncs_navigator/warehouse/table_modeler/mdes_ext.rb +1 -1
- data/lib/ncs_navigator/warehouse/transform_load.rb +15 -9
- data/lib/ncs_navigator/warehouse/transformers/vdr_xml/reader.rb +26 -6
- data/lib/ncs_navigator/warehouse/version.rb +1 -1
- data/lib/ncs_navigator/warehouse/xml_emitter.rb +8 -7
- data/spec/ncs_navigator/warehouse/database_initializer_spec.rb +113 -0
- data/spec/ncs_navigator/warehouse/table_modeler_spec.rb +7 -0
- data/spec/ncs_navigator/warehouse/transform_load_spec.rb +28 -0
- data/spec/ncs_navigator/warehouse/transformers/vdr_xml/made_up_vdr_xml.xml +12 -4
- data/spec/ncs_navigator/warehouse/transformers/vdr_xml/reader_spec.rb +18 -1
- data/spec/ncs_navigator/warehouse/xml_emitter_spec.rb +8 -2
- data/spec/spec_helper.rb +2 -1
- 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("
|
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
|
-
|
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
|
-
|
107
|
-
if
|
108
|
-
|
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)
|
@@ -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
|
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
|
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
|
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.
|
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.
|
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
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70266978643600
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: ncs_navigator_configuration
|
27
|
-
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: *
|
35
|
+
version_requirements: *70266978643100
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
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: *
|
46
|
+
version_requirements: *70266978642640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: i18n
|
49
|
-
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: *
|
57
|
+
version_requirements: *70266978642180
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: thor
|
60
|
-
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: *
|
68
|
+
version_requirements: *70266978641720
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubyzip
|
71
|
-
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: *
|
79
|
+
version_requirements: *70266978641260
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: childprocess
|
82
|
-
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: *
|
90
|
+
version_requirements: *70266978640800
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: json
|
93
|
-
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: *
|
101
|
+
version_requirements: *70266978640340
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: nokogiri
|
104
|
-
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: *
|
112
|
+
version_requirements: *70266978639880
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: builder
|
115
|
-
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: *
|
123
|
+
version_requirements: *70266978639420
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: dm-core
|
126
|
-
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: *
|
134
|
+
version_requirements: *70266978638800
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: dm-constraints
|
137
|
-
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: *
|
145
|
+
version_requirements: *70266978638360
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: dm-migrations
|
148
|
-
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: *
|
156
|
+
version_requirements: *70266974531160
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: dm-transactions
|
159
|
-
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: *
|
167
|
+
version_requirements: *70266974530720
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: dm-validations
|
170
|
-
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: *
|
178
|
+
version_requirements: *70266974530280
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: dm-types
|
181
|
-
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: *
|
189
|
+
version_requirements: *70266974529840
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: dm-aggregates
|
192
|
-
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: *
|
200
|
+
version_requirements: *70266974529400
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: dm-postgres-adapter
|
203
|
-
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: *
|
211
|
+
version_requirements: *70266974528960
|
212
212
|
- !ruby/object:Gem::Dependency
|
213
213
|
name: bcdatabase
|
214
|
-
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: *
|
222
|
+
version_requirements: *70266974528500
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: rspec
|
225
|
-
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: *
|
233
|
+
version_requirements: *70266974528040
|
234
234
|
- !ruby/object:Gem::Dependency
|
235
235
|
name: rake
|
236
|
-
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: *
|
244
|
+
version_requirements: *70266974527580
|
245
245
|
- !ruby/object:Gem::Dependency
|
246
246
|
name: yard
|
247
|
-
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: *
|
255
|
+
version_requirements: *70266974527120
|
256
256
|
- !ruby/object:Gem::Dependency
|
257
257
|
name: ci_reporter
|
258
|
-
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: *
|
266
|
+
version_requirements: *70266974526660
|
267
267
|
- !ruby/object:Gem::Dependency
|
268
268
|
name: fakefs
|
269
|
-
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: *
|
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.
|
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
|