ncs_mdes_warehouse 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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