rspec-tracer 1.2.3 → 2.0.0.pre.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +384 -67
- data/README.md +454 -429
- data/bin/rspec-tracer +15 -0
- data/lib/rspec_tracer/cache/Rakefile +43 -0
- data/lib/rspec_tracer/cli/cache_clear.rb +111 -0
- data/lib/rspec_tracer/cli/cache_info.rb +104 -0
- data/lib/rspec_tracer/cli/doctor.rb +284 -0
- data/lib/rspec_tracer/cli/explain.rb +158 -0
- data/lib/rspec_tracer/cli/report_open.rb +82 -0
- data/lib/rspec_tracer/cli.rb +116 -0
- data/lib/rspec_tracer/configuration.rb +1196 -3
- data/lib/rspec_tracer/engine.rb +1168 -0
- data/lib/rspec_tracer/example.rb +141 -11
- data/lib/rspec_tracer/filter.rb +35 -0
- data/lib/rspec_tracer/line_stub.rb +61 -0
- data/lib/rspec_tracer/load_config.rb +2 -2
- data/lib/rspec_tracer/logger.rb +15 -0
- data/lib/rspec_tracer/rails/README.md +78 -0
- data/lib/rspec_tracer/rails/i18n_tracking.rb +137 -0
- data/lib/rspec_tracer/rails/notifications.rb +263 -0
- data/lib/rspec_tracer/rails/preset.rb +94 -0
- data/lib/rspec_tracer/rails/railtie.rb +22 -0
- data/lib/rspec_tracer/rails.rb +15 -0
- data/lib/rspec_tracer/remote_cache/README.md +140 -0
- data/lib/rspec_tracer/remote_cache/Rakefile +35 -11
- data/lib/rspec_tracer/remote_cache/archive.rb +137 -0
- data/lib/rspec_tracer/remote_cache/backend.rb +73 -0
- data/lib/rspec_tracer/remote_cache/git_ancestry.rb +241 -0
- data/lib/rspec_tracer/remote_cache/local_fs_backend.rb +439 -0
- data/lib/rspec_tracer/remote_cache/redis_backend.rb +554 -0
- data/lib/rspec_tracer/remote_cache/s3_backend.rb +712 -0
- data/lib/rspec_tracer/remote_cache/user_tasks.rb +436 -0
- data/lib/rspec_tracer/remote_cache/validator.rb +40 -62
- data/lib/rspec_tracer/remote_cache.rb +22 -0
- data/lib/rspec_tracer/reporters/README.md +103 -0
- data/lib/rspec_tracer/reporters/base.rb +87 -0
- data/lib/rspec_tracer/reporters/coverage_json_reporter.rb +338 -0
- data/lib/rspec_tracer/reporters/html/.gitignore +19 -0
- data/lib/rspec_tracer/reporters/html/.prettierignore +4 -0
- data/lib/rspec_tracer/reporters/html/.prettierrc.json +9 -0
- data/lib/rspec_tracer/reporters/html/README.md +80 -0
- data/lib/rspec_tracer/reporters/html/dist/assets/index.css +2 -0
- data/lib/rspec_tracer/reporters/html/dist/assets/index.js +1 -0
- data/lib/rspec_tracer/reporters/html/dist/index.html +24 -0
- data/lib/rspec_tracer/reporters/html/eslint.config.js +62 -0
- data/lib/rspec_tracer/reporters/html/package-lock.json +4941 -0
- data/lib/rspec_tracer/reporters/html/package.json +29 -0
- data/lib/rspec_tracer/reporters/html/src/app.jsx +130 -0
- data/lib/rspec_tracer/reporters/html/src/components/AllExamples.jsx +86 -0
- data/lib/rspec_tracer/reporters/html/src/components/DuplicateExamples.jsx +68 -0
- data/lib/rspec_tracer/reporters/html/src/components/ExamplesDependency.jsx +78 -0
- data/lib/rspec_tracer/reporters/html/src/components/FilesDependency.jsx +72 -0
- data/lib/rspec_tracer/reporters/html/src/components/FlakyExamples.jsx +42 -0
- data/lib/rspec_tracer/reporters/html/src/components/ReportTable.jsx +131 -0
- data/lib/rspec_tracer/reporters/html/src/components/SearchBar.jsx +19 -0
- data/lib/rspec_tracer/reporters/html/src/index.html +23 -0
- data/lib/rspec_tracer/reporters/html/src/main.jsx +37 -0
- data/lib/rspec_tracer/reporters/html/src/styles.css +434 -0
- data/lib/rspec_tracer/reporters/html/vite.config.js +42 -0
- data/lib/rspec_tracer/reporters/html_reporter.rb +266 -0
- data/lib/rspec_tracer/reporters/json_reporter.rb +88 -0
- data/lib/rspec_tracer/reporters/payload_builder.rb +235 -0
- data/lib/rspec_tracer/reporters/registry.rb +120 -0
- data/lib/rspec_tracer/reporters/terminal_reporter.rb +264 -0
- data/lib/rspec_tracer/rspec/README.md +73 -0
- data/lib/rspec_tracer/rspec/installation.rb +97 -0
- data/lib/rspec_tracer/rspec/metadata.rb +96 -0
- data/lib/rspec_tracer/rspec/parallel_tests.rb +459 -0
- data/lib/rspec_tracer/rspec/reporter_hook.rb +84 -0
- data/lib/rspec_tracer/rspec/runner_hook.rb +239 -0
- data/lib/rspec_tracer/source_file.rb +24 -7
- data/lib/rspec_tracer/storage/README.md +35 -0
- data/lib/rspec_tracer/storage/backend.rb +130 -0
- data/lib/rspec_tracer/storage/json_backend.rb +884 -0
- data/lib/rspec_tracer/storage/lazy_snapshot.rb +65 -0
- data/lib/rspec_tracer/storage/schema.rb +50 -0
- data/lib/rspec_tracer/storage/serializer/json.rb +41 -0
- data/lib/rspec_tracer/storage/serializer/msgpack.rb +167 -0
- data/lib/rspec_tracer/storage/snapshot.rb +141 -0
- data/lib/rspec_tracer/storage/sqlite_backend.rb +693 -0
- data/lib/rspec_tracer/time_formatter.rb +37 -18
- data/lib/rspec_tracer/tracker/README.md +36 -0
- data/lib/rspec_tracer/tracker/coverage_adapter.rb +174 -0
- data/lib/rspec_tracer/tracker/declared_globs.rb +100 -0
- data/lib/rspec_tracer/tracker/dependency_graph.rb +134 -0
- data/lib/rspec_tracer/tracker/env_matcher.rb +127 -0
- data/lib/rspec_tracer/tracker/env_snapshot.rb +77 -0
- data/lib/rspec_tracer/tracker/example_registry.rb +153 -0
- data/lib/rspec_tracer/tracker/file_digest.rb +61 -0
- data/lib/rspec_tracer/tracker/filter.rb +127 -0
- data/lib/rspec_tracer/tracker/input.rb +99 -0
- data/lib/rspec_tracer/tracker/io_hooks/file.rb +55 -0
- data/lib/rspec_tracer/tracker/io_hooks/io.rb +24 -0
- data/lib/rspec_tracer/tracker/io_hooks/json.rb +23 -0
- data/lib/rspec_tracer/tracker/io_hooks/kernel.rb +26 -0
- data/lib/rspec_tracer/tracker/io_hooks/yaml.rb +38 -0
- data/lib/rspec_tracer/tracker/io_hooks.rb +195 -0
- data/lib/rspec_tracer/tracker/loaded_files_tracker.rb +295 -0
- data/lib/rspec_tracer/tracker/new_file_detector.rb +62 -0
- data/lib/rspec_tracer/tracker/whole_suite_invalidators.rb +96 -0
- data/lib/rspec_tracer/version.rb +4 -1
- data/lib/rspec_tracer.rb +231 -491
- metadata +94 -43
- data/lib/rspec_tracer/cache.rb +0 -207
- data/lib/rspec_tracer/coverage_merger.rb +0 -42
- data/lib/rspec_tracer/coverage_reporter.rb +0 -187
- data/lib/rspec_tracer/coverage_writer.rb +0 -58
- data/lib/rspec_tracer/html_reporter/Rakefile +0 -18
- data/lib/rspec_tracer/html_reporter/assets/javascripts/application.js +0 -56
- data/lib/rspec_tracer/html_reporter/assets/javascripts/libraries/jquery.js +0 -10881
- data/lib/rspec_tracer/html_reporter/assets/javascripts/plugins/datatables.js +0 -15381
- data/lib/rspec_tracer/html_reporter/assets/stylesheets/application.css +0 -196
- data/lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/datatables.css +0 -459
- data/lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/jquery-ui.css +0 -436
- data/lib/rspec_tracer/html_reporter/assets/stylesheets/print.css +0 -92
- data/lib/rspec_tracer/html_reporter/assets/stylesheets/reset.css +0 -265
- data/lib/rspec_tracer/html_reporter/public/application.css +0 -5
- data/lib/rspec_tracer/html_reporter/public/application.js +0 -6
- data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc_disabled.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_both.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc_disabled.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/favicon.png +0 -0
- data/lib/rspec_tracer/html_reporter/public/loading.gif +0 -0
- data/lib/rspec_tracer/html_reporter/reporter.rb +0 -242
- data/lib/rspec_tracer/html_reporter/views/duplicate_examples.erb +0 -34
- data/lib/rspec_tracer/html_reporter/views/examples.erb +0 -58
- data/lib/rspec_tracer/html_reporter/views/examples_dependency.erb +0 -36
- data/lib/rspec_tracer/html_reporter/views/files_dependency.erb +0 -36
- data/lib/rspec_tracer/html_reporter/views/flaky_examples.erb +0 -38
- data/lib/rspec_tracer/html_reporter/views/layout.erb +0 -38
- data/lib/rspec_tracer/remote_cache/aws.rb +0 -176
- data/lib/rspec_tracer/remote_cache/cache.rb +0 -75
- data/lib/rspec_tracer/remote_cache/repo.rb +0 -210
- data/lib/rspec_tracer/report_generator.rb +0 -158
- data/lib/rspec_tracer/report_merger.rb +0 -68
- data/lib/rspec_tracer/report_writer.rb +0 -141
- data/lib/rspec_tracer/reporter.rb +0 -204
- data/lib/rspec_tracer/rspec_reporter.rb +0 -41
- data/lib/rspec_tracer/rspec_runner.rb +0 -56
- data/lib/rspec_tracer/ruby_coverage.rb +0 -9
- data/lib/rspec_tracer/runner.rb +0 -278
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspec-tracer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.pre.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Abhimanyu Singh
|
|
@@ -44,76 +44,127 @@ description: RSpec Tracer is a specs dependency analyzer, flaky tests detector,
|
|
|
44
44
|
of the coverage for each test.
|
|
45
45
|
email:
|
|
46
46
|
- abhisinghabhimanyu@gmail.com
|
|
47
|
-
executables:
|
|
47
|
+
executables:
|
|
48
|
+
- rspec-tracer
|
|
48
49
|
extensions: []
|
|
49
50
|
extra_rdoc_files: []
|
|
50
51
|
files:
|
|
51
52
|
- CHANGELOG.md
|
|
52
53
|
- LICENSE
|
|
53
54
|
- README.md
|
|
55
|
+
- bin/rspec-tracer
|
|
54
56
|
- lib/rspec_tracer.rb
|
|
55
|
-
- lib/rspec_tracer/cache
|
|
57
|
+
- lib/rspec_tracer/cache/Rakefile
|
|
58
|
+
- lib/rspec_tracer/cli.rb
|
|
59
|
+
- lib/rspec_tracer/cli/cache_clear.rb
|
|
60
|
+
- lib/rspec_tracer/cli/cache_info.rb
|
|
61
|
+
- lib/rspec_tracer/cli/doctor.rb
|
|
62
|
+
- lib/rspec_tracer/cli/explain.rb
|
|
63
|
+
- lib/rspec_tracer/cli/report_open.rb
|
|
56
64
|
- lib/rspec_tracer/configuration.rb
|
|
57
|
-
- lib/rspec_tracer/coverage_merger.rb
|
|
58
|
-
- lib/rspec_tracer/coverage_reporter.rb
|
|
59
|
-
- lib/rspec_tracer/coverage_writer.rb
|
|
60
65
|
- lib/rspec_tracer/defaults.rb
|
|
66
|
+
- lib/rspec_tracer/engine.rb
|
|
61
67
|
- lib/rspec_tracer/example.rb
|
|
62
68
|
- lib/rspec_tracer/filter.rb
|
|
63
|
-
- lib/rspec_tracer/
|
|
64
|
-
- lib/rspec_tracer/html_reporter/assets/javascripts/application.js
|
|
65
|
-
- lib/rspec_tracer/html_reporter/assets/javascripts/libraries/jquery.js
|
|
66
|
-
- lib/rspec_tracer/html_reporter/assets/javascripts/plugins/datatables.js
|
|
67
|
-
- lib/rspec_tracer/html_reporter/assets/stylesheets/application.css
|
|
68
|
-
- lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/datatables.css
|
|
69
|
-
- lib/rspec_tracer/html_reporter/assets/stylesheets/plugins/jquery-ui.css
|
|
70
|
-
- lib/rspec_tracer/html_reporter/assets/stylesheets/print.css
|
|
71
|
-
- lib/rspec_tracer/html_reporter/assets/stylesheets/reset.css
|
|
72
|
-
- lib/rspec_tracer/html_reporter/public/application.css
|
|
73
|
-
- lib/rspec_tracer/html_reporter/public/application.js
|
|
74
|
-
- lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc.png
|
|
75
|
-
- lib/rspec_tracer/html_reporter/public/datatables/images/sort_asc_disabled.png
|
|
76
|
-
- lib/rspec_tracer/html_reporter/public/datatables/images/sort_both.png
|
|
77
|
-
- lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc.png
|
|
78
|
-
- lib/rspec_tracer/html_reporter/public/datatables/images/sort_desc_disabled.png
|
|
79
|
-
- lib/rspec_tracer/html_reporter/public/favicon.png
|
|
80
|
-
- lib/rspec_tracer/html_reporter/public/loading.gif
|
|
81
|
-
- lib/rspec_tracer/html_reporter/reporter.rb
|
|
82
|
-
- lib/rspec_tracer/html_reporter/views/duplicate_examples.erb
|
|
83
|
-
- lib/rspec_tracer/html_reporter/views/examples.erb
|
|
84
|
-
- lib/rspec_tracer/html_reporter/views/examples_dependency.erb
|
|
85
|
-
- lib/rspec_tracer/html_reporter/views/files_dependency.erb
|
|
86
|
-
- lib/rspec_tracer/html_reporter/views/flaky_examples.erb
|
|
87
|
-
- lib/rspec_tracer/html_reporter/views/layout.erb
|
|
69
|
+
- lib/rspec_tracer/line_stub.rb
|
|
88
70
|
- lib/rspec_tracer/load_config.rb
|
|
89
71
|
- lib/rspec_tracer/load_default_config.rb
|
|
90
72
|
- lib/rspec_tracer/load_global_config.rb
|
|
91
73
|
- lib/rspec_tracer/load_local_config.rb
|
|
92
74
|
- lib/rspec_tracer/logger.rb
|
|
75
|
+
- lib/rspec_tracer/rails.rb
|
|
76
|
+
- lib/rspec_tracer/rails/README.md
|
|
77
|
+
- lib/rspec_tracer/rails/i18n_tracking.rb
|
|
78
|
+
- lib/rspec_tracer/rails/notifications.rb
|
|
79
|
+
- lib/rspec_tracer/rails/preset.rb
|
|
80
|
+
- lib/rspec_tracer/rails/railtie.rb
|
|
81
|
+
- lib/rspec_tracer/remote_cache.rb
|
|
82
|
+
- lib/rspec_tracer/remote_cache/README.md
|
|
93
83
|
- lib/rspec_tracer/remote_cache/Rakefile
|
|
94
|
-
- lib/rspec_tracer/remote_cache/
|
|
95
|
-
- lib/rspec_tracer/remote_cache/
|
|
96
|
-
- lib/rspec_tracer/remote_cache/
|
|
84
|
+
- lib/rspec_tracer/remote_cache/archive.rb
|
|
85
|
+
- lib/rspec_tracer/remote_cache/backend.rb
|
|
86
|
+
- lib/rspec_tracer/remote_cache/git_ancestry.rb
|
|
87
|
+
- lib/rspec_tracer/remote_cache/local_fs_backend.rb
|
|
88
|
+
- lib/rspec_tracer/remote_cache/redis_backend.rb
|
|
89
|
+
- lib/rspec_tracer/remote_cache/s3_backend.rb
|
|
90
|
+
- lib/rspec_tracer/remote_cache/user_tasks.rb
|
|
97
91
|
- lib/rspec_tracer/remote_cache/validator.rb
|
|
98
|
-
- lib/rspec_tracer/
|
|
99
|
-
- lib/rspec_tracer/
|
|
100
|
-
- lib/rspec_tracer/
|
|
101
|
-
- lib/rspec_tracer/
|
|
102
|
-
- lib/rspec_tracer/
|
|
103
|
-
- lib/rspec_tracer/
|
|
104
|
-
- lib/rspec_tracer/
|
|
105
|
-
- lib/rspec_tracer/
|
|
92
|
+
- lib/rspec_tracer/reporters/README.md
|
|
93
|
+
- lib/rspec_tracer/reporters/base.rb
|
|
94
|
+
- lib/rspec_tracer/reporters/coverage_json_reporter.rb
|
|
95
|
+
- lib/rspec_tracer/reporters/html/.gitignore
|
|
96
|
+
- lib/rspec_tracer/reporters/html/.prettierignore
|
|
97
|
+
- lib/rspec_tracer/reporters/html/.prettierrc.json
|
|
98
|
+
- lib/rspec_tracer/reporters/html/README.md
|
|
99
|
+
- lib/rspec_tracer/reporters/html/dist/assets/index.css
|
|
100
|
+
- lib/rspec_tracer/reporters/html/dist/assets/index.js
|
|
101
|
+
- lib/rspec_tracer/reporters/html/dist/index.html
|
|
102
|
+
- lib/rspec_tracer/reporters/html/eslint.config.js
|
|
103
|
+
- lib/rspec_tracer/reporters/html/package-lock.json
|
|
104
|
+
- lib/rspec_tracer/reporters/html/package.json
|
|
105
|
+
- lib/rspec_tracer/reporters/html/src/app.jsx
|
|
106
|
+
- lib/rspec_tracer/reporters/html/src/components/AllExamples.jsx
|
|
107
|
+
- lib/rspec_tracer/reporters/html/src/components/DuplicateExamples.jsx
|
|
108
|
+
- lib/rspec_tracer/reporters/html/src/components/ExamplesDependency.jsx
|
|
109
|
+
- lib/rspec_tracer/reporters/html/src/components/FilesDependency.jsx
|
|
110
|
+
- lib/rspec_tracer/reporters/html/src/components/FlakyExamples.jsx
|
|
111
|
+
- lib/rspec_tracer/reporters/html/src/components/ReportTable.jsx
|
|
112
|
+
- lib/rspec_tracer/reporters/html/src/components/SearchBar.jsx
|
|
113
|
+
- lib/rspec_tracer/reporters/html/src/index.html
|
|
114
|
+
- lib/rspec_tracer/reporters/html/src/main.jsx
|
|
115
|
+
- lib/rspec_tracer/reporters/html/src/styles.css
|
|
116
|
+
- lib/rspec_tracer/reporters/html/vite.config.js
|
|
117
|
+
- lib/rspec_tracer/reporters/html_reporter.rb
|
|
118
|
+
- lib/rspec_tracer/reporters/json_reporter.rb
|
|
119
|
+
- lib/rspec_tracer/reporters/payload_builder.rb
|
|
120
|
+
- lib/rspec_tracer/reporters/registry.rb
|
|
121
|
+
- lib/rspec_tracer/reporters/terminal_reporter.rb
|
|
122
|
+
- lib/rspec_tracer/rspec/README.md
|
|
123
|
+
- lib/rspec_tracer/rspec/installation.rb
|
|
124
|
+
- lib/rspec_tracer/rspec/metadata.rb
|
|
125
|
+
- lib/rspec_tracer/rspec/parallel_tests.rb
|
|
126
|
+
- lib/rspec_tracer/rspec/reporter_hook.rb
|
|
127
|
+
- lib/rspec_tracer/rspec/runner_hook.rb
|
|
106
128
|
- lib/rspec_tracer/source_file.rb
|
|
129
|
+
- lib/rspec_tracer/storage/README.md
|
|
130
|
+
- lib/rspec_tracer/storage/backend.rb
|
|
131
|
+
- lib/rspec_tracer/storage/json_backend.rb
|
|
132
|
+
- lib/rspec_tracer/storage/lazy_snapshot.rb
|
|
133
|
+
- lib/rspec_tracer/storage/schema.rb
|
|
134
|
+
- lib/rspec_tracer/storage/serializer/json.rb
|
|
135
|
+
- lib/rspec_tracer/storage/serializer/msgpack.rb
|
|
136
|
+
- lib/rspec_tracer/storage/snapshot.rb
|
|
137
|
+
- lib/rspec_tracer/storage/sqlite_backend.rb
|
|
107
138
|
- lib/rspec_tracer/time_formatter.rb
|
|
139
|
+
- lib/rspec_tracer/tracker/README.md
|
|
140
|
+
- lib/rspec_tracer/tracker/coverage_adapter.rb
|
|
141
|
+
- lib/rspec_tracer/tracker/declared_globs.rb
|
|
142
|
+
- lib/rspec_tracer/tracker/dependency_graph.rb
|
|
143
|
+
- lib/rspec_tracer/tracker/env_matcher.rb
|
|
144
|
+
- lib/rspec_tracer/tracker/env_snapshot.rb
|
|
145
|
+
- lib/rspec_tracer/tracker/example_registry.rb
|
|
146
|
+
- lib/rspec_tracer/tracker/file_digest.rb
|
|
147
|
+
- lib/rspec_tracer/tracker/filter.rb
|
|
148
|
+
- lib/rspec_tracer/tracker/input.rb
|
|
149
|
+
- lib/rspec_tracer/tracker/io_hooks.rb
|
|
150
|
+
- lib/rspec_tracer/tracker/io_hooks/file.rb
|
|
151
|
+
- lib/rspec_tracer/tracker/io_hooks/io.rb
|
|
152
|
+
- lib/rspec_tracer/tracker/io_hooks/json.rb
|
|
153
|
+
- lib/rspec_tracer/tracker/io_hooks/kernel.rb
|
|
154
|
+
- lib/rspec_tracer/tracker/io_hooks/yaml.rb
|
|
155
|
+
- lib/rspec_tracer/tracker/loaded_files_tracker.rb
|
|
156
|
+
- lib/rspec_tracer/tracker/new_file_detector.rb
|
|
157
|
+
- lib/rspec_tracer/tracker/whole_suite_invalidators.rb
|
|
108
158
|
- lib/rspec_tracer/version.rb
|
|
109
159
|
homepage: https://github.com/avmnu-sng/rspec-tracer
|
|
110
160
|
licenses:
|
|
111
161
|
- MIT
|
|
112
162
|
metadata:
|
|
113
163
|
homepage_uri: https://github.com/avmnu-sng/rspec-tracer
|
|
114
|
-
source_code_uri: https://github.com/avmnu-sng/rspec-tracer/tree/
|
|
164
|
+
source_code_uri: https://github.com/avmnu-sng/rspec-tracer/tree/v2.0.0.pre.2
|
|
115
165
|
changelog_uri: https://github.com/avmnu-sng/rspec-tracer/blob/main/CHANGELOG.md
|
|
116
166
|
bug_tracker_uri: https://github.com/avmnu-sng/rspec-tracer/issues
|
|
167
|
+
rubygems_mfa_required: 'true'
|
|
117
168
|
rdoc_options: []
|
|
118
169
|
require_paths:
|
|
119
170
|
- lib
|
data/lib/rspec_tracer/cache.rb
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecTracer
|
|
4
|
-
class Cache
|
|
5
|
-
attr_reader :all_examples, :duplicate_examples, :interrupted_examples,
|
|
6
|
-
:flaky_examples, :failed_examples, :pending_examples, :skipped_examples,
|
|
7
|
-
:all_files, :dependency, :examples_coverage, :run_id
|
|
8
|
-
|
|
9
|
-
def initialize
|
|
10
|
-
@cached = false
|
|
11
|
-
|
|
12
|
-
@all_examples = {}
|
|
13
|
-
@duplicate_examples = {}
|
|
14
|
-
@interrupted_examples = Set.new
|
|
15
|
-
@flaky_examples = Set.new
|
|
16
|
-
@failed_examples = Set.new
|
|
17
|
-
@pending_examples = Set.new
|
|
18
|
-
@skipped_examples = Set.new
|
|
19
|
-
@all_files = {}
|
|
20
|
-
@dependency = Hash.new { |hash, key| hash[key] = Set.new }
|
|
21
|
-
@examples_coverage = {}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Public populate-from-disk surface for ReportMerger. Replaces ten
|
|
25
|
-
# separate `cache.send(:load_*_cache, ...)` pokes at the private
|
|
26
|
-
# interface with a single contract.
|
|
27
|
-
def populate_from_disk(cache_dir, discard_run_reason: true)
|
|
28
|
-
load_all_examples_cache(cache_dir, discard_run_reason: discard_run_reason)
|
|
29
|
-
load_duplicate_examples_cache(cache_dir)
|
|
30
|
-
load_interrupted_examples_cache(cache_dir)
|
|
31
|
-
load_flaky_examples_cache(cache_dir)
|
|
32
|
-
load_failed_examples_cache(cache_dir)
|
|
33
|
-
load_pending_examples_cache(cache_dir)
|
|
34
|
-
load_skipped_examples_cache(cache_dir)
|
|
35
|
-
load_all_files_cache(cache_dir)
|
|
36
|
-
load_dependency_cache(cache_dir)
|
|
37
|
-
load_examples_coverage_cache(cache_dir)
|
|
38
|
-
|
|
39
|
-
self
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def load_cache_for_run
|
|
43
|
-
return if @cached
|
|
44
|
-
|
|
45
|
-
cache_path = RSpecTracer.cache_path
|
|
46
|
-
cache_path = File.dirname(cache_path) if RSpecTracer.parallel_tests?
|
|
47
|
-
run_id = last_run_id(cache_path)
|
|
48
|
-
|
|
49
|
-
return if run_id.nil?
|
|
50
|
-
|
|
51
|
-
starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
52
|
-
cache_dir = File.join(cache_path, run_id)
|
|
53
|
-
|
|
54
|
-
load_all_examples_cache(cache_dir)
|
|
55
|
-
load_duplicate_examples_cache(cache_dir)
|
|
56
|
-
load_interrupted_examples_cache(cache_dir)
|
|
57
|
-
load_flaky_examples_cache(cache_dir)
|
|
58
|
-
load_failed_examples_cache(cache_dir)
|
|
59
|
-
load_pending_examples_cache(cache_dir)
|
|
60
|
-
load_all_files_cache(cache_dir)
|
|
61
|
-
load_dependency_cache(cache_dir)
|
|
62
|
-
|
|
63
|
-
ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
64
|
-
|
|
65
|
-
@cached = true
|
|
66
|
-
|
|
67
|
-
elapsed = RSpecTracer::TimeFormatter.format_time(ending - starting)
|
|
68
|
-
|
|
69
|
-
RSpecTracer.logger.debug "RSpec tracer loaded cache from #{cache_dir} (took #{elapsed})"
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def cached_examples_coverage
|
|
73
|
-
return @examples_coverage if @examples_coverage_loaded
|
|
74
|
-
|
|
75
|
-
@examples_coverage_loaded = true
|
|
76
|
-
|
|
77
|
-
cache_path = RSpecTracer.cache_path
|
|
78
|
-
cache_path = File.dirname(cache_path) if RSpecTracer.parallel_tests?
|
|
79
|
-
run_id = last_run_id(cache_path)
|
|
80
|
-
|
|
81
|
-
return @examples_coverage if run_id.nil?
|
|
82
|
-
|
|
83
|
-
starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
84
|
-
cache_dir = File.join(cache_path, run_id)
|
|
85
|
-
load_examples_coverage_cache(cache_dir)
|
|
86
|
-
ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
87
|
-
elapsed = RSpecTracer::TimeFormatter.format_time(ending - starting)
|
|
88
|
-
|
|
89
|
-
RSpecTracer.logger.debug "RSpec tracer loaded cached examples coverage (took #{elapsed})"
|
|
90
|
-
|
|
91
|
-
@examples_coverage
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
private
|
|
95
|
-
|
|
96
|
-
def last_run_id(cache_dir)
|
|
97
|
-
file_name = File.join(cache_dir, 'last_run.json')
|
|
98
|
-
|
|
99
|
-
return unless File.file?(file_name)
|
|
100
|
-
|
|
101
|
-
JSON.parse(File.read(file_name, encoding: 'UTF-8'))['run_id']
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def load_all_examples_cache(cache_dir, discard_run_reason: true)
|
|
105
|
-
file_name = File.join(cache_dir, 'all_examples.json')
|
|
106
|
-
|
|
107
|
-
return unless File.file?(file_name)
|
|
108
|
-
|
|
109
|
-
@all_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).transform_values do |examples|
|
|
110
|
-
examples.transform_keys(&:to_sym)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
@all_examples.each_value do |example|
|
|
114
|
-
example[:execution_result].transform_keys!(&:to_sym) if example.key?(:execution_result)
|
|
115
|
-
example[:run_reason] = nil if discard_run_reason
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def load_duplicate_examples_cache(cache_dir)
|
|
120
|
-
file_name = File.join(cache_dir, 'duplicate_examples.json')
|
|
121
|
-
|
|
122
|
-
return unless File.file?(file_name)
|
|
123
|
-
|
|
124
|
-
@duplicate_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).transform_values do |examples|
|
|
125
|
-
examples.map { |example| example.transform_keys(&:to_sym) }
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def load_interrupted_examples_cache(cache_dir)
|
|
130
|
-
file_name = File.join(cache_dir, 'interrupted_examples.json')
|
|
131
|
-
|
|
132
|
-
return unless File.file?(file_name)
|
|
133
|
-
|
|
134
|
-
@interrupted_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).to_set
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def load_flaky_examples_cache(cache_dir)
|
|
138
|
-
file_name = File.join(cache_dir, 'flaky_examples.json')
|
|
139
|
-
|
|
140
|
-
return unless File.file?(file_name)
|
|
141
|
-
|
|
142
|
-
@flaky_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).to_set
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def load_failed_examples_cache(cache_dir)
|
|
146
|
-
file_name = File.join(cache_dir, 'failed_examples.json')
|
|
147
|
-
|
|
148
|
-
return unless File.file?(file_name)
|
|
149
|
-
|
|
150
|
-
@failed_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).to_set
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def load_pending_examples_cache(cache_dir)
|
|
154
|
-
file_name = File.join(cache_dir, 'pending_examples.json')
|
|
155
|
-
|
|
156
|
-
return unless File.file?(file_name)
|
|
157
|
-
|
|
158
|
-
@pending_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).to_set
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def load_skipped_examples_cache(cache_dir)
|
|
162
|
-
file_name = File.join(cache_dir, 'skipped_examples.json')
|
|
163
|
-
|
|
164
|
-
return unless File.file?(file_name)
|
|
165
|
-
|
|
166
|
-
@skipped_examples = JSON.parse(File.read(file_name, encoding: 'UTF-8')).to_set
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
def load_all_files_cache(cache_dir)
|
|
170
|
-
file_name = File.join(cache_dir, 'all_files.json')
|
|
171
|
-
|
|
172
|
-
return unless File.file?(file_name)
|
|
173
|
-
|
|
174
|
-
raw = JSON.parse(File.read(file_name, encoding: 'UTF-8')).transform_values do |files|
|
|
175
|
-
files.transform_keys(&:to_sym)
|
|
176
|
-
end
|
|
177
|
-
@all_files = raw.reject { |fname, _| filtered_by_current_filters?(fname) }
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def load_dependency_cache(cache_dir)
|
|
181
|
-
file_name = File.join(cache_dir, 'dependency.json')
|
|
182
|
-
|
|
183
|
-
return unless File.file?(file_name)
|
|
184
|
-
|
|
185
|
-
raw = JSON.parse(File.read(file_name, encoding: 'UTF-8')).transform_values(&:to_set)
|
|
186
|
-
@dependency = raw.transform_values do |files|
|
|
187
|
-
files.reject { |fname| filtered_by_current_filters?(fname) }.to_set
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
# True iff `file_name` matches any currently-configured filter.
|
|
192
|
-
# Applied at carry-forward seed time so newly-added filters take
|
|
193
|
-
# effect on the very next warm run instead of waiting for a cold
|
|
194
|
-
# run.
|
|
195
|
-
def filtered_by_current_filters?(file_name)
|
|
196
|
-
RSpecTracer.filters.any? { |f| f.match?(file_name: file_name) }
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def load_examples_coverage_cache(cache_dir)
|
|
200
|
-
file_name = File.join(cache_dir, 'examples_coverage.json')
|
|
201
|
-
|
|
202
|
-
return unless File.file?(file_name)
|
|
203
|
-
|
|
204
|
-
@examples_coverage = JSON.parse(File.read(file_name, encoding: 'UTF-8'))
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecTracer
|
|
4
|
-
class CoverageMerger
|
|
5
|
-
attr_reader :coverage
|
|
6
|
-
|
|
7
|
-
def initialize
|
|
8
|
-
@coverage = {}
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def merge(reports_dir)
|
|
12
|
-
return if RSpecTracer.simplecov?
|
|
13
|
-
|
|
14
|
-
reports_dir.each do |report_dir|
|
|
15
|
-
next unless File.directory?(report_dir)
|
|
16
|
-
|
|
17
|
-
raw = File.read("#{report_dir}/coverage.json", encoding: 'UTF-8')
|
|
18
|
-
cache_coverage = JSON.parse(raw)['RSpecTracer']['coverage']
|
|
19
|
-
|
|
20
|
-
cache_coverage.each_pair do |file_name, line_coverage|
|
|
21
|
-
unless @coverage.key?(file_name)
|
|
22
|
-
@coverage[file_name] = line_coverage
|
|
23
|
-
|
|
24
|
-
next
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
merge_line_coverage(file_name, line_coverage)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def merge_line_coverage(file_name, line_coverage)
|
|
35
|
-
line_coverage.each_with_index do |strength, line_number|
|
|
36
|
-
next unless strength && @coverage[file_name][line_number]
|
|
37
|
-
|
|
38
|
-
@coverage[file_name][line_number] += strength
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecTracer
|
|
4
|
-
class CoverageReporter
|
|
5
|
-
COVERAGE_MODE = {
|
|
6
|
-
array: 'array',
|
|
7
|
-
hash: 'hash'
|
|
8
|
-
}.freeze
|
|
9
|
-
|
|
10
|
-
attr_reader :mode, :coverage, :coverage_stat, :examples_coverage
|
|
11
|
-
|
|
12
|
-
def initialize
|
|
13
|
-
@mode = if !RSpecTracer.simplecov? || ::Coverage.peek_result.first.last.is_a?(Array)
|
|
14
|
-
COVERAGE_MODE[:array]
|
|
15
|
-
else
|
|
16
|
-
COVERAGE_MODE[:hash]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
@examples_coverage = Hash.new do |examples, example_id|
|
|
20
|
-
examples[example_id] = Hash.new do |files, file_path|
|
|
21
|
-
files[file_path] = {}
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def record_coverage
|
|
27
|
-
@coverage = peek_coverage
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def compute_diff(example_id)
|
|
31
|
-
peek_coverage.each_pair do |file_path, current_stats|
|
|
32
|
-
unless @coverage.key?(file_path)
|
|
33
|
-
missing_file_diff_coverage(example_id, file_path, current_stats)
|
|
34
|
-
|
|
35
|
-
next
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
next if current_stats == @coverage[file_path]
|
|
39
|
-
|
|
40
|
-
existing_file_diff_coverage(example_id, file_path, current_stats)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def generate_final_examples_coverage
|
|
45
|
-
filtered_files = Set.new
|
|
46
|
-
|
|
47
|
-
@examples_coverage.each_key do |example_id|
|
|
48
|
-
@examples_coverage[example_id].select! do |file_path|
|
|
49
|
-
next false if filtered_files.include?(file_path)
|
|
50
|
-
|
|
51
|
-
file_name = RSpecTracer::SourceFile.file_name(file_path)
|
|
52
|
-
|
|
53
|
-
if RSpecTracer.coverage_filters.any? { |filter| filter.match?(file_name: file_name) }
|
|
54
|
-
filtered_files << file_path
|
|
55
|
-
|
|
56
|
-
false
|
|
57
|
-
else
|
|
58
|
-
true
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def merge_coverage(missed_coverage)
|
|
65
|
-
record_coverage
|
|
66
|
-
|
|
67
|
-
missed_coverage.each_pair do |file_path, line_coverage|
|
|
68
|
-
line_coverage_dup = if @coverage.key?(file_path)
|
|
69
|
-
@coverage[file_path].dup
|
|
70
|
-
else
|
|
71
|
-
line_stub(file_path)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
line_coverage.each_pair do |line_number, strength|
|
|
75
|
-
index = line_number.to_i
|
|
76
|
-
line_coverage_dup[index] = (line_coverage_dup[index] || 0) + strength
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
@coverage[file_path] = line_coverage_dup.freeze
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def generate_final_coverage
|
|
84
|
-
return if @coverage_stat
|
|
85
|
-
|
|
86
|
-
all_files = final_coverage_files
|
|
87
|
-
@coverage = @coverage.slice(*all_files)
|
|
88
|
-
|
|
89
|
-
all_files.each do |file_path|
|
|
90
|
-
@coverage[file_path] ||= line_stub(file_path).freeze
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
private
|
|
95
|
-
|
|
96
|
-
def existing_file_diff_coverage(example_id, file_path, coverage_stats)
|
|
97
|
-
coverage_stats.zip(@coverage[file_path])
|
|
98
|
-
.each_with_index do |(c_stat, p_stat), line_number|
|
|
99
|
-
next if c_stat.nil? || p_stat.nil? || c_stat == p_stat
|
|
100
|
-
|
|
101
|
-
@examples_coverage[example_id][file_path][line_number] = c_stat - p_stat
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def missing_file_diff_coverage(example_id, file_path, coverage_stats)
|
|
106
|
-
coverage_stats.each_with_index do |stat, line_number|
|
|
107
|
-
next if stat.nil? || stat.zero?
|
|
108
|
-
|
|
109
|
-
@examples_coverage[example_id][file_path][line_number] = stat
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def final_coverage_files
|
|
114
|
-
all_files = @coverage.keys.to_set
|
|
115
|
-
|
|
116
|
-
if RSpecTracer.coverage_tracked_files
|
|
117
|
-
tracked_files = Dir[RSpecTracer.coverage_tracked_files].map do |file_name|
|
|
118
|
-
RSpecTracer::SourceFile.file_path(file_name)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
all_files |= tracked_files
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
all_files.select! do |file_path|
|
|
125
|
-
file_name = RSpecTracer::SourceFile.file_name(file_path)
|
|
126
|
-
|
|
127
|
-
RSpecTracer.coverage_filters.none? { |filter| filter.match?(file_name: file_name) }
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
all_files.sort
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
def peek_coverage
|
|
134
|
-
data = ::Coverage.peek_result.select do |file_path, _|
|
|
135
|
-
file_path.start_with?(RSpecTracer.root)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
return data if @mode == COVERAGE_MODE[:array]
|
|
139
|
-
|
|
140
|
-
data.transform_values { |stats| stats[:lines] }
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def line_stub(file_path)
|
|
144
|
-
case RUBY_ENGINE
|
|
145
|
-
when 'ruby'
|
|
146
|
-
ruby_line_stub(file_path)
|
|
147
|
-
when 'jruby'
|
|
148
|
-
jruby_line_stub(file_path)
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def ruby_line_stub(file_path)
|
|
153
|
-
lines = File.foreach(file_path).map { nil }
|
|
154
|
-
iseqs = [::RubyVM::InstructionSequence.compile_file(file_path)]
|
|
155
|
-
|
|
156
|
-
until iseqs.empty?
|
|
157
|
-
iseq = iseqs.pop
|
|
158
|
-
|
|
159
|
-
iseq.trace_points.each { |line_number, type| lines[line_number - 1] = 0 if type == :line }
|
|
160
|
-
iseq.each_child { |child| iseqs << child }
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
lines
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def jruby_line_stub(file_path)
|
|
167
|
-
lines = File.foreach(file_path).map { nil }
|
|
168
|
-
root_node = ::JRuby.parse(File.read(file_path, encoding: 'UTF-8'))
|
|
169
|
-
|
|
170
|
-
visitor = org.jruby.ast.visitor.NodeVisitor.impl do |_name, node|
|
|
171
|
-
if node.newline?
|
|
172
|
-
if node.respond_to?(:position)
|
|
173
|
-
lines[node.position.line] = 0
|
|
174
|
-
else
|
|
175
|
-
lines[node.line] = 0
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
node.child_nodes.each { |child| child&.accept(visitor) }
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
root_node.accept(visitor)
|
|
183
|
-
|
|
184
|
-
lines
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecTracer
|
|
4
|
-
class CoverageWriter
|
|
5
|
-
def initialize(file_name, reporter)
|
|
6
|
-
@file_name = file_name
|
|
7
|
-
@reporter = reporter
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def write_report
|
|
11
|
-
report = {
|
|
12
|
-
RSpecTracer: {
|
|
13
|
-
coverage: @reporter.coverage,
|
|
14
|
-
timestamp: Time.now.utc.to_i
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
File.write(@file_name, JSON.pretty_generate(report), encoding: 'UTF-8')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def print_stats(elapsed_time)
|
|
22
|
-
starting = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
23
|
-
|
|
24
|
-
total, covered, percent = coverage_stats
|
|
25
|
-
|
|
26
|
-
ending = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
27
|
-
elapsed = RSpecTracer::TimeFormatter.format_time((ending - starting) + elapsed_time)
|
|
28
|
-
|
|
29
|
-
RSpecTracer.logger.info <<-STATS.strip.gsub(/\s+/, ' ')
|
|
30
|
-
Coverage report generated for RSpecTracer to #{@file_name}.
|
|
31
|
-
#{covered} / #{total} LOC (#{percent}%) covered (took #{elapsed})
|
|
32
|
-
STATS
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def coverage_stats
|
|
38
|
-
total_loc = 0
|
|
39
|
-
covered_loc = 0
|
|
40
|
-
covered_percent = 0.0
|
|
41
|
-
|
|
42
|
-
@reporter.coverage.each_pair do |_file_path, line_coverage|
|
|
43
|
-
line_coverage.each do |strength|
|
|
44
|
-
next if strength.nil?
|
|
45
|
-
|
|
46
|
-
total_loc += 1
|
|
47
|
-
covered_loc += 1 if strength.positive?
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
return [total_loc, covered_loc, covered_percent] if total_loc.zero?
|
|
52
|
-
|
|
53
|
-
covered_percent = (100.0 * covered_loc / total_loc).round(2)
|
|
54
|
-
|
|
55
|
-
[total_loc, covered_loc, covered_percent]
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
namespace :assets do
|
|
4
|
-
desc 'Compiles all assets'
|
|
5
|
-
task :precompile do
|
|
6
|
-
require 'sprockets'
|
|
7
|
-
|
|
8
|
-
assets = Sprockets::Environment.new do |env|
|
|
9
|
-
env.append_path 'assets/javascripts'
|
|
10
|
-
env.append_path 'assets/stylesheets'
|
|
11
|
-
env.js_compressor = :uglifier
|
|
12
|
-
env.css_compressor = :yui
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
assets['application.js'].write_to('public/application.js')
|
|
16
|
-
assets['application.css'].write_to('public/application.css')
|
|
17
|
-
end
|
|
18
|
-
end
|