codemonitor 0.3.5 → 0.3.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54b2ce0b7c2997591225e5e7487433854b3fff767e3272b3d02210de337253cf
4
- data.tar.gz: aa9a60e54480ec4602ec108f45b84323aa04aa46f3df622a4db2a303cb1e6ec3
3
+ metadata.gz: 32f7be0ad2a196ea1dd1e420c56b9a2b1c87c2b7e0381f6e968fd1df706f86c0
4
+ data.tar.gz: 5a88b2dec7531acc15f99085ee4f456ee18a0e535cec5f242feaabc718974c96
5
5
  SHA512:
6
- metadata.gz: 47fb68d254802463f047d96ef409b111ee3f65c6e007a74122bb90151a4e4d457ed2b7b3c4e2bb6da0cc7da45284a933a43167714b39d7d6ebe291f68e8a1822
7
- data.tar.gz: 2a466e51f3cd2e5936600680068af4bdb0ee717e9fcbfcc657394d08640f2b00799e2f82a3f183093bd6e1e8c0ee286c2948b3f5f777b5eb8e2e45fd464d4fcf
6
+ metadata.gz: d34229aa5e21856c951a9b707f5269cdffbe4c4c1839b741fdddadf672829e3c94a83a08075f3abeff2e414f33eaedbebdbb42a36ab3abfecd5d7165abc54657
7
+ data.tar.gz: d6a0d476275b4738887fa4acf83948fac95700142fb3fbe0092a54dd778ee5da4182d7b8cba4f781678d4ae85d8fe34fa106dbe7c4db598f8b4baf9c3595f102
data/README.md CHANGED
@@ -12,7 +12,7 @@ Collect multiple metrics from the a Git repository.
12
12
 
13
13
  **Requirements / Setup**:
14
14
 
15
- You need a `.git` folder present in the current folder:
15
+ You need a `.git` folder present in the current folder:
16
16
 
17
17
  **Options**:
18
18
 
@@ -103,6 +103,20 @@ You can generate the `sorbet.output.json` file with this example command:
103
103
  bundle exec srb tc --metrics-prefix 'codemetrics' --metrics-file sorbet.output.json
104
104
  ```
105
105
 
106
+ ## SCC
107
+
108
+ Collect multiple metrics from [SCC](https://github.com/boyter/scc) configured.
109
+
110
+ **Requirements / Setup**:
111
+
112
+ You need a `scc.output.json` file present in the current folder.
113
+
114
+ You can generate the `scc.output.json` file with this example command:
115
+
116
+ ```
117
+ scc -f json scc.output.json
118
+ ```
119
+
106
120
  # Providers
107
121
 
108
122
  ## Console
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Engines
6
+ module Scc
7
+ class Extractor
8
+ METRICS = %i[].freeze
9
+ FIELDS = %w[Bytes Lines Code Comment Blank Complexity Count WeightedComplexity]
10
+
11
+ def initialize; end
12
+
13
+ def call(provider)
14
+ return unless requirements?
15
+
16
+ metrics = METRICS.map do |metric|
17
+ [metric, send(metric)]
18
+ end.to_h
19
+
20
+ metrics
21
+ .merge!(scc_totals)
22
+ .merge!(scc_by_file_type)
23
+
24
+ provider.emit(metrics)
25
+ end
26
+
27
+ private
28
+
29
+ def requirements?
30
+ File.exist?('scc.output.json')
31
+ end
32
+
33
+ # NOTE: This output file must be created by an external command
34
+ def scc
35
+ @scc ||= JSON.parse(File.read('scc.output.json'))
36
+ end
37
+
38
+ def scc_totals
39
+ scc.each_with_object({}) do |type, totals|
40
+ FIELDS.each do |field|
41
+ key = "scc_total_#{clean(field)}"
42
+ totals[key] = 0 unless totals.key?(key)
43
+
44
+ totals[key] += type[field]
45
+ end
46
+ end
47
+ end
48
+
49
+ def scc_by_file_type
50
+ scc.map do |type|
51
+ FIELDS.map do |field|
52
+ ["scc_type_#{clean(type['Name'])}_#{clean(field)}", type[field]]
53
+ end.to_h
54
+ end.inject(&:merge)
55
+ end
56
+
57
+ def clean(key)
58
+ key.gsub(%r{[-,./ ]}, '_').downcase
59
+ end
60
+ end
61
+ end
62
+ end
data/exe/codemonitor CHANGED
@@ -13,6 +13,7 @@ require_relative '../engines/packwerk/extractor'
13
13
  require_relative '../engines/rubocop/extractor'
14
14
  require_relative '../engines/semgrep/extractor'
15
15
  require_relative '../engines/sorbet/extractor'
16
+ require_relative '../engines/scc/extractor'
16
17
  require_relative '../engines/custom/extractor'
17
18
 
18
19
  PROVIDERS = {
@@ -30,6 +31,7 @@ EXTRACTORS = {
30
31
  rubocop: Engines::Rubocop::Extractor,
31
32
  semgrep: Engines::Semgrep::Extractor,
32
33
  sorbet: Engines::Sorbet::Extractor,
34
+ scc: Engines::Scc::Extractor,
33
35
  custom: Engines::Custom::Extractor
34
36
  }.freeze
35
37
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeMonitor
4
- VERSION = '0.3.5'
4
+ VERSION = '0.3.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codemonitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ferran Basora
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2022-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -137,6 +137,7 @@ files:
137
137
  - engines/npm/extractor.rb
138
138
  - engines/packwerk/extractor.rb
139
139
  - engines/rubocop/extractor.rb
140
+ - engines/scc/extractor.rb
140
141
  - engines/semgrep/extractor.rb
141
142
  - engines/sorbet/extractor.rb
142
143
  - exe/codemonitor