class-metrix 1.0.1 → 1.1.0

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.
@@ -11,11 +11,11 @@ puts "=" * 30
11
11
  class User
12
12
  ROLE = "user"
13
13
  MAX_LOGIN_ATTEMPTS = 3
14
-
14
+
15
15
  def self.permissions
16
16
  ["read"]
17
17
  end
18
-
18
+
19
19
  def self.session_timeout
20
20
  3600
21
21
  end
@@ -24,11 +24,11 @@ end
24
24
  class Admin
25
25
  ROLE = "admin"
26
26
  MAX_LOGIN_ATTEMPTS = 5
27
-
27
+
28
28
  def self.permissions
29
29
  ["read", "write", "admin"]
30
30
  end
31
-
31
+
32
32
  def self.session_timeout
33
33
  7200
34
34
  end
@@ -40,33 +40,33 @@ classes = [User, Admin]
40
40
  puts "\n1. Constants Comparison"
41
41
  puts "-" * 25
42
42
  result = ClassMetrix.extract(:constants)
43
- .from(classes)
44
- .to_markdown
43
+ .from(classes)
44
+ .to_markdown
45
45
  puts result
46
46
 
47
47
  # 2. Extract class methods
48
- puts "\n2. Class Methods Comparison"
48
+ puts "\n2. Class Methods Comparison"
49
49
  puts "-" * 25
50
50
  result = ClassMetrix.extract(:class_methods)
51
- .from(classes)
52
- .to_markdown
51
+ .from(classes)
52
+ .to_markdown
53
53
  puts result
54
54
 
55
55
  # 3. Combined extraction
56
56
  puts "\n3. Combined Analysis"
57
57
  puts "-" * 25
58
58
  result = ClassMetrix.extract(:constants, :class_methods)
59
- .from(classes)
60
- .to_markdown
59
+ .from(classes)
60
+ .to_markdown
61
61
  puts result
62
62
 
63
63
  # 4. Filtered analysis
64
64
  puts "\n4. Filtered Analysis (ROLE and permissions only)"
65
65
  puts "-" * 25
66
66
  result = ClassMetrix.extract(:constants, :class_methods)
67
- .from(classes)
68
- .filter(/ROLE|permissions/)
69
- .to_markdown
67
+ .from(classes)
68
+ .filter(/ROLE|permissions/)
69
+ .to_markdown
70
70
  puts result
71
71
 
72
72
  # 5. Hash expansion
@@ -75,14 +75,14 @@ puts "-" * 25
75
75
 
76
76
  class ConfigExample
77
77
  SETTINGS = { timeout: 30, retries: 3, ssl: true }.freeze
78
-
78
+
79
79
  def self.database_config
80
80
  { host: "localhost", port: 5432, pool_size: 5 }
81
81
  end
82
82
  end
83
83
 
84
84
  result = ClassMetrix.extract(:constants, :class_methods)
85
- .from([ConfigExample])
86
- .expand_hashes
87
- .to_markdown
88
- puts result
85
+ .from([ConfigExample])
86
+ .expand_hashes
87
+ .to_markdown
88
+ puts result
@@ -9,7 +9,7 @@ require_relative '../lib/class_metrix'
9
9
  # Example classes
10
10
  class ServiceA
11
11
  CONFIG = { host: 'localhost', port: 3000, timeout: 30 }
12
-
12
+
13
13
  def self.get_settings
14
14
  { cache: true, retries: 3 }
15
15
  end
@@ -17,7 +17,7 @@ end
17
17
 
18
18
  class ServiceB
19
19
  CONFIG = { host: 'remote', port: 8080 }
20
-
20
+
21
21
  def self.get_settings
22
22
  { cache: false, retries: 1 }
23
23
  end
@@ -30,36 +30,35 @@ puts
30
30
  levels = [:basic, :detailed, :verbose]
31
31
 
32
32
  levels.each do |level|
33
- puts "\n" + "="*50
33
+ puts "\n" + "=" * 50
34
34
  puts "DEBUG LEVEL: #{level.upcase}"
35
- puts "="*50
36
-
35
+ puts "=" * 50
36
+
37
37
  begin
38
38
  result = ClassMetrix.extract(:constants, :class_methods)
39
- .from([ServiceA, ServiceB])
40
- .expand_hashes
41
- .debug(level) # Set debug level
42
- .to_markdown
43
-
39
+ .from([ServiceA, ServiceB])
40
+ .expand_hashes
41
+ .debug(level) # Set debug level
42
+ .to_markdown
43
+
44
44
  puts "\n--- Result Summary ---"
45
45
  puts "Report generated successfully! ✅"
46
46
  puts "Lines in output: #{result.lines.count}"
47
-
48
47
  rescue => e
49
48
  puts "Error: #{e.class}: #{e.message}"
50
49
  end
