dossier 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +181 -0
  3. data/Rakefile +27 -0
  4. data/app/assets/javascripts/dossier/application.js +15 -0
  5. data/app/assets/stylesheets/dossier/application.css +13 -0
  6. data/app/controllers/dossier/application_controller.rb +4 -0
  7. data/app/controllers/dossier/reports_controller.rb +34 -0
  8. data/app/helpers/dossier/application_helper.rb +4 -0
  9. data/app/views/dossier/reports/show.html.haml +21 -0
  10. data/config/routes.rb +5 -0
  11. data/lib/dossier.rb +31 -0
  12. data/lib/dossier/adapter/active_record.rb +40 -0
  13. data/lib/dossier/adapter/active_record/result.rb +24 -0
  14. data/lib/dossier/client.rb +52 -0
  15. data/lib/dossier/configuration.rb +28 -0
  16. data/lib/dossier/engine.rb +7 -0
  17. data/lib/dossier/formatter.rb +33 -0
  18. data/lib/dossier/query.rb +30 -0
  19. data/lib/dossier/report.rb +69 -0
  20. data/lib/dossier/result.rb +67 -0
  21. data/lib/dossier/stream_csv.rb +24 -0
  22. data/lib/dossier/version.rb +3 -0
  23. data/lib/tasks/dossier_tasks.rake +4 -0
  24. data/spec/dossier/adapter/active_record/result_spec.rb +31 -0
  25. data/spec/dossier/adapter/active_record_spec.rb +54 -0
  26. data/spec/dossier/client_spec.rb +109 -0
  27. data/spec/dossier/configuration_spec.rb +35 -0
  28. data/spec/dossier/formatter_spec.rb +39 -0
  29. data/spec/dossier/query_spec.rb +59 -0
  30. data/spec/dossier/report_spec.rb +67 -0
  31. data/spec/dossier/result_spec.rb +119 -0
  32. data/spec/dossier_spec.rb +31 -0
  33. data/spec/dummy/README.rdoc +261 -0
  34. data/spec/dummy/Rakefile +7 -0
  35. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  36. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  37. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  38. data/spec/dummy/app/controllers/site_controller.rb +5 -0
  39. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  40. data/spec/dummy/app/views/dossier/reports/suspended_employee.html.haml +1 -0
  41. data/spec/dummy/app/views/dossier/reports/total.html.haml +11 -0
  42. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  43. data/spec/dummy/config.ru +4 -0
  44. data/spec/dummy/config/application.rb +56 -0
  45. data/spec/dummy/config/boot.rb +10 -0
  46. data/spec/dummy/config/database.yml.example +13 -0
  47. data/spec/dummy/config/environment.rb +9 -0
  48. data/spec/dummy/config/environments/development.rb +37 -0
  49. data/spec/dummy/config/environments/production.rb +67 -0
  50. data/spec/dummy/config/environments/test.rb +37 -0
  51. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/spec/dummy/config/initializers/inflections.rb +15 -0
  53. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  54. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  55. data/spec/dummy/config/initializers/session_store.rb +8 -0
  56. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  57. data/spec/dummy/config/locales/en.yml +5 -0
  58. data/spec/dummy/config/routes.rb +5 -0
  59. data/spec/dummy/config/setup_load_paths.rb +15 -0
  60. data/spec/dummy/db/schema.rb +24 -0
  61. data/spec/dummy/dossier_test +0 -0
  62. data/spec/dummy/public/404.html +26 -0
  63. data/spec/dummy/public/422.html +26 -0
  64. data/spec/dummy/public/500.html +25 -0
  65. data/spec/dummy/public/favicon.ico +0 -0
  66. data/spec/dummy/script/rails +6 -0
  67. data/spec/fixtures/customized_employee_report.html +38 -0
  68. data/spec/fixtures/db/mysql2.yml.example +4 -0
  69. data/spec/fixtures/db/sqlite3.yml.example +2 -0
  70. data/spec/fixtures/employee_report.csv +4 -0
  71. data/spec/fixtures/employee_report.html +54 -0
  72. data/spec/fixtures/employee_report_with_footer.html +56 -0
  73. data/spec/fixtures/employee_with_custom_client.html +54 -0
  74. data/spec/requests/employee_report_spec.rb +52 -0
  75. data/spec/requests/employee_with_custom_client_spec.rb +13 -0
  76. data/spec/routing/dossier_routes_spec.rb +11 -0
  77. data/spec/spec_helper.rb +36 -0
  78. data/spec/support/factory.rb +86 -0
  79. data/spec/support/reports/employee_report.rb +78 -0
  80. data/spec/support/reports/employee_with_custom_client.rb +10 -0
  81. data/spec/support/reports/sqlite_employee_report.rb +15 -0
  82. data/spec/support/reports/supended_employee_report.rb +7 -0
  83. data/spec/support/reports/test_report.rb +4 -0
  84. data/spec/support/reports/total_report.rb +35 -0
  85. metadata +361 -0
