ncs_mdes_warehouse 0.4.1 → 0.5.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 (38) hide show
  1. data/CHANGELOG.md +27 -0
  2. data/Rakefile +2 -2
  3. data/lib/ncs_navigator/warehouse.rb +2 -0
  4. data/lib/ncs_navigator/warehouse/configuration.rb +50 -0
  5. data/lib/ncs_navigator/warehouse/hooks.rb +21 -0
  6. data/lib/ncs_navigator/warehouse/hooks/etl_status_email.rb +88 -0
  7. data/lib/ncs_navigator/warehouse/mailer_templates/etl_status_email/failure_message.text.erb +8 -0
  8. data/lib/ncs_navigator/warehouse/mailer_templates/etl_status_email/success_message.text.erb +7 -0
  9. data/lib/ncs_navigator/warehouse/stringify_trace.rb +31 -0
  10. data/lib/ncs_navigator/warehouse/transform_load.rb +23 -3
  11. data/lib/ncs_navigator/warehouse/transform_status.rb +11 -2
  12. data/lib/ncs_navigator/warehouse/transformers/database.rb +13 -1
  13. data/lib/ncs_navigator/warehouse/transformers/enum_transformer.rb +65 -20
  14. data/lib/ncs_navigator/warehouse/transformers/subprocess_transformer.rb +4 -1
  15. data/lib/ncs_navigator/warehouse/transformers/vdr_xml/reader.rb +8 -0
  16. data/lib/ncs_navigator/warehouse/version.rb +1 -1
  17. data/ncs_mdes_warehouse.gemspec +1 -0
  18. data/spec/navigator.ini +3 -0
  19. data/spec/ncs_navigator/warehouse/configuration_spec.rb +79 -2
  20. data/spec/ncs_navigator/warehouse/data_mapper_spec.rb +1 -1
  21. data/spec/ncs_navigator/warehouse/database_initializer_spec.rb +1 -1
  22. data/spec/ncs_navigator/warehouse/hooks/etl_status_email_spec.rb +126 -0
  23. data/spec/ncs_navigator/warehouse/models/mdes_model_spec.rb +1 -1
  24. data/spec/ncs_navigator/warehouse/postgresql/pgpass_spec.rb +1 -1
  25. data/spec/ncs_navigator/warehouse/stringify_trace_spec.rb +58 -0
  26. data/spec/ncs_navigator/warehouse/table_modeler_spec.rb +1 -1
  27. data/spec/ncs_navigator/warehouse/transform_load_spec.rb +119 -5
  28. data/spec/ncs_navigator/warehouse/transform_status_spec.rb +32 -1
  29. data/spec/ncs_navigator/warehouse/transformers/database_spec.rb +11 -1
  30. data/spec/ncs_navigator/warehouse/transformers/enum_transformer_spec.rb +75 -1
  31. data/spec/ncs_navigator/warehouse/transformers/sampling_units_spec.rb +1 -1
  32. data/spec/ncs_navigator/warehouse/transformers/subprocess_transformer_spec.rb +7 -1
  33. data/spec/ncs_navigator/warehouse/transformers/vdr_xml/reader_spec.rb +14 -3
  34. data/spec/ncs_navigator/warehouse/transformers/vdr_xml_spec.rb +1 -1
  35. data/spec/ncs_navigator/warehouse/xml_emitter_spec.rb +1 -1
  36. data/spec/ncs_navigator/warehouse_spec.rb +1 -1
  37. data/spec/spec_helper.rb +3 -1
  38. metadata +307 -154
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator::Warehouse
4
4
  class SampleRecordishThing
@@ -32,4 +32,35 @@ module NcsNavigator::Warehouse
32
32
  end
33
33
  end
34
34
  end
35
+
36
+ describe TransformError do
37
+ describe '.for_exception' do
38
+ let(:exception) { begin; raise IndexError, 'Pick a different one'; rescue => e; e; end }
39
+ let(:actual) { TransformError.for_exception(exception, 'What is happening?') }
40
+
41
+ it 'provides a message' do
42
+ actual.message.should_not be_nil
43
+ end
44
+
45
+ describe 'the message' do
46
+ let(:message) { actual.message }
47
+
48
+ it 'includes the provided context' do
49
+ message.should =~ /What is happening\?/
50
+ end
51
+
52
+ it 'includes the exception type' do
53
+ message.should =~ /IndexError/
54
+ end
55
+
56
+ it 'includes the exception message' do
57
+ message.should =~ /Pick a different one/
58
+ end
59
+
60
+ it 'includes the stack trace' do
61
+ message.should =~ /#{File.basename(__FILE__)}\:\s*\d+/
62
+ end
63
+ end
64
+ end
65
+ end
35
66
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator::Warehouse::Transformers
4
4
  describe Database do