51
-
50
+
52
51
  puts "\n"
53
52
  end
54
53
 
55
- puts "\n" + "="*50
54
+ puts "\n" + "=" * 50
56
55
  puts "DEBUG LEVEL SUMMARY"
57
- puts "="*50
56
+ puts "=" * 50
58
57
  puts
59
58
  puts ":basic - Key decisions and summaries only"
60
- puts ":detailed - More context and intermediate steps"
59
+ puts ":detailed - More context and intermediate steps"
61
60
  puts ":verbose - Full details including individual value processing"
62
61
  puts
63
62
  puts "Use :basic for general troubleshooting"
64
63
  puts "Use :detailed for understanding data flow"
65
- puts "Use :verbose for deep debugging of specific values"
64
+ puts "Use :verbose for deep debugging of specific values"
@@ -9,7 +9,7 @@ require_relative '../lib/class_metrix'
9
9
  # Example classes with different types of values
10
10
  class SafeService
11
11
  CONFIG = { host: 'localhost', port: 3000 }
12
-
12
+
13
13
  def self.timeout_config
14
14
  { connect: 30, read: 60 }
15
15
  end
@@ -18,7 +18,7 @@ end
18
18
  class ProblematicService
19
19
  # This constant is a Class object (not a Hash)
20
20
  CONFIG_CLASS = SafeService
21
-
21
+
22
22
  def self.service_config
23
23
  SafeService::CONFIG
24
24
  end
@@ -29,11 +29,11 @@ class ProblematicObject
29
29
  def inspect
30
30
  raise "Inspect not allowed!"
31
31
  end
32
-
32
+
33
33
  def to_s
34
34
  raise "To_s not allowed!"
35
35
  end
36
-
36
+
37
37
  def class
38
38
  raise "Class not allowed!"
39
39
  end
@@ -41,7 +41,7 @@ end
41
41
 
42
42
  class WeirdService
43
43
  BROKEN_OBJECT = ProblematicObject.new
44
-
44
+
45
45
  def self.get_config
46
46
  { normal: 'value', broken: ProblematicObject.new }
47
47
  end
@@ -58,18 +58,17 @@ puts
58
58
 
59
59
  begin
60
60
  result = ClassMetrix.extract(:constants, :class_methods)
61
- .from([SafeService, ProblematicService, WeirdService])
62
- .expand_hashes
63
- .handle_errors
64
- .debug # Enable debug mode
65
- .to_markdown
66
-
61
+ .from([SafeService, ProblematicService, WeirdService])
62
+ .expand_hashes
63
+ .handle_errors
64
+ .debug # Enable debug mode
65
+ .to_markdown
66
+
67
67
  puts "\n=== Generated Report ==="
68
68
  puts result[0..500] + "..." if result.length > 500
69
69
  puts "\nReport generated successfully! ✅"
70
70
  puts "Note: Debug output above shows how problematic objects were handled safely."
71
-
72
71
  rescue => e
73
72
  puts "Error: #{e.class}: #{e.message}"
74
73
  puts "This should not happen with the safety improvements!"
75
- end
74
+ end
@@ -11,11 +11,11 @@ puts "=" * 50
11
11
 
12
12
  module Configurable
13
13
  DEFAULT_TIMEOUT = 30
14
-
14
+
15
15
  def self.included(base)
16
16
  base.extend(ClassMethods)
17
17
  end
18
-
18
+
19
19
  module ClassMethods
20
20
  def configuration
21
21
  { timeout: DEFAULT_TIMEOUT, enabled: true }
@@ -25,11 +25,11 @@ end
25
25
 
26
26
  module Cacheable
27
27
  CACHE_TTL = 3600
28
-
28
+
29
29
  def self.included(base)
30
30
  base.extend(ClassMethods)
31
31
  end
32
-
32
+
33
33
  module ClassMethods
34
34
  def cache_config
35
35
  { ttl: CACHE_TTL, enabled: true }
@@ -39,11 +39,11 @@ end
39
39
 
40
40
  class BaseService
41
41
  SERVICE_VERSION = "1.0"
42
-
42
+
43
43
  def self.service_type
44
44
  "base"
45
45
  end
46
-
46
+
47
47
  def self.health_check
48
48
  { status: "ok", version: SERVICE_VERSION }
49
49
  end
@@ -51,14 +51,14 @@ end
51
51
 
52
52
  class DatabaseService < BaseService
53
53
  include Configurable
54
-
54
+
55
55
  SERVICE_NAME = "database"
56
56
  CONNECTION_POOL_SIZE = 5
57
-
57
+
58
58
  def self.service_type
59
59
  "database"
60
60
  end
61
-
61
+
62
62
  def self.connection_config
63
63
  { pool_size: CONNECTION_POOL_SIZE, timeout: 60 }
64
64
  end
