feature_map 1.2.4 → 1.2.5

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/bin/docs +18 -0
  4. data/lib/feature_map/cli.rb +45 -7
  5. data/lib/feature_map/code_features.rb +1 -0
  6. data/lib/feature_map/commit.rb +1 -0
  7. data/lib/feature_map/configuration.rb +1 -0
  8. data/lib/feature_map/constants.rb +1 -0
  9. data/lib/feature_map/mapper.rb +1 -0
  10. data/lib/feature_map/output_color.rb +1 -0
  11. data/lib/feature_map/private/additional_metrics_file.rb +1 -0
  12. data/lib/feature_map/private/assignment_applicator.rb +1 -0
  13. data/lib/feature_map/private/assignment_mappers/feature_definition_assignment.rb +14 -0
  14. data/lib/feature_map/private/assignments_file.rb +1 -0
  15. data/lib/feature_map/private/code_cov.rb +1 -0
  16. data/lib/feature_map/private/cyclomatic_complexity_calculator.rb +1 -0
  17. data/lib/feature_map/private/docs/index.html +99 -94
  18. data/lib/feature_map/private/documentation_site.rb +1 -0
  19. data/lib/feature_map/private/extension_loader.rb +1 -0
  20. data/lib/feature_map/private/feature_assigner.rb +1 -0
  21. data/lib/feature_map/private/feature_metrics_calculator.rb +1 -0
  22. data/lib/feature_map/private/feature_plugins/assignment.rb +1 -0
  23. data/lib/feature_map/private/glob_cache.rb +1 -0
  24. data/lib/feature_map/private/health_calculator.rb +1 -0
  25. data/lib/feature_map/private/lines_of_code_calculator.rb +1 -0
  26. data/lib/feature_map/private/metrics_file.rb +1 -0
  27. data/lib/feature_map/private/percentile_metrics_calculator.rb +1 -0
  28. data/lib/feature_map/private/release_notification_builder.rb +1 -0
  29. data/lib/feature_map/private/simple_cov_resultsets.rb +30 -0
  30. data/lib/feature_map/private/test_coverage_file.rb +1 -0
  31. data/lib/feature_map/private/test_pyramid_file.rb +1 -0
  32. data/lib/feature_map/private/todo_inspector.rb +1 -0
  33. data/lib/feature_map/private.rb +9 -0
  34. data/lib/feature_map/validator.rb +1 -0
  35. data/lib/feature_map.rb +5 -0
  36. metadata +17 -2
@@ -1,3 +1,4 @@
1
+ # @feature Extension System
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Extension System
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Feature Assignment
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Metrics Calculation
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'rubocop'
@@ -1,3 +1,4 @@
1
+ # @feature Code Features
1
2
  module FeatureMap
2
3
  module Private
3
4
  module FeaturePlugins
@@ -1,3 +1,4 @@
1
+ # @feature Assignment Mapping
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Metrics Calculation
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Metrics Calculation
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'parser/current'
@@ -1,3 +1,4 @@
1
+ # @feature Metrics Storage
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Metrics Calculation
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Extension System
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -0,0 +1,30 @@
1
+ # @feature Testing Tools
2
+ class SimpleCovResultsets
3
+ def self.fetch_coverage_stats(simplecov_resultsets)
4
+ root_dir = "#{Dir.pwd}/"
5
+
6
+ simplecov_resultsets.reduce({}) do |combined_stats, simplecov_resultset|
7
+ coverage_data = simplecov_resultset['RSpec']['coverage']
8
+
9
+ file_stats = coverage_data.map do |absolute_path, file_data|
10
+ relative_path = absolute_path.sub(root_dir, '')
11
+ lines_data = file_data['lines']
12
+
13
+ executable_lines = lines_data.compact.size
14
+ covered_lines = lines_data.count { |line| line&.positive? }
15
+ missed_lines = executable_lines - covered_lines
16
+ coverage_percentage = executable_lines.positive? ? ((covered_lines.to_f / executable_lines) * 100).round(2) : 0
17
+
18
+ # Return a tuple of [path, stats]
19
+ [relative_path, {
20
+ 'lines' => executable_lines,
21
+ 'hits' => covered_lines,
22
+ 'misses' => missed_lines,
23
+ 'coverage_ratio' => coverage_percentage
24
+ }]
25
+ end
26
+
27
+ combined_stats.merge(file_stats.to_h)
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,4 @@
1
+ # @feature Testing Tools
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Testing Tools
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Testing Tools
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module FeatureMap
@@ -1,3 +1,4 @@
1
+ # @feature Core Library
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'code_ownership'
@@ -21,6 +22,7 @@ require 'feature_map/private/code_cov'
21
22
  require 'feature_map/private/test_coverage_file'
22
23
  require 'feature_map/private/test_pyramid_file'
23
24
  require 'feature_map/private/additional_metrics_file'
25
+ require 'feature_map/private/simple_cov_resultsets'
24
26
  require 'feature_map/private/feature_plugins/assignment'
25
27
  require 'feature_map/private/validations/files_have_features'
26
28
  require 'feature_map/private/validations/features_up_to_date'
@@ -110,6 +112,13 @@ module FeatureMap
110
112
  TestPyramidFile.write!(unit_examples, integration_examples, regression_examples, regression_assignments)
111
113
  end
112
114
 
115
+ def self.gather_simplecov_test_coverage!(simplecov_paths)
116
+ simplecov_resultsets = simplecov_paths.map { |path| JSON.parse(File.read(path)) }
117
+ coverage_stats = SimpleCovResultsets.fetch_coverage_stats(simplecov_resultsets)
118
+
119
+ TestCoverageFile.write!(coverage_stats)
120
+ end
121
+
113
122
  def self.gather_test_coverage!(commit_sha, code_cov_token)
114
123
  coverage_stats = CodeCov.fetch_coverage_stats(commit_sha, code_cov_token)
115
124
 
@@ -1,3 +1,4 @@
1
+ # @feature Core Library
1
2
  module FeatureMap
2
3
  module Validator
3
4
  def validation_errors(files:, autocorrect: true, stage_changes: true); end
data/lib/feature_map.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # @feature Core Library
1
2
  # frozen_string_literal: true
2
3
 
3
4
  require 'set'
@@ -97,6 +98,10 @@ module FeatureMap
97
98
  Private.generate_test_pyramid!(unit_path, integration_path, regression_path, regression_assignments_path)
98
99
  end
99
100
 
101
+ def gather_simplecov_test_coverage!(simplecov_resultsets)
102
+ Private.gather_simplecov_test_coverage!(simplecov_resultsets)
103
+ end
104
+
100
105
  def gather_test_coverage!(commit_sha, code_cov_token)
101
106
  Private.gather_test_coverage!(commit_sha, code_cov_token)
102
107
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feature_map
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Beyond Finance
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-07 00:00:00.000000000 Z
11
+ date: 2025-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_ownership
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: webmock
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -210,6 +224,7 @@ files:
210
224
  - lib/feature_map/private/metrics_file.rb
211
225
  - lib/feature_map/private/percentile_metrics_calculator.rb
212
226
  - lib/feature_map/private/release_notification_builder.rb
227
+ - lib/feature_map/private/simple_cov_resultsets.rb
213
228
  - lib/feature_map/private/test_coverage_file.rb
214
229
  - lib/feature_map/private/test_pyramid_file.rb
215
230
  - lib/feature_map/private/todo_inspector.rb