@@ -277,6 +277,16 @@ module NcsNavigator::Warehouse::Transformers
277
277
  should == 'Elephant graveyard'
278
278
  end
279
279
 
280
+ it 'strips leading and trailing whitespace' do
281
+ model_row(:address_type_other => "\n\t Elephant graveyard\t ").address_type_oth.
282
+ should == 'Elephant graveyard'
283
+ end
284
+
285
+ it 'does not try to strip whitespace when not possible' do
286
+ model_row(:address_id => -7).address_id.should == '-7'
287
+ # expect no errors
288
+ end
289
+
280
290
  describe 'and unused columns' do
281
291
  it 'fails with unused columns if requested' do
282
292
  options[:on_unused] = :fail
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  require 'ncs_navigator/warehouse/data_mapper'
4
4
 
@@ -128,6 +128,80 @@ module NcsNavigator::Warehouse::Transformers
128
128
  # in `before`
129
129
  end
130
130
  end
131
+
132
+ describe 'with an enumeration that throws an exception' do
133
+ let(:failing_enum) {
134
+ Class.new do
135
+ include Enumerable
136
+
137
+ def initialize(records); @records = records; end
138
+
139
+ def each
140
+ @records.each_with_index do |r, i|
141
+ if i == 2
142
+ raise IndexError, "don't like 2"
143
+ else
144
+ yield r
145
+ end
146
+ end
147
+ end
148
+ end.new(records)
149
+ }
150
+
151
+ subject { EnumTransformer.new(config, failing_enum) }
152
+
153
+ let(:error) {
154
+ transform_status.should have(1).transform_errors
155
+ transform_status.transform_errors.first
156
+ }
157
+
158
+ before do
159
+ records.each do |m|
160
+ m.stub!(:valid?).and_return(true)
161
+ m.stub!(:save).and_return(true)
162
+ end
163
+
164
+ subject.transform(transform_status)
165
+ end
166
+
167
+ it 'records the exception type' do
168
+ error.message.should =~ /IndexError/
169
+ end
170
+
171
+ it 'records the exception message' do
172
+ error.message.should =~ /don't like 2/
173
+ end
174
+
175
+ it 'records the stacktrace' do
176
+ error.message.should =~ /#{File.basename(__FILE__)}:\s*\d+/
177
+ end
178
+ end
179
+
180
+ describe 'with an enumeration that yields a transform error' do
181
+ before do
182
+ records.each do |m|
183
+ m.should_receive(:valid?).and_return(true)
184
+ m.should_receive(:save).and_return(true)
185
+ end
186
+
187
+ records[1, 0] = NcsNavigator::Warehouse::TransformError.
188
+ new(:message => 'I give up', :id => -922)
189
+
190
+ subject.transform(transform_status)
191
+ end
192
+
193
+ it 'saves all the good records' do
194
+ # in before
195
+ end
196
+
197
+ it 'associates the error with the status' do
198
+ transform_status.transform_errors.collect(&:message).should == ['I give up']
199
+ end
200
+
201
+ it 'ignores any provided error id' do
202
+ transform_status.transform_errors.first.id.should be_nil
203
+ end
204
+ end
131
205
  end
132
206
  end
133
207
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator::Warehouse::Transformers
4
4
  describe SamplingUnits, :use_mdes, :slow do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator::Warehouse::Transformers
4
4
  describe SubprocessTransformer do
@@ -183,6 +183,7 @@ module NcsNavigator::Warehouse::Transformers
183
183
  before do
184
184
  write_script do |f|
185
185
  f.puts 'echo $SOME_ENV'
186
+ f.puts 'echo $BUNDLE_GEMFILE'
186
187
  end
187
188
 
188
189
  options[:environment] = { 'SOME_ENV' => 'staging' }
