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.
- 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
|