@@ -0,0 +1,78 @@
1
+ class EmployeeReport < Dossier::Report
2
+
3
+ set_callback :build_query, :before, :example_before_hook
4
+ set_callback :execute, :after do
5
+ # do some stuff
6
+ end
7
+
8
+ # Valid for users to choose via a multi-select
9
+ def self.valid_columns
10
+ %w[id name hired_on suspended]
11
+ end
12
+
13
+ def sql
14
+ "SELECT #{columns} FROM employees WHERE 1=1".tap do |sql|
15
+ sql << "\n AND division in (:divisions)" if divisions.any?
16
+ sql << "\n AND salary > :salary" if salary?
17
+ sql << "\n AND (#{names_like})" if names_like.present?
18
+ sql << "\n ORDER BY name #{order}"
19
+ end
20
+ end
21
+
22
+ def columns
23
+ valid_columns.join(', ').presence || '*'
24
+ end
25
+
26
+ def valid_columns
27
+ self.class.valid_columns & Array.wrap(options[:columns])
28
+ end
29
+
30
+ def order
31
+ options[:order].to_s.upcase === 'DESC' ? 'DESC' : 'ASC'
32
+ end
33
+
34
+ def salary
35
+ 10_000
36
+ end
37
+
38
+ def name
39
+ "%#{names.pop}%"
40
+ end
41
+
42
+ def divisions
43
+ @divisions ||= options.fetch(:divisions) { [] }
44
+ end
45
+
46
+ def salary?
47
+ options[:salary].present?
48
+ end
49
+
50
+ def names_like
51
+ names.map { |name| "name like :name" }.join(' or ')
52
+ end
53
+
54
+ def names
55
+ @names ||= options.fetch(:names) { [] }.dup
56
+ end
57
+
58
+ def format_salary(amount)
59
+ formatter.number_to_currency(amount) # unless format.csv?
60
+ end
61
+
62
+ def format_hired_on(date)
63
+ date.to_s(:db)
64
+ end
65
+
66
+ def format_name(name)
67
+ "Employee #{name}"
68
+ end
69
+
70
+ def format_suspended(value)
71
+ value.to_i == 1 ? 'Yes' : 'No'
72
+ end
73
+
74
+ def example_before_hook
75
+ # do some stuff
76
+ end
77
+
78
+ end
@@ -0,0 +1,10 @@
1
+ class EmployeeWithCustomClientReport < Dossier::Report
2
+
3
+ def sql
4
+ "SELECT * FROM `employees`"
5
+ end
6
+
7
+ def dossier_client
8
+ Dossier::Factory.sqlite3_client
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ class SqliteEmployeeReport < Dossier::Report
2
+
3
+ def sql
4
+ "SELECT * FROM `employees` WHERE name LIKE :name"
5
+ end
6
+
7
+ def name
8
+ '%Jimmy%'
9
+ end
10
+
11
+ def format_salary(salary)
12
+ formatter.number_to_currency(salary)
13
+ end
14
+
15
+ end
@@ -0,0 +1,7 @@
1
+ class SuspendedEmployeeReport < Dossier::Report
2
+
3
+ def sql
4
+ "SELECT * FROM employees WHERE suspended = true"
5
+ end
6
+
7
+ end
@@ -0,0 +1,4 @@
1
+ class TestReport < Dossier::Report
2
+
3
+ end
4
+
@@ -0,0 +1,35 @@
1
+ class TotalReport < Dossier::Report
2
+
3
+ def sql
4
+ <<-SQL.strip_heredoc
5
+ SELECT
6
+ business_id,
7
+ sum( IF( `year` = '2011', amount, 0 ) ) AS 2011_total,
8
+ sum( IF( `year` = '2010', amount, 0 ) ) AS 2010_total,
9
+ sum( IF( `year` = '2009', amount, 0 ) ) AS 2009_total
10
+ FROM
11
+ totals
12
+ WHERE
13
+ business_id IN (:businesses)
14
+ GROUP BY
15
+ business_id
16
+ SQL
17
+ end
18
+
19
+ def businesses
20
+ options.fetch(:businesses) { '' }.split(',')
21
+ end
22
+
23
+ def format_2011_total(value)
24
+ formatter.currency(value)
25
+ end
26
+
27
+ def format_2010_total(value)
28
+ formatter.currency(value)
29
+ end
30
+
31
+ def format_2009_total(value)
32
+ formatter.currency(value)
33
+ end
34
+
35
+ end
metadata ADDED
@@ -0,0 +1,361 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dossier
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Hunter
9
+ - Nathan Long
10
+ - Rodney Turnham
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2013-01-18 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: arel
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: '3.0'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: '3.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: activesupport
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ - !ruby/object:Gem::Dependency
49
+ name: actionpack
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '3.2'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: '3.2'
64
+ - !ruby/object:Gem::Dependency
65
+ name: actionmailer
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ version: '3.2'
72
+ type: :runtime
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: '3.2'
80
+ - !ruby/object:Gem::Dependency
81
+ name: railties
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '3.2'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: '3.2'
96
+ - !ruby/object:Gem::Dependency
97
+ name: haml
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 3.1.6
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: 3.1.6
112
+ - !ruby/object:Gem::Dependency
113
+ name: activerecord
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ~>
118
+ - !ruby/object:Gem::Version
119
+ version: 3.2.11
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ~>
126
+ - !ruby/object:Gem::Version
127
+ version: 3.2.11
128
+ - !ruby/object:Gem::Dependency
129
+ name: sqlite3
130
+ requirement: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: 1.3.6
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: 1.3.6
144
+ - !ruby/object:Gem::Dependency
145
+ name: pry
146
+ requirement: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: 0.9.10
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: 0.9.10
160
+ - !ruby/object:Gem::Dependency
161
+ name: rspec-rails
162
+ requirement: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: 2.12.0
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: 2.12.0
176
+ description: Easy SQL based report generation with the ability to accept request parameters
177
+ and render multiple formats.
178
+ email:
179
+ - adamhunter@me.com
180
+ - nathanmlong@gmail.com
181
+ - rodney.turnham@tma1.com
182
+ executables: []
183
+ extensions: []
184
+ extra_rdoc_files: []
185
+ files:
186
+ - app/assets/javascripts/dossier/application.js
187
+ - app/assets/stylesheets/dossier/application.css
188
+ - app/controllers/dossier/application_controller.rb
189
+ - app/controllers/dossier/reports_controller.rb
190
+ - app/helpers/dossier/application_helper.rb
191
+ - app/views/dossier/reports/show.html.haml
192
+ - config/routes.rb
193
+ - lib/dossier/adapter/active_record/result.rb
194
+ - lib/dossier/adapter/active_record.rb
195
+ - lib/dossier/client.rb
196
+ - lib/dossier/configuration.rb
197
+ - lib/dossier/engine.rb
198
+ - lib/dossier/formatter.rb
199
+ - lib/dossier/query.rb
200
+ - lib/dossier/report.rb
201
+ - lib/dossier/result.rb
202
+ - lib/dossier/stream_csv.rb
203
+ - lib/dossier/version.rb
204
+ - lib/dossier.rb
205
+ - lib/tasks/dossier_tasks.rake
206
+ - MIT-LICENSE
207
+ - Rakefile
208
+ - README.markdown
209
+ - spec/dossier/adapter/active_record/result_spec.rb
210
+ - spec/dossier/adapter/active_record_spec.rb
211
+ - spec/dossier/client_spec.rb
212
+ - spec/dossier/configuration_spec.rb
213
+ - spec/dossier/formatter_spec.rb
214
+ - spec/dossier/query_spec.rb
215
+ - spec/dossier/report_spec.rb
216
+ - spec/dossier/result_spec.rb
217
+ - spec/dossier_spec.rb
218
+ - spec/dummy/app/assets/javascripts/application.js
219
+ - spec/dummy/app/assets/stylesheets/application.css
220
+ - spec/dummy/app/controllers/application_controller.rb
221
+ - spec/dummy/app/controllers/site_controller.rb
222
+ - spec/dummy/app/helpers/application_helper.rb
223
+ - spec/dummy/app/views/dossier/reports/suspended_employee.html.haml
224
+ - spec/dummy/app/views/dossier/reports/total.html.haml
225
+ - spec/dummy/app/views/layouts/application.html.erb
226
+ - spec/dummy/config/application.rb
227
+ - spec/dummy/config/boot.rb
228
+ - spec/dummy/config/database.yml.example
229
+ - spec/dummy/config/environment.rb
230
+ - spec/dummy/config/environments/development.rb
231
+ - spec/dummy/config/environments/production.rb
232
+ - spec/dummy/config/environments/test.rb
233
+ - spec/dummy/config/initializers/backtrace_silencers.rb
234
+ - spec/dummy/config/initializers/inflections.rb
235
+ - spec/dummy/config/initializers/mime_types.rb
236
+ - spec/dummy/config/initializers/secret_token.rb
237
+ - spec/dummy/config/initializers/session_store.rb
238
+ - spec/dummy/config/initializers/wrap_parameters.rb
239
+ - spec/dummy/config/locales/en.yml
240
+ - spec/dummy/config/routes.rb
241
+ - spec/dummy/config/setup_load_paths.rb
242
+ - spec/dummy/config.ru
243
+ - spec/dummy/db/schema.rb
244
+ - spec/dummy/dossier_test
245
+ - spec/dummy/public/404.html
246
+ - spec/dummy/public/422.html
247
+ - spec/dummy/public/500.html
248
+ - spec/dummy/public/favicon.ico
249
+ - spec/dummy/Rakefile
250
+ - spec/dummy/README.rdoc
251
+ - spec/dummy/script/rails
252
+ - spec/fixtures/customized_employee_report.html
253
+ - spec/fixtures/db/mysql2.yml.example
254
+ - spec/fixtures/db/sqlite3.yml.example
255
+ - spec/fixtures/employee_report.csv
256
+ - spec/fixtures/employee_report.html
257
+ - spec/fixtures/employee_report_with_footer.html
258
+ - spec/fixtures/employee_with_custom_client.html
259
+ - spec/requests/employee_report_spec.rb
260
+ - spec/requests/employee_with_custom_client_spec.rb
261
+ - spec/routing/dossier_routes_spec.rb
262
+ - spec/spec_helper.rb
263
+ - spec/support/factory.rb
264
+ - spec/support/reports/employee_report.rb
265
+ - spec/support/reports/employee_with_custom_client.rb
266
+ - spec/support/reports/sqlite_employee_report.rb
267
+ - spec/support/reports/supended_employee_report.rb
268
+ - spec/support/reports/test_report.rb
269
+ - spec/support/reports/total_report.rb
270
+ homepage:
271
+ licenses: []
272
+ post_install_message:
273
+ rdoc_options: []
274
+ require_paths:
275
+ - lib
276
+ required_ruby_version: !ruby/object:Gem::Requirement
277
+ none: false
278
+ requirements:
279
+ - - ! '>='
280
+ - !ruby/object:Gem::Version
281
+ version: '0'
282
+ segments:
283
+ - 0
284
+ hash: 2096972700425199909
285
+ required_rubygems_version: !ruby/object:Gem::Requirement
286
+ none: false
287
+ requirements:
288
+ - - ! '>='
289
+ - !ruby/object:Gem::Version
290
+ version: '0'
291
+ segments:
292
+ - 0
293
+ hash: 2096972700425199909
294
+ requirements: []
295
+ rubyforge_project:
296
+ rubygems_version: 1.8.24
297
+ signing_key:
298
+ specification_version: 3
299
+ summary: SQL based report generation.
300
+ test_files:
301
+ - spec/dossier/adapter/active_record/result_spec.rb
302
+ - spec/dossier/adapter/active_record_spec.rb
303
+ - spec/dossier/client_spec.rb
304
+ - spec/dossier/configuration_spec.rb
305
+ - spec/dossier/formatter_spec.rb
306
+ - spec/dossier/query_spec.rb
307
+ - spec/dossier/report_spec.rb
308
+ - spec/dossier/result_spec.rb
309
+ - spec/dossier_spec.rb
310
+ - spec/dummy/app/assets/javascripts/application.js
311
+ - spec/dummy/app/assets/stylesheets/application.css
312
+ - spec/dummy/app/controllers/application_controller.rb
313
+ - spec/dummy/app/controllers/site_controller.rb
314
+ - spec/dummy/app/helpers/application_helper.rb
315
+ - spec/dummy/app/views/dossier/reports/suspended_employee.html.haml
316
+ - spec/dummy/app/views/dossier/reports/total.html.haml
317
+ - spec/dummy/app/views/layouts/application.html.erb
318
+ - spec/dummy/config/application.rb
319
+ - spec/dummy/config/boot.rb
320
+ - spec/dummy/config/database.yml.example
321
+ - spec/dummy/config/environment.rb
322
+ - spec/dummy/config/environments/development.rb
323
+ - spec/dummy/config/environments/production.rb
324
+ - spec/dummy/config/environments/test.rb
325
+ - spec/dummy/config/initializers/backtrace_silencers.rb
326
+ - spec/dummy/config/initializers/inflections.rb
327
+ - spec/dummy/config/initializers/mime_types.rb
328
+ - spec/dummy/config/initializers/secret_token.rb
329
+ - spec/dummy/config/initializers/session_store.rb
330
+ - spec/dummy/config/initializers/wrap_parameters.rb
331
+ - spec/dummy/config/locales/en.yml
332
+ - spec/dummy/config/routes.rb
333
+ - spec/dummy/config/setup_load_paths.rb
334
+ - spec/dummy/config.ru
335
+ - spec/dummy/db/schema.rb
336
+ - spec/dummy/dossier_test
337
+ - spec/dummy/public/404.html
338
+ - spec/dummy/public/422.html
339
+ - spec/dummy/public/500.html
340
+ - spec/dummy/public/favicon.ico
341
+ - spec/dummy/Rakefile
342
+ - spec/dummy/README.rdoc
343
+ - spec/dummy/script/rails
344
+ - spec/fixtures/customized_employee_report.html
345
+ - spec/fixtures/db/mysql2.yml.example
346
+ - spec/fixtures/db/sqlite3.yml.example
347
+ - spec/fixtures/employee_report.csv
348
+ - spec/fixtures/employee_report.html
349
+ - spec/fixtures/employee_report_with_footer.html
350
+ - spec/fixtures/employee_with_custom_client.html
351
+ - spec/requests/employee_report_spec.rb
352
+ - spec/requests/employee_with_custom_client_spec.rb
353
+ - spec/routing/dossier_routes_spec.rb
354
+ - spec/spec_helper.rb
355
+ - spec/support/factory.rb
356
+ - spec/support/reports/employee_report.rb
357
+ - spec/support/reports/employee_with_custom_client.rb
358
+ - spec/support/reports/sqlite_employee_report.rb
359
+ - spec/support/reports/supended_employee_report.rb
360
+ - spec/support/reports/test_report.rb
361
+ - spec/support/reports/total_report.rb