@@ -194,6 +195,11 @@ module NcsNavigator::Warehouse::Transformers
194
195
  messages.first.should == 'staging'
195
196
  end
196
197
 
198
+ it 'excludes the parent bundler environment' do
199
+ ENV['BUNDLE_GEMFILE'].should_not be_nil # setup
200
+ messages.last.should == ''
201
+ end
202
+
197
203
  it 'does not monkey with the parent environment' do
198
204
  ENV['SOME_ENV'].should be_nil
199
205
  end
@@ -1,10 +1,21 @@
1
- require File.expand_path('../../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  class NcsNavigator::Warehouse::Transformers::VdrXml
4
4
  describe Reader, :use_mdes do
5
+ let(:filename) { File.expand_path('../made_up_vdr_xml.xml', __FILE__) }
6
+ let(:reader) { Reader.new(spec_config, filename) }
7
+
8
+ describe '#name' do
9
+ it 'includes the filename when present' do
10
+ reader.name.should == "VDR XML #{filename}"
11
+ end
12
+
13
+ it 'includes the IO string rep if no filename' do
14
+ Reader.new(spec_config, StringIO.new).name.should =~ /VDR XML #<StringIO/
15
+ end
16
+ end
17
+
5
18
  describe '#each', :slow do
6
- let(:filename) { File.expand_path('../made_up_vdr_xml.xml', __FILE__) }
7
- let(:reader) { Reader.new(spec_config, filename) }
8
19
  let(:ssu) { reader.detect { |rec| rec.class.name =~ /Ssu$/ } }
9
20
  let(:person) { reader.detect { |rec| rec.class.name =~ /Person$/ } }
10
21
  let(:link_contact) { reader.detect { |rec| rec.class.name =~ /LinkContact$/ } }
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator::Warehouse::Transformers
4
4
  describe VdrXml do
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  require 'zip/zip'
4
4
 
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../spec_helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  module NcsNavigator
4
4
  describe Warehouse, :modifies_warehouse_state do
data/spec/spec_helper.rb CHANGED
@@ -103,7 +103,9 @@ RSpec.configure do |config|
103
103
  ###### tmpdir
104
104
 
105
105
  config.after do
106
- @tmpdir.rmtree if @tmpdir && !ENV['KEEP_TMP']
106
+ # Not sure how the tmpdir could be gone if the instance var is
107
+ # set, but it seems to happen in CI sometimes.
108
+ @tmpdir.rmtree if (@tmpdir && @tmpdir.exist? && !ENV['KEEP_TMP'])
107
109
  end
108
110
 
109
111
  # @return [Pathname] the path to an existing temporary director
metadata CHANGED
@@ -1,288 +1,424 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ncs_mdes_warehouse
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 11
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 0
10
+ version: 0.5.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Rhett Sutphin
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-04-04 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-05-22 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: ncs_mdes
16
- requirement: &70155237337020 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
24
+ requirements:
19
25
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '0.5'
26
+ - !ruby/object:Gem::Version
27
+ hash: 1
28
+ segments:
29
+ - 0
30
+ - 5
31
+ version: "0.5"
22
32
  type: :runtime
23
33
  prerelease: false
24
- version_requirements: *70155237337020
25
- - !ruby/object:Gem::Dependency
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
26
36
  name: ncs_navigator_configuration
27
- requirement: &70155237336520 !ruby/object:Gem::Requirement
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
28
38
  none: false
29
- requirements:
39
+ requirements:
30
40
  - - ~>
31
- - !ruby/object:Gem::Version
32
- version: '0.2'
41
+ - !ruby/object:Gem::Version
42
+ hash: 15
43
+ segments:
44
+ - 0
45
+ - 2
46
+ version: "0.2"
33
47
  type: :runtime
34
48
  prerelease: false
35
- version_requirements: *70155237336520
36
- - !ruby/object:Gem::Dependency
49
+ requirement: *id002
50
+ - !ruby/object:Gem::Dependency
37
51
  name: activesupport
38
- requirement: &70155237336060 !ruby/object:Gem::Requirement
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
39
53
  none: false
40
- requirements:
54
+ requirements:
41
55
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '3.0'
56
+ - !ruby/object:Gem::Version
57
+ hash: 7
58
+ segments:
59
+ - 3
60
+ - 0
61
+ version: "3.0"
44
62
  type: :runtime
45
63
  prerelease: false
46
- version_requirements: *70155237336060
47
- - !ruby/object:Gem::Dependency
64
+ requirement: *id003
65
+ - !ruby/object:Gem::Dependency
48
66
  name: i18n
49
- requirement: &70155237335600 !ruby/object:Gem::Requirement
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
50
68
  none: false
51
- requirements:
69
+ requirements:
52
70
  - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '0.4'
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ - 4
76
+ version: "0.4"
55
77
  type: :runtime
56
78
  prerelease: false
57
- version_requirements: *70155237335600
58
- - !ruby/object:Gem::Dependency
79
+ requirement: *id004
80
+ - !ruby/object:Gem::Dependency
59
81
  name: thor
60
- requirement: &70155237335140 !ruby/object:Gem::Requirement
82
+ version_requirements: &id005 !ruby/object:Gem::Requirement
61
83
  none: false
62
- requirements:
84
+ requirements:
63
85
  - - ~>
64
- - !ruby/object:Gem::Version
86
+ - !ruby/object:Gem::Version
87
+ hash: 43
88
+ segments:
89
+ - 0
90
+ - 14
91
+ - 6
65
92
  version: 0.14.6
66
93
  type: :runtime
67
94
  prerelease: false
68
- version_requirements: *70155237335140
69
- - !ruby/object:Gem::Dependency
95
+ requirement: *id005
96
+ - !ruby/object:Gem::Dependency
70
97
  name: rubyzip
71
- requirement: &70155237334680 !ruby/object:Gem::Requirement
98
+ version_requirements: &id006 !ruby/object:Gem::Requirement
72
99
  none: false
73
- requirements:
100
+ requirements:
74
101
  - - ~>
75
- - !ruby/object:Gem::Version
102
+ - !ruby/object:Gem::Version
103
+ hash: 51
104
+ segments:
105
+ - 0
106
+ - 9
107
+ - 4
76
108
  version: 0.9.4
77
109
  type: :runtime
78
110
  prerelease: false
79
- version_requirements: *70155237334680
80
- - !ruby/object:Gem::Dependency
111
+ requirement: *id006
112
+ - !ruby/object:Gem::Dependency
81
113
  name: childprocess
82
- requirement: &70155237334220 !ruby/object:Gem::Requirement
114
+ version_requirements: &id007 !ruby/object:Gem::Requirement
83
115
  none: false
84
- requirements:
116
+ requirements:
85
117
  - - ~>
86
- - !ruby/object:Gem::Version
118
+ - !ruby/object:Gem::Version
119
+ hash: 17
120
+ segments:
121
+ - 0
122
+ - 2
123
+ - 3
87
124
  version: 0.2.3
88
125
  type: :runtime
89
126
  prerelease: false
90
- version_requirements: *70155237334220
91
- - !ruby/object:Gem::Dependency
127
+ requirement: *id007
128
+ - !ruby/object:Gem::Dependency
92
129
  name: json
93
- requirement: &70155237333760 !ruby/object:Gem::Requirement
130
+ version_requirements: &id008 !ruby/object:Gem::Requirement
94
131
  none: false
95
- requirements:
132
+ requirements:
96
133
  - - ~>
97
- - !ruby/object:Gem::Version
98
- version: '1.6'
134
+ - !ruby/object:Gem::Version
135
+ hash: 3
136
+ segments:
137
+ - 1
138
+ - 6
139
+ version: "1.6"
99
140
  type: :runtime
100
141
  prerelease: false
101
- version_requirements: *70155237333760
102
- - !ruby/object:Gem::Dependency
142
+ requirement: *id008
143
+ - !ruby/object:Gem::Dependency
103
144
  name: nokogiri
104
- requirement: &70155237333300 !ruby/object:Gem::Requirement
145
+ version_requirements: &id009 !ruby/object:Gem::Requirement
105
146
  none: false
106
- requirements:
147
+ requirements:
107
148
  - - ~>
108
- - !ruby/object:Gem::Version
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 1
153
+ - 5
154
+ - 0
109
155
  version: 1.5.0
110
156
  type: :runtime
111
157
  prerelease: false
112
- version_requirements: *70155237333300
113
- - !ruby/object:Gem::Dependency
158
+ requirement: *id009
159
+ - !ruby/object:Gem::Dependency
114
160
  name: builder
115
- requirement: &70155237332840 !ruby/object:Gem::Requirement
161
+ version_requirements: &id010 !ruby/object:Gem::Requirement
116
162
  none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ hash: 15
167
+ segments:
168
+ - 2
169
+ - 1
170
+ - 2
120
171
  version: 2.1.2
121
172
  type: :runtime
122
173
  prerelease: false
123
- version_requirements: *70155237332840
124
- - !ruby/object:Gem::Dependency
174
+ requirement: *id010
175
+ - !ruby/object:Gem::Dependency
125
176
  name: dm-core
126
- requirement: &70155237332220 !ruby/object:Gem::Requirement
177
+ version_requirements: &id011 !ruby/object:Gem::Requirement
127
178
  none: false
128
- requirements:
179
+ requirements:
129
180
  - - ~>
130
- - !ruby/object:Gem::Version
181
+ - !ruby/object:Gem::Version
182
+ hash: 31
183
+ segments:
184
+ - 1
185
+ - 2
186
+ - 0
131
187
  version: 1.2.0
132
188
  type: :runtime
133
189
  prerelease: false
134
- version_requirements: *70155237332220
135
- - !ruby/object:Gem::Dependency
190
+ requirement: *id011
191
+ - !ruby/object:Gem::Dependency
136
192
  name: dm-constraints
137
- requirement: &70155241920820 !ruby/object:Gem::Requirement
193
+ version_requirements: &id012 !ruby/object:Gem::Requirement
138
194
  none: false
139
- requirements:
195
+ requirements:
140
196
  - - ~>
141
- - !ruby/object:Gem::Version
197
+ - !ruby/object:Gem::Version
198
+ hash: 31
199
+ segments:
200
+ - 1
201
+ - 2
202
+ - 0
142
203
  version: 1.2.0
143
204
  type: :runtime
144
205
  prerelease: false
145
- version_requirements: *70155241920820
146
- - !ruby/object:Gem::Dependency
206
+ requirement: *id012
207
+ - !ruby/object:Gem::Dependency
147
208
  name: dm-migrations
148
- requirement: &70155241920380 !ruby/object:Gem::Requirement
209
+ version_requirements: &id013 !ruby/object:Gem::Requirement
149
210
  none: false
150
- requirements:
211
+ requirements:
151
212
  - - ~>
152
- - !ruby/object:Gem::Version
213
+ - !ruby/object:Gem::Version
214
+ hash: 31
215
+ segments:
216
+ - 1
217
+ - 2
218
+ - 0
153
219
  version: 1.2.0
154
220
  type: :runtime
155
221
  prerelease: false
156
- version_requirements: *70155241920380
157
- - !ruby/object:Gem::Dependency
222
+ requirement: *id013
223
+ - !ruby/object:Gem::Dependency
158
224
  name: dm-transactions
159
- requirement: &70155241919940 !ruby/object:Gem::Requirement
225
+ version_requirements: &id014 !ruby/object:Gem::Requirement
160
226
  none: false
161
- requirements:
227
+ requirements:
162
228
  - - ~>
163
- - !ruby/object:Gem::Version
229
+ - !ruby/object:Gem::Version
230
+ hash: 31
231
+ segments:
232
+ - 1
233
+ - 2
234
+ - 0
164
235
  version: 1.2.0
165
236
  type: :runtime
166
237
  prerelease: false
167
- version_requirements: *70155241919940
168
- - !ruby/object:Gem::Dependency
238
+ requirement: *id014
239
+ - !ruby/object:Gem::Dependency
169
240
  name: dm-validations
170
- requirement: &70155241919500 !ruby/object:Gem::Requirement
241
+ version_requirements: &id015 !ruby/object:Gem::Requirement
171
242
  none: false
172
- requirements:
243
+ requirements:
173
244
  - - ~>
174
- - !ruby/object:Gem::Version
245
+ - !ruby/object:Gem::Version
246
+ hash: 31
247
+ segments:
248
+ - 1
249
+ - 2
250
+ - 0
175
251
  version: 1.2.0
176
252
  type: :runtime
177
253
  prerelease: false
178
- version_requirements: *70155241919500
179
- - !ruby/object:Gem::Dependency
254
+ requirement: *id015
255
+ - !ruby/object:Gem::Dependency
180
256
  name: dm-types
181
- requirement: &70155241919060 !ruby/object:Gem::Requirement
257
+ version_requirements: &id016 !ruby/object:Gem::Requirement
182
258
  none: false
183
- requirements:
259
+ requirements:
184
260
  - - ~>
185
- - !ruby/object:Gem::Version
261
+ - !ruby/object:Gem::Version
262
+ hash: 31
263
+ segments:
264
+ - 1
265
+ - 2
266
+ - 0
186
267
  version: 1.2.0
187
268
  type: :runtime
188
269
  prerelease: false
189
- version_requirements: *70155241919060
190
- - !ruby/object:Gem::Dependency
270
+ requirement: *id016
271
+ - !ruby/object:Gem::Dependency
191
272
  name: dm-aggregates
192
- requirement: &70155241918620 !ruby/object:Gem::Requirement
273
+ version_requirements: &id017 !ruby/object:Gem::Requirement
193
274
  none: false
194
- requirements:
275
+ requirements:
195
276
  - - ~>
196
- - !ruby/object:Gem::Version
277
+ - !ruby/object:Gem::Version
278
+ hash: 31
279
+ segments:
280
+ - 1
281
+ - 2
282
+ - 0
197
283
  version: 1.2.0
198
284
  type: :runtime
199
285
  prerelease: false
200
- version_requirements: *70155241918620
201
- - !ruby/object:Gem::Dependency
286
+ requirement: *id017
287
+ - !ruby/object:Gem::Dependency
202
288
  name: dm-postgres-adapter
203
- requirement: &70155241918180 !ruby/object:Gem::Requirement
289
+ version_requirements: &id018 !ruby/object:Gem::Requirement
204
290
  none: false
205
- requirements:
291
+ requirements:
206
292
  - - ~>
207
- - !ruby/object:Gem::Version
293
+ - !ruby/object:Gem::Version
294
+ hash: 31
295
+ segments:
296
+ - 1
297
+ - 2
298
+ - 0
208
299
  version: 1.2.0
209
300
  type: :runtime
210
301
  prerelease: false
211
- version_requirements: *70155241918180
212
- - !ruby/object:Gem::Dependency
302
+ requirement: *id018
303
+ - !ruby/object:Gem::Dependency
213
304
  name: bcdatabase
214
- requirement: &70155241917720 !ruby/object:Gem::Requirement
305
+ version_requirements: &id019 !ruby/object:Gem::Requirement
215
306
  none: false
216
- requirements:
307
+ requirements:
217
308
  - - ~>
218
- - !ruby/object:Gem::Version
219
- version: '1.1'
309
+ - !ruby/object:Gem::Version
310
+ hash: 13
311
+ segments:
312
+ - 1
313
+ - 1
314
+ version: "1.1"
220
315
  type: :runtime
221
316
  prerelease: false
222
- version_requirements: *70155241917720
223
- - !ruby/object:Gem::Dependency
317
+ requirement: *id019
318
+ - !ruby/object:Gem::Dependency
319
+ name: actionmailer
320
+ version_requirements: &id020 !ruby/object:Gem::Requirement
321
+ none: false
322
+ requirements:
323
+ - - ~>
324
+ - !ruby/object:Gem::Version
325
+ hash: 7
326
+ segments:
327
+ - 3
328
+ - 0
329
+ version: "3.0"
330
+ type: :runtime
331
+ prerelease: false
332
+ requirement: *id020
333
+ - !ruby/object:Gem::Dependency
224
334
  name: rspec
225
- requirement: &70155241917260 !ruby/object:Gem::Requirement
335
+ version_requirements: &id021 !ruby/object:Gem::Requirement
226
336
  none: false
227
- requirements:
337
+ requirements:
228
338
  - - ~>
229
- - !ruby/object:Gem::Version
230
- version: '2.6'
339
+ - !ruby/object:Gem::Version
340
+ hash: 15
341
+ segments:
342
+ - 2
343
+ - 6
344
+ version: "2.6"
231
345
  type: :development
232
346
  prerelease: false
233
- version_requirements: *70155241917260
234
- - !ruby/object:Gem::Dependency
347
+ requirement: *id021
348
+ - !ruby/object:Gem::Dependency
235
349
  name: rake
236
- requirement: &70155241916800 !ruby/object:Gem::Requirement
350
+ version_requirements: &id022 !ruby/object:Gem::Requirement
237
351
  none: false
238
- requirements:
352
+ requirements:
239
353
  - - ~>
240
- - !ruby/object:Gem::Version
354
+ - !ruby/object:Gem::Version
355
+ hash: 63
356
+ segments:
357
+ - 0
358
+ - 9
359
+ - 2
241
360
  version: 0.9.2
242
361
  type: :development
243
362
  prerelease: false
244
- version_requirements: *70155241916800
245
- - !ruby/object:Gem::Dependency
363
+ requirement: *id022
364
+ - !ruby/object:Gem::Dependency
246
365
  name: yard
247
- requirement: &70155241916340 !ruby/object:Gem::Requirement
366
+ version_requirements: &id023 !ruby/object:Gem::Requirement
248
367
  none: false
249
- requirements:
368
+ requirements:
250
369
  - - ~>
251
- - !ruby/object:Gem::Version
370
+ - !ruby/object:Gem::Version
371
+ hash: 7
372
+ segments:
373
+ - 0
374
+ - 7
375
+ - 2
252
376
  version: 0.7.2
253
377
  type: :development
254
378
  prerelease: false
255
- version_requirements: *70155241916340
256
- - !ruby/object:Gem::Dependency
379
+ requirement: *id023
380
+ - !ruby/object:Gem::Dependency
257
381
  name: ci_reporter
258
- requirement: &70155241915880 !ruby/object:Gem::Requirement
382
+ version_requirements: &id024 !ruby/object:Gem::Requirement
259
383
  none: false
260
- requirements:
261
- - - =
262
- - !ruby/object:Gem::Version
384
+ requirements:
385
+ - - "="
386
+ - !ruby/object:Gem::Version
387
+ hash: 3
388
+ segments:
389
+ - 1
390
+ - 6
391
+ - 6
263
392
  version: 1.6.6
264
393
  type: :development
265
394
  prerelease: false
266
- version_requirements: *70155241915880
267
- - !ruby/object:Gem::Dependency
395
+ requirement: *id024
396
+ - !ruby/object:Gem::Dependency
268
397
  name: fakefs
269
- requirement: &70155241915420 !ruby/object:Gem::Requirement
398
+ version_requirements: &id025 !ruby/object:Gem::Requirement
270
399
  none: false
271
- requirements:
400
+ requirements:
272
401
  - - ~>
273
- - !ruby/object:Gem::Version
402
+ - !ruby/object:Gem::Version
403
+ hash: 15
404
+ segments:
405
+ - 0
406
+ - 4
407
+ - 0
274
408
  version: 0.4.0
275
409
  type: :development
276
410
  prerelease: false
277
- version_requirements: *70155241915420
411
+ requirement: *id025
278
412
  description:
279
- email:
413
+ email:
280
414
  - r-sutphin@northwestern.edu
281
- executables:
415
+ executables:
282
416
  - mdes-wh
283
417
  extensions: []
418
+
284
419
  extra_rdoc_files: []
285
- files:
420
+
421
+ files:
286
422
  - .gitignore
287
423
  - .rspec
288
424
  - .rvmrc
@@ -567,11 +703,16 @@ files:
567
703
  - lib/ncs_navigator/warehouse/data_mapper.rb
568
704
  - lib/ncs_navigator/warehouse/data_mapper_patches.rb
569
705
  - lib/ncs_navigator/warehouse/database_initializer.rb
706
+ - lib/ncs_navigator/warehouse/hooks.rb
707
+ - lib/ncs_navigator/warehouse/hooks/etl_status_email.rb
708
+ - lib/ncs_navigator/warehouse/mailer_templates/etl_status_email/failure_message.text.erb
709
+ - lib/ncs_navigator/warehouse/mailer_templates/etl_status_email/success_message.text.erb
570
710
  - lib/ncs_navigator/warehouse/models.rb
571
711
  - lib/ncs_navigator/warehouse/models/mdes_model.rb
572
712
  - lib/ncs_navigator/warehouse/models/mdes_model_collection.rb
573
713
  - lib/ncs_navigator/warehouse/postgresql.rb
574
714
  - lib/ncs_navigator/warehouse/postgresql/pgpass.rb
715
+ - lib/ncs_navigator/warehouse/stringify_trace.rb
575
716
  - lib/ncs_navigator/warehouse/table_modeler.rb
576
717
  - lib/ncs_navigator/warehouse/table_modeler/mdes_ext.rb
577
718
  - lib/ncs_navigator/warehouse/table_modeler/model_template.rb.erb
@@ -597,8 +738,10 @@ files:
597
738
  - spec/ncs_navigator/warehouse/configuration_spec.rb
598
739
  - spec/ncs_navigator/warehouse/data_mapper_spec.rb
599
740
  - spec/ncs_navigator/warehouse/database_initializer_spec.rb
741
+ - spec/ncs_navigator/warehouse/hooks/etl_status_email_spec.rb
600
742
  - spec/ncs_navigator/warehouse/models/mdes_model_spec.rb
601
743
  - spec/ncs_navigator/warehouse/postgresql/pgpass_spec.rb
744
+ - spec/ncs_navigator/warehouse/stringify_trace_spec.rb
602
745
  - spec/ncs_navigator/warehouse/table_modeler_spec.rb
603
746
  - spec/ncs_navigator/warehouse/transform_load_spec.rb
604
747
  - spec/ncs_navigator/warehouse/transform_status_spec.rb
@@ -613,33 +756,41 @@ files:
613
756
  - spec/ncs_navigator/warehouse_spec.rb
614
757
  - spec/spec_helper.rb
615
758
  - spec/test_samples.csv
616
- homepage: ''
759
+ homepage: ""
617
760
  licenses: []
761
+
618
762
  post_install_message:
619
763
  rdoc_options: []
620
- require_paths:
764
+
765
+ require_paths:
621
766
  - lib
622
767
  - generated_models
623
- required_ruby_version: !ruby/object:Gem::Requirement
768
+ required_ruby_version: !ruby/object:Gem::Requirement
624
769
  none: false
625
- requirements:
626
- - - ! '>='
627
- - !ruby/object:Gem::Version
628
- version: '0'
629
- required_rubygems_version: !ruby/object:Gem::Requirement
770
+ requirements:
771
+ - - ">="
772
+ - !ruby/object:Gem::Version
773
+ hash: 3
774
+ segments:
775
+ - 0
776
+ version: "0"
777
+ required_rubygems_version: !ruby/object:Gem::Requirement
630
778
  none: false
631
- requirements:
632
- - - ! '>='
633
- - !ruby/object:Gem::Version
634
- version: '0'
779
+ requirements:
780
+ - - ">="
781
+ - !ruby/object:Gem::Version
782
+ hash: 3
783
+ segments:
784
+ - 0
785
+ version: "0"
635
786
  requirements: []
787
+
636
788
  rubyforge_project:
637
- rubygems_version: 1.8.15
789
+ rubygems_version: 1.8.21
638
790
  signing_key:
639
791
  specification_version: 3
640
- summary: Scripts and models for building and maintaining the MDES-based reporting
641
- warehouse for NCS Navigator.
642
- test_files:
792
+ summary: Scripts and models for building and maintaining the MDES-based reporting warehouse for NCS Navigator.
793
+ test_files:
643
794
  - spec/bcdatabase/local_postgresql.yml
644
795
  - spec/bcdatabase/public_ci_postgresql9.yml
645
796
  - spec/bcdatabase/test_sqlite.yml
@@ -648,8 +799,10 @@ test_files:
648
799
  - spec/ncs_navigator/warehouse/configuration_spec.rb
649
800
  - spec/ncs_navigator/warehouse/data_mapper_spec.rb
650
801
  - spec/ncs_navigator/warehouse/database_initializer_spec.rb
802
+ - spec/ncs_navigator/warehouse/hooks/etl_status_email_spec.rb
651
803
  - spec/ncs_navigator/warehouse/models/mdes_model_spec.rb
652
804
  - spec/ncs_navigator/warehouse/postgresql/pgpass_spec.rb
805
+ - spec/ncs_navigator/warehouse/stringify_trace_spec.rb
653
806
  - spec/ncs_navigator/warehouse/table_modeler_spec.rb
654
807
  - spec/ncs_navigator/warehouse/transform_load_spec.rb
655
808
  - spec/ncs_navigator/warehouse/transform_status_spec.rb