@@ -67,14 +67,14 @@ end
67
67
  class CacheService < BaseService
68
68
  include Configurable
69
69
  include Cacheable
70
-
71
- SERVICE_NAME = "cache"
70
+
71
+ SERVICE_NAME = "cache"
72
72
  MAX_MEMORY = "512MB"
73
-
73
+
74
74
  def self.service_type
75
75
  "cache"
76
76
  end
77
-
77
+
78
78
  def self.memory_config
79
79
  { max_memory: MAX_MEMORY, eviction_policy: "lru" }
80
80
  end
@@ -86,43 +86,43 @@ services = [DatabaseService, CacheService]
86
86
  puts "\n1. Basic Analysis (Own Constants Only)"
87
87
  puts "-" * 40
88
88
  result = ClassMetrix.extract(:constants)
89
- .from(services)
90
- .to_markdown
89
+ .from(services)
90
+ .to_markdown
91
91
  puts result
92
92
 
93
93
  puts "\n2. With Inheritance (Own + Parent Constants)"
94
94
  puts "-" * 40
95
95
  result = ClassMetrix.extract(:constants)
96
- .from(services)
97
- .include_inherited
98
- .to_markdown
96
+ .from(services)
97
+ .include_inherited
98
+ .to_markdown
99
99
  puts result
100
100
 
101
101
  puts "\n3. With Modules (Own + Module Constants)"
102
102
  puts "-" * 40
103
103
  result = ClassMetrix.extract(:constants)
104
- .from(services)
105
- .include_modules
106
- .to_markdown
104
+ .from(services)
105
+ .include_modules
106
+ .to_markdown
107
107
  puts result
108
108
 
109
109
  puts "\n4. Complete Analysis (Own + Inherited + Modules)"
110
110
  puts "-" * 40
111
111
  result = ClassMetrix.extract(:constants, :class_methods)
112
- .from(services)
113
- .include_all
114
- .handle_errors
115
- .to_markdown
112
+ .from(services)
113
+ .include_all
114
+ .handle_errors
115
+ .to_markdown
116
116
  puts result
117
117
 
118
118
  puts "\n5. Filtered Configuration Analysis"
119
119
  puts "-" * 40
120
120
  result = ClassMetrix.extract(:constants, :class_methods)
121
- .from(services)
122
- .include_all
123
- .filter(/config|timeout|service/i)
124
- .expand_hashes
125
- .to_markdown
121
+ .from(services)
122
+ .include_all
123
+ .filter(/config|timeout|service/i)
124
+ .expand_hashes
125
+ .to_markdown
126
126
  puts result
127
127
 
128
128
  puts "\n6. Hash Expansion Modes"
@@ -130,26 +130,26 @@ puts "-" * 40
130
130
 
131
131
  puts "\n6a. Default: Show Only Main Rows (Collapsed Hashes)"
132
132
  result = ClassMetrix.extract(:class_methods)
133
- .from([CacheService])
134
- .filter(/config/)
135
- .expand_hashes
136
- .to_markdown
133
+ .from([CacheService])
134
+ .filter(/config/)
135
+ .expand_hashes
136
+ .to_markdown
137
137
  puts result
138
138
 
139
139
  puts "\n6b. Show Only Key Rows (Expanded Details)"
140
140
  result = ClassMetrix.extract(:class_methods)
141
- .from([CacheService])
142
- .filter(/config/)
143
- .expand_hashes
144
- .show_only_keys
145
- .to_markdown
141
+ .from([CacheService])
142
+ .filter(/config/)
143
+ .expand_hashes
144
+ .show_only_keys
145
+ .to_markdown
146
146
  puts result
147
147
 
148
148
  puts "\n6c. Show Both Main and Key Rows"
149
149
  result = ClassMetrix.extract(:class_methods)
150
- .from([CacheService])
151
- .filter(/config/)
152
- .expand_hashes
153
- .show_expanded_details
154
- .to_markdown
155
- puts result
150
+ .from([CacheService])
151
+ .filter(/config/)
152
+ .expand_hashes
153
+ .show_expanded_details
154
+ .to_markdown
155
+ puts result
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ClassMetrix
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
data/sig/manifest.yaml CHANGED
@@ -3,24 +3,24 @@
3
3
 
4
4
  dependencies:
5
5
  - name: csv
6
- version: "~> 3.0"
6
+ version: ~> 3.0
7
7
  - name: pathname
8
- version: "~> 0.2"
8
+ version: ~> 0.2
9
9
  - name: json
10
- version: "~> 2.0"
10
+ version: ~> 2.0
11
11
  - name: fileutils
12
- version: "~> 1.0"
12
+ version: ~> 1.0
13
13
 
14
14
  type_definitions:
15
- - class_metrix.rbs # Main module and entry point
16
- - version.rbs # Version constant
17
- - extractor.rbs # Core extractor fluent interface
18
- - extractors.rbs # Specialized extractor classes
19
- - formatters_base.rbs # Base formatter and component classes
15
+ - class_metrix.rbs # Main module and entry point
16
+ - version.rbs # Version constant
17
+ - extractor.rbs # Core extractor fluent interface
18
+ - extractors.rbs # Specialized extractor classes
19
+ - formatters_base.rbs # Base formatter and component classes
20
20
  - formatters_components.rbs # Component classes for formatters
21
- - formatters_shared.rbs # Shared table builder classes
22
- - formatters_main.rbs # Main formatter classes
23
- - utils.rbs # Utility classes and processors
21
+ - formatters_shared.rbs # Shared table builder classes
22
+ - formatters_main.rbs # Main formatter classes
23
+ - utils.rbs # Utility classes and processors
24
24
 
25
25
  coverage_targets:
26
26
  - lib/class_metrix.rb
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class-metrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huy Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-07 00:00:00.000000000 Z
11
+ date: 2025-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: brakeman
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rbs
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,34 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.22'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.22'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov_json_formatter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: steep
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -76,6 +118,10 @@ extensions: []
76
118
  extra_rdoc_files: []
77
119
  files:
78
120
  - ".editorconfig"
121
+ - ".prettierrc.json"
122
+ - ".qlty/.gitignore"
123
+ - ".qlty/configs/.yamllint.yaml"
124
+ - ".qlty/qlty.toml"
79
125
  - ".rspec"
80
126
  - ".rubocop.yml"
81
127
  - ".tool-versions"
@@ -83,17 +129,19 @@ files:
83
129
  - ".vscode/extensions.json"
84
130
  - ".vscode/keybindings.json"
85
131
  - ".vscode/launch.json"
86
- - ".vscode/rbs.code-snippets"
87
132
  - ".vscode/settings.json"
88
133
  - ".vscode/tasks.json"
89
134
  - CHANGELOG.md
90
135
  - LICENSE.txt
91
136
  - README.md
92
- - RELEASE_GUIDE.md
93
137
  - Rakefile
94
138
  - Steepfile
139
+ - config/brakeman.yml
95
140
  - docs/ARCHITECTURE.md
96
141
  - docs/CHANGELOG_EVOLUTION_EXAMPLE.md
142
+ - docs/QLTY_INTEGRATION.md
143
+ - docs/RELEASE_GUIDE.md
144
+ - docs/SLACK_INTEGRATION.md
97
145
  - examples/README.md
98
146
  - examples/basic_usage.rb
99
147
  - examples/debug_levels_demo.rb
@@ -1,61 +0,0 @@
1
- {
2
- "RBS Class Definition": {
3
- "prefix": "rbsclass",
4
- "body": [
5
- "class ${1:ClassName}",
6
- " ${2:# Instance variables}",
7
- " ${3:@var}: ${4:Type}",
8
- "",
9
- " ${5:# Methods}",
10
- " def initialize: (${6:params}) -> void",
11
- " def ${7:method_name}: (${8:params}) -> ${9:ReturnType}",
12
- "",
13
- " private",
14
- "",
15
- " def ${10:private_method}: () -> ${11:ReturnType}",
16
- "end"
17
- ],
18
- "description": "RBS class definition template"
19
- },
20
- "RBS Module Definition": {
21
- "prefix": "rbsmodule",
22
- "body": [
23
- "module ${1:ModuleName}",
24
- " ${2:# Module methods}",
25
- " def self.${3:method_name}: (${4:params}) -> ${5:ReturnType}",
26
- "",
27
- " ${6:# Instance methods}",
28
- " def ${7:method_name}: (${8:params}) -> ${9:ReturnType}",
29
- "end"
30
- ],
31
- "description": "RBS module definition template"
32
- },
33
- "RBS Method Definition": {
34
- "prefix": "rbsmethod",
35
- "body": [
36
- "def ${1:method_name}: (${2:params}) -> ${3:ReturnType}"
37
- ],
38
- "description": "RBS method definition"
39
- },
40
- "RBS Attribute Reader": {
41
- "prefix": "rbsattr_reader",
42
- "body": [
43
- "attr_reader ${1:attribute}: ${2:Type}"
44
- ],
45
- "description": "RBS attribute reader"
46
- },
47
- "RBS Attribute Writer": {
48
- "prefix": "rbsattr_writer",
49
- "body": [
50
- "attr_writer ${1:attribute}: ${2:Type}"
51
- ],
52
- "description": "RBS attribute writer"
53
- },
54
- "RBS Attribute Accessor": {
55
- "prefix": "rbsattr_accessor",
56
- "body": [
57
- "attr_accessor ${1:attribute}: ${2:Type}"
58
- ],
59
- "description": "RBS attribute accessor"
60
- }
61
- }