class-metrix 0.1.2 → 1.0.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +48 -0
  3. data/.vscode/README.md +128 -0
  4. data/.vscode/extensions.json +31 -0
  5. data/.vscode/keybindings.json +26 -0
  6. data/.vscode/launch.json +32 -0
  7. data/.vscode/rbs.code-snippets +61 -0
  8. data/.vscode/settings.json +112 -0
  9. data/.vscode/tasks.json +240 -0
  10. data/CHANGELOG.md +73 -4
  11. data/README.md +86 -22
  12. data/Steepfile +26 -0
  13. data/docs/ARCHITECTURE.md +501 -0
  14. data/docs/CHANGELOG_EVOLUTION_EXAMPLE.md +95 -0
  15. data/examples/README.md +161 -114
  16. data/examples/basic_usage.rb +88 -0
  17. data/examples/debug_levels_demo.rb +65 -0
  18. data/examples/debug_mode_demo.rb +75 -0
  19. data/examples/inheritance_and_modules.rb +155 -0
  20. data/lib/class_metrix/extractor.rb +106 -11
  21. data/lib/class_metrix/extractors/constants_extractor.rb +155 -21
  22. data/lib/class_metrix/extractors/methods_extractor.rb +186 -21
  23. data/lib/class_metrix/extractors/multi_type_extractor.rb +8 -7
  24. data/lib/class_metrix/formatters/base/base_formatter.rb +3 -3
  25. data/lib/class_metrix/formatters/components/footer_component.rb +4 -4
  26. data/lib/class_metrix/formatters/components/generic_header_component.rb +2 -2
  27. data/lib/class_metrix/formatters/components/header_component.rb +4 -4
  28. data/lib/class_metrix/formatters/components/missing_behaviors_component.rb +7 -7
  29. data/lib/class_metrix/formatters/components/table_component/column_width_calculator.rb +56 -0
  30. data/lib/class_metrix/formatters/components/table_component/row_processor.rb +141 -0
  31. data/lib/class_metrix/formatters/components/table_component/table_data_extractor.rb +57 -0
  32. data/lib/class_metrix/formatters/components/table_component/table_renderer.rb +55 -0
  33. data/lib/class_metrix/formatters/components/table_component.rb +32 -245
  34. data/lib/class_metrix/formatters/csv_formatter.rb +3 -3
  35. data/lib/class_metrix/formatters/markdown_formatter.rb +3 -4
  36. data/lib/class_metrix/formatters/shared/markdown_table_builder.rb +12 -7
  37. data/lib/class_metrix/formatters/shared/table_builder.rb +92 -27
  38. data/lib/class_metrix/formatters/shared/value_processor.rb +72 -16
  39. data/lib/class_metrix/utils/debug_logger.rb +159 -0
  40. data/lib/class_metrix/version.rb +1 -1
  41. data/sig/class_metrix.rbs +8 -0
  42. data/sig/extractor.rbs +54 -0
  43. data/sig/extractors.rbs +84 -0
  44. data/sig/formatters_base.rbs +59 -0
  45. data/sig/formatters_components.rbs +133 -0
  46. data/sig/formatters_main.rbs +20 -0
  47. data/sig/formatters_shared.rbs +102 -0
  48. data/sig/manifest.yaml +32 -0
  49. data/sig/utils.rbs +57 -0
  50. data/sig/value_processor.rbs +11 -0
  51. data/sig/version.rbs +4 -0
  52. metadata +60 -10
  53. data/examples/advanced/error_handling.rb +0 -199
  54. data/examples/advanced/hash_expansion.rb +0 -180
  55. data/examples/basic/01_simple_constants.rb +0 -56
  56. data/examples/basic/02_simple_methods.rb +0 -99
  57. data/examples/basic/03_multi_type_extraction.rb +0 -116
  58. data/examples/components/configurable_reports.rb +0 -201
  59. data/examples/csv_output_demo.rb +0 -237
  60. data/examples/real_world/microservices_audit.rb +0 -312
  61. data/sig/class/metrix.rbs +0 -6
@@ -0,0 +1,59 @@
1
+ # Base formatter classes
2
+ module ClassMetrix
3
+ module Formatters
4
+ module Base
5
+ class BaseFormatter
6
+ attr_reader data: Hash[Symbol, untyped]
7
+ attr_reader expand_hashes: bool
8
+ attr_reader options: Hash[Symbol, untyped]
9
+
10
+ def initialize: (Hash[Symbol, untyped] data, ?bool expand_hashes, ?Hash[Symbol, untyped] options) -> void
11
+ def format: () -> String
12
+
13
+ private
14
+
15
+ def default_options: () -> Hash[Symbol, untyped]
16
+ def has_type_column?: () -> bool
17
+ def behavior_column_index: () -> Integer
18
+ def value_start_index: () -> Integer
19
+ def class_headers: () -> Array[String]
20
+ def collect_all_hash_keys: (Array[Array[untyped]] rows, Array[String] _headers) -> Hash[String, Set[String]]
21
+ def determine_table_data: () -> Hash[Symbol, untyped]
22
+ def render_markdown_table: (Hash[Symbol, untyped] table_data) -> Array[String]
23
+ def render_csv_table: (Hash[Symbol, untyped] table_data) -> Array[String]
24
+ def calculate_column_widths: (Array[String] headers, Array[Array[untyped]] rows) -> Array[Integer]
25
+ def build_header_row: (Array[String] headers, Array[Integer] widths) -> String
26
+ def build_separator_row: (Array[Integer] widths) -> String
27
+ def build_data_rows: (Array[Array[untyped]] rows, Array[String] headers, Array[Integer] widths) -> Array[String]
28
+ def build_single_data_row: (Array[untyped] row, Array[String] headers, Array[Integer] widths) -> String
29
+ def pad_row_to_header_length: (Array[untyped] row, Integer header_length) -> Array[untyped]
30
+ def format_row_cells: (Array[untyped] row, Array[Integer] widths) -> Array[String]
31
+ def truncate_cell: (String cell, Integer max_width) -> String
32
+ def truncate_hash_representation: (String text, Integer max_width) -> String
33
+ def format_cell: (untyped cell) -> String
34
+ def format_csv_cell: (untyped cell) -> String
35
+ def process_value: (untyped value, ?Symbol format) -> String
36
+ def safe_hash_lookup: (Hash[untyped, untyped] hash, untyped key) -> untyped
37
+ def has_hash_key?: (Hash[untyped, untyped] hash, untyped key) -> bool
38
+ end
39
+
40
+ class BaseComponent
41
+ attr_reader data: Hash[Symbol, untyped]
42
+ attr_reader options: Hash[Symbol, untyped]
43
+ attr_reader value_processor: untyped
44
+
45
+ def initialize: (Hash[Symbol, untyped] data, ?Hash[Symbol, untyped] options) -> void
46
+ def generate: () -> Array[String]
47
+
48
+ private
49
+
50
+ def has_type_column?: () -> bool
51
+ def behavior_column_index: () -> Integer
52
+ def value_start_index: () -> Integer
53
+ def class_headers: () -> Array[String]
54
+ def extraction_types_description: () -> String
55
+ def format_timestamp: () -> String
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,133 @@
1
+ # Component classes for formatters
2
+ module ClassMetrix
3
+ module Formatters
4
+ module Components
5
+ class HeaderComponent < Base::BaseComponent
6
+ def generate: () -> Array[String]
7
+ def generate_title: () -> Array[String]
8
+
9
+ private
10
+
11
+ def generate_title_section: () -> Array[String]
12
+ def generate_classes_section: () -> Array[String]
13
+ def generate_extraction_info: () -> Array[String]
14
+ end
15
+
16
+ class TableComponent < Base::BaseComponent
17
+ def generate: () -> Array[String]
18
+
19
+ private
20
+
21
+ def process_table_data: () -> Hash[Symbol, untyped]
22
+ def build_table: (Hash[Symbol, untyped] processed_data) -> Array[String]
23
+
24
+ class TableDataExtractor
25
+ @headers: Array[String]
26
+
27
+ def initialize: (Array[String] headers) -> void
28
+ def behavior_column_index: () -> Integer
29
+ def value_start_index: () -> Integer
30
+ def class_headers: () -> Array[String]
31
+ def has_type_column?: () -> bool
32
+ def row_has_expandable_hash?: (Array[untyped] row) -> bool
33
+ def extract_row_data: (Array[untyped] row) -> Hash[Symbol, untyped]
34
+ def collect_hash_keys: (Array[untyped] values) -> Set[String]
35
+
36
+ private
37
+
38
+ def determine_hash_presence: (Array[untyped] row) -> bool
39
+ end
40
+
41
+ class RowProcessor
42
+ @data_extractor: TableDataExtractor
43
+ @hide_main_row: bool
44
+ @hide_key_rows: bool
45
+
46
+ def initialize: (TableDataExtractor data_extractor, ?Hash[Symbol, untyped] options) -> void
47
+ def process_simple_rows: (Array[Array[untyped]] rows) -> Array[Array[untyped]]
48
+ def process_expanded_rows: (Array[Array[untyped]] rows) -> Array[Array[untyped]]
49
+
50
+ private
51
+
52
+ def process_non_hash_row: (Array[untyped] row) -> Array[untyped]
53
+ def expand_row: (Array[untyped] row) -> Array[Array[untyped]]
54
+ def build_expanded_rows: (Hash[Symbol, untyped] row_data, Set[String] all_hash_keys, Array[untyped] original_row) -> Array[Array[untyped]]
55
+ def should_show_main_row?: () -> bool
56
+ def should_show_key_rows?: () -> bool
57
+ def build_main_expanded_row: (Hash[Symbol, untyped] row_data) -> Array[untyped]
58
+ def build_key_rows: (Set[String] all_hash_keys, Hash[Symbol, untyped] row_data, Array[untyped] original_row) -> Array[Array[untyped]]
59
+ def build_key_row: (String key, Hash[Symbol, untyped] row_data, Array[untyped] original_row) -> Array[untyped]
60
+ def process_key_values: (String key, Array[untyped] values, Array[untyped] original_row) -> Array[untyped]
61
+ def extract_hash_value: (untyped value, String key) -> untyped
62
+ def handle_non_hash_value: (Array[untyped] original_row, Integer index) -> untyped
63
+ end
64
+
65
+ class ColumnWidthCalculator
66
+ @table_style: Symbol
67
+ @min_column_width: Integer
68
+ @max_column_width: Integer
69
+
70
+ def initialize: (?table_style: Symbol, ?min_column_width: Integer, ?max_column_width: Integer) -> void
71
+ def calculate: (Integer col_count, Array[String] headers, Array[Array[untyped]] rows) -> Array[Integer]
72
+ def calculate_widths: (Array[String] headers, Array[Array[untyped]] rows) -> Array[Integer]
73
+
74
+ private
75
+
76
+ def initialize_column_widths: (Integer col_count, Array[String] headers) -> Array[Integer]
77
+ def update_widths_from_rows: (Array[Integer] widths, Array[Array[untyped]] rows, Integer col_count) -> void
78
+ def apply_minimum_widths: (Array[Integer] widths) -> Array[Integer]
79
+ def calculate_cell_width: (untyped cell) -> Integer
80
+ end
81
+
82
+ class TableRenderer
83
+ @table_style: Symbol
84
+ @max_column_width: Integer
85
+
86
+ def initialize: (?table_style: Symbol, ?max_column_width: Integer) -> void
87
+ def render: (Array[String] headers, Array[Array[untyped]] rows, Array[Integer] column_widths) -> Array[String]
88
+ def render_table: (Array[String] headers, Array[Array[untyped]] rows, Array[Integer] column_widths) -> Array[String]
89
+
90
+ private
91
+
92
+ def build_row: (Array[untyped] cells, Array[Integer] col_widths) -> String
93
+ def build_separator: (Array[Integer] col_widths) -> String
94
+ def format_cells: (Array[untyped] cells, Array[Integer] col_widths) -> Array[String]
95
+ def format_cell_content: (untyped cell) -> String
96
+ end
97
+ end
98
+
99
+ class FooterComponent < Base::BaseComponent
100
+ def initialize: (Hash[Symbol, untyped] options) -> void
101
+ def generate: () -> Array[String]
102
+ def generate_detailed_footer: () -> Array[String]
103
+ def generate_default_footer: () -> Array[String]
104
+
105
+ private
106
+
107
+ def build_footer_content: () -> Array[String]
108
+ end
109
+
110
+ class MissingBehaviorsComponent < Base::BaseComponent
111
+ @missing_behaviors: Hash[String, Hash[String, String]]
112
+
113
+ def generate: () -> Array[String]
114
+ def track_missing_behaviors: () -> void
115
+ def generate_missing_behaviors_summary: () -> Array[String]
116
+ def generate_grouped_summary: () -> Array[String]
117
+ def generate_flat_summary: () -> Array[String]
118
+ def generate_detailed_summary: () -> Array[String]
119
+
120
+ private
121
+
122
+ def find_missing_behaviors: () -> Hash[String, Array[String]]
123
+ def format_missing_behaviors: (Hash[String, Array[String]] missing) -> Array[String]
124
+ end
125
+
126
+ class GenericHeaderComponent < Base::BaseComponent
127
+ def generate: () -> Array[String]
128
+ def generate_markdown_header: () -> Array[String]
129
+ def generate_csv_header: () -> Array[String]
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,20 @@
1
+ # Main formatter classes
2
+ module ClassMetrix
3
+ class MarkdownFormatter < Formatters::Base::BaseFormatter
4
+ def initialize: (Hash[Symbol, untyped] data, ?bool expand_hashes, ?Hash[Symbol, untyped] options) -> void
5
+ def format: () -> String
6
+
7
+ private
8
+
9
+ def generate_markdown_content: () -> String
10
+ end
11
+
12
+ class CsvFormatter < Formatters::Base::BaseFormatter
13
+ def initialize: (Hash[Symbol, untyped] data, ?bool expand_hashes, ?Hash[Symbol, untyped] options) -> void
14
+ def format: () -> String
15
+
16
+ private
17
+
18
+ def generate_csv_content: () -> String
19
+ end
20
+ end
@@ -0,0 +1,102 @@
1
+ # Shared table builder classes and value processor
2
+ module ClassMetrix
3
+ module Formatters
4
+ module Shared
5
+ class ValueProcessor
6
+ def self.process_for_markdown: (untyped value, ?debug_mode: bool, ?debug_level: Symbol) -> String
7
+ def self.process_for_csv: (untyped value, ?Hash[Symbol, untyped] options, ?debug_mode: bool, ?debug_level: Symbol) -> String
8
+ def self.process_csv_value_by_type: (untyped value, untyped logger, String null_value) -> String
9
+ def self.process_hash_for_csv: (Hash[untyped, untyped] value, untyped logger) -> String
10
+ def self.process_array_for_csv: (Array[untyped] value, untyped logger) -> String
11
+ def self.process_string_for_csv: (String value, String null_value) -> String
12
+ def self.process_other_for_csv: (untyped value, untyped logger) -> String
13
+ def self.safe_hash_lookup: (Hash[untyped, untyped] hash, untyped key, ?debug_mode: bool, ?debug_level: Symbol) -> untyped
14
+ def self.has_hash_key?: (Hash[untyped, untyped] hash, untyped key, ?debug_mode: bool, ?debug_level: Symbol) -> bool
15
+ def self.missing_constant: () -> String
16
+ def self.missing_method: () -> String
17
+ def self.handle_extraction_error: (Exception error) -> String
18
+ def self.missing_hash_key: () -> String
19
+ end
20
+ class TableBuilder
21
+ @data: Hash[Symbol, untyped]
22
+ @expand_hashes: bool
23
+ @options: Hash[Symbol, untyped]
24
+
25
+ def initialize: (Hash[Symbol, untyped] data, bool expand_hashes, Hash[Symbol, untyped] options) -> void
26
+ def build: () -> Array[String]
27
+ def build_simple_table: () -> Hash[Symbol, untyped]
28
+ def build_expanded_table: () -> Hash[Symbol, untyped]
29
+ def build_flattened_table: () -> Hash[Symbol, untyped]
30
+ def process_rows_for_expansion: (Array[String] headers) -> Array[Array[untyped]]
31
+ def row_has_expandable_hash?: (Array[untyped] row) -> bool
32
+ def create_flattened_rows: (Array[Array[untyped]] rows, Array[String] headers, Hash[String, Set[String]] all_hash_keys) -> Array[Array[untyped]]
33
+ def has_type_column?: () -> bool
34
+ def behavior_column_index: () -> Integer
35
+ def value_start_index: () -> Integer
36
+ def class_headers: () -> Array[String]
37
+ def process_row: (Array[untyped] row) -> Array[untyped]
38
+ def process_value: (untyped value) -> String
39
+ def expand_row: (Array[untyped] row, Array[String] _headers) -> Array[Array[untyped]]
40
+ def collect_hash_keys_from_values: (Array[untyped] values) -> Set[String]
41
+ def build_expanded_row_set: (Array[untyped] row, String behavior_name, Array[untyped] values, Set[String] all_hash_keys) -> Array[Array[untyped]]
42
+ def should_show_main_row?: () -> bool
43
+ def should_show_key_rows?: () -> bool
44
+ def build_main_row: (Array[untyped] row, String behavior_name, Array[untyped] values) -> Array[untyped]
45
+ def build_sub_rows: (Set[String] all_hash_keys, Array[untyped] values) -> Array[Array[untyped]]
46
+ def build_single_sub_row: (String key, Array[untyped] values) -> Array[untyped]
47
+ def extract_key_values: (Array[untyped] values, String key) -> Array[untyped]
48
+ def extract_single_key_value: (untyped value, String key) -> untyped
49
+ def extract_hash_value_for_key: (Hash[untyped, untyped] hash, String key) -> untyped
50
+ def collect_all_hash_keys: (Array[Array[untyped]] rows, Array[String] _headers) -> Hash[String, Set[String]]
51
+ def collect_hash_keys_for_row: (Array[untyped] row, Integer value_start_idx, Hash[String, Set[String]] all_keys) -> Integer
52
+ def create_flattened_headers: (Array[String] headers, Hash[String, Set[String]] all_hash_keys) -> Array[String]
53
+ def add_hash_key_headers: (Array[String] flattened, Hash[String, Set[String]] all_hash_keys, Array[String] class_hdrs) -> void
54
+ def add_behavior_key_headers: (Array[String] flattened, String behavior_name, Set[String] keys, Array[String] class_hdrs) -> void
55
+ def flatten_row: (Array[untyped] row, Array[String] _headers, Hash[String, Set[String]] all_hash_keys) -> Array[untyped]
56
+ def extract_hash_key_value: (Hash[untyped, untyped] hash, String key) -> untyped
57
+ def add_flattened_hash_values: (Array[untyped] flattened, Array[untyped] row, String behavior_name, Hash[String, Set[String]] all_hash_keys) -> void
58
+ def add_flattened_values_for_key: (Array[untyped] flattened, Array[untyped] values, String key) -> void
59
+ def extract_flattened_value: (untyped value, String key) -> untyped
60
+ def get_null_value: () -> String
61
+
62
+ private
63
+
64
+ def create_header_row: (Array[String] headers) -> String
65
+ def create_separator_row: (Array[String] headers) -> String
66
+ def create_data_row: (Array[untyped] row) -> String
67
+ end
68
+
69
+ class MarkdownTableBuilder < TableBuilder
70
+ def build: () -> Array[String]
71
+ def process_value: (untyped value) -> String
72
+ def get_null_value: () -> String
73
+ def expand_row: (Array[untyped] row, Array[String] _headers) -> Array[Array[untyped]]
74
+ def collect_unique_hash_keys: (Array[untyped] values) -> Set[String]
75
+ def build_expanded_row_structure: (Array[untyped] row, String behavior_name, Array[untyped] values, Set[String] all_hash_keys) -> Array[Array[untyped]]
76
+ def build_main_row: (Array[untyped] row, String behavior_name, Array[untyped] values) -> Array[untyped]
77
+ def build_hash_key_rows: (Array[untyped] row, String behavior_name, Array[untyped] values, Set[String] all_hash_keys) -> Array[Array[untyped]]
78
+ def build_single_key_row: (Array[untyped] row, String behavior_name, Array[untyped] values, String key) -> Array[untyped]
79
+ def extract_key_values_for_row: (Array[untyped] values, String key) -> Array[untyped]
80
+ def extract_single_key_value: (untyped value, String key) -> untyped
81
+ def extract_hash_key_value: (Hash[untyped, untyped] hash, String key) -> untyped
82
+
83
+ private
84
+
85
+ def create_header_row: (Array[String] headers) -> String
86
+ def create_separator_row: (Array[String] headers) -> String
87
+ def create_data_row: (Array[untyped] row) -> String
88
+ end
89
+
90
+ class CsvTableBuilder < TableBuilder
91
+ def build: () -> Array[String]
92
+ def process_value: (untyped value) -> String
93
+ def get_null_value: () -> String
94
+
95
+ private
96
+
97
+ def create_csv_row: (Array[untyped] row) -> String
98
+ def escape_csv_value: (untyped value) -> String
99
+ end
100
+ end
101
+ end
102
+ end
data/sig/manifest.yaml ADDED
@@ -0,0 +1,32 @@
1
+ # manifest.yaml for RBS type definitions
2
+ # This file defines the structure and dependencies of the RBS signatures
3
+
4
+ dependencies:
5
+ - name: csv
6
+ version: "~> 3.0"
7
+ - name: pathname
8
+ version: "~> 0.2"
9
+ - name: json
10
+ version: "~> 2.0"
11
+ - name: fileutils
12
+ version: "~> 1.0"
13
+
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
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
24
+
25
+ coverage_targets:
26
+ - lib/class_metrix.rb
27
+ - lib/class_metrix/version.rb
28
+ - lib/class_metrix/extractor.rb
29
+ - lib/class_metrix/extractors/
30
+ - lib/class_metrix/formatters/
31
+ - lib/class_metrix/utils/
32
+ - lib/class_metrix/processors/
data/sig/utils.rbs ADDED
@@ -0,0 +1,57 @@
1
+ # Utility classes
2
+ module ClassMetrix
3
+ module Utils
4
+ class ClassResolver
5
+ def self.normalize_classes: (Array[Class | String] classes) -> Array[Class]
6
+ def self.resolve_class: (Class | String klass) -> Class
7
+ def self.string_to_class: (String class_name) -> Class
8
+ end
9
+
10
+ class DebugLogger
11
+ LEVELS: Hash[Symbol, Integer]
12
+
13
+ @component_name: String
14
+ @debug_mode: bool
15
+ @level: Integer
16
+
17
+ def initialize: (String component_name, bool debug_mode, Symbol debug_level) -> void
18
+ def log: (String message, ?Symbol level) -> void
19
+ def enabled?: () -> bool
20
+ def log_safe_operation: (String operation_name, ?Symbol level) { () -> untyped } -> untyped
21
+ def log_summary: (String operation, Array[untyped] items) { (untyped item, Integer index) -> void } -> void
22
+ def log_decision: (String decision, String reason, ?Symbol level) -> void
23
+ def log_anomaly: (String description) -> void
24
+ def safe_inspect: (untyped value) -> String
25
+ def safe_class: (untyped value) -> String
26
+ def safe_keys: (untyped value) -> String
27
+ def safe_length: (untyped value) -> String
28
+ def safe_truncate: (String str, Integer max_length) -> String
29
+ def safe_to_s: (untyped value) -> String
30
+ def log_value_details: (untyped value, ?Integer? index, ?Symbol level) -> void
31
+ def log_hash_detection: (untyped value, ?Integer? index, ?Symbol level) -> void
32
+ def log_hash_detection_summary: (Array[untyped] values) -> void
33
+ def set_level: (Symbol level) -> void
34
+
35
+ private
36
+
37
+ def should_log?: (Symbol level) -> bool
38
+ def format_message: (String message) -> String
39
+ end
40
+ end
41
+ end
42
+
43
+ # Root level classes for processors
44
+ class ValueProcessor
45
+ def self.process: (untyped value, ?expand_hashes: bool) -> untyped
46
+ def self.format_hash: (Hash[untyped, untyped] hash) -> String
47
+ def self.expand_hash: (Hash[untyped, untyped] hash) -> Array[Hash[Symbol, untyped]]
48
+ def self.handle_extraction_error: (Exception error) -> String
49
+ def self.missing_constant: () -> String
50
+ def self.missing_method: () -> String
51
+ end
52
+
53
+ # Root level utility class references
54
+ module ClassMetrix
55
+ class ClassResolver < Utils::ClassResolver
56
+ end
57
+ end
@@ -0,0 +1,11 @@
1
+ # Legacy value processor for backward compatibility
2
+ module ClassMetrix
3
+ class ValueProcessor
4
+ def self.process: (untyped value, ?expand_hashes: bool) -> (String | Array[Hash[Symbol, untyped]])
5
+ def self.format_hash: (Hash[untyped, untyped] hash) -> String
6
+ def self.expand_hash: (Hash[untyped, untyped] hash) -> Array[Hash[Symbol, untyped]]
7
+ def self.handle_extraction_error: (Exception error) -> String
8
+ def self.missing_constant: () -> String
9
+ def self.missing_method: () -> String
10
+ end
11
+ end
data/sig/version.rbs ADDED
@@ -0,0 +1,4 @@
1
+ # Version information
2
+ module ClassMetrix
3
+ VERSION: String
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class-metrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huy Nguyen
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2025-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rbs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: steep
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
41
69
  description: ClassMetrix allows you to easily extract and compare constants and class
42
70
  methods across multiple Ruby classes, generating clean markdown tables for analysis
43
71
  and documentation.
@@ -47,23 +75,30 @@ executables: []
47
75
  extensions: []
48
76
  extra_rdoc_files: []
49
77
  files:
78
+ - ".editorconfig"
50
79
  - ".rspec"
51
80
  - ".rubocop.yml"
52
81
  - ".tool-versions"
82
+ - ".vscode/README.md"
83
+ - ".vscode/extensions.json"
84
+ - ".vscode/keybindings.json"
85
+ - ".vscode/launch.json"
86
+ - ".vscode/rbs.code-snippets"
87
+ - ".vscode/settings.json"
88
+ - ".vscode/tasks.json"
53
89
  - CHANGELOG.md
54
90
  - LICENSE.txt
55
91
  - README.md
56
92
  - RELEASE_GUIDE.md
57
93
  - Rakefile
94
+ - Steepfile
95
+ - docs/ARCHITECTURE.md
96
+ - docs/CHANGELOG_EVOLUTION_EXAMPLE.md
58
97
  - examples/README.md
59
- - examples/advanced/error_handling.rb
60
- - examples/advanced/hash_expansion.rb
61
- - examples/basic/01_simple_constants.rb
62
- - examples/basic/02_simple_methods.rb
63
- - examples/basic/03_multi_type_extraction.rb
64
- - examples/components/configurable_reports.rb
65
- - examples/csv_output_demo.rb
66
- - examples/real_world/microservices_audit.rb
98
+ - examples/basic_usage.rb
99
+ - examples/debug_levels_demo.rb
100
+ - examples/debug_mode_demo.rb
101
+ - examples/inheritance_and_modules.rb
67
102
  - lib/class_metrix.rb
68
103
  - lib/class_metrix/extractor.rb
69
104
  - lib/class_metrix/extractors/constants_extractor.rb
@@ -76,6 +111,10 @@ files:
76
111
  - lib/class_metrix/formatters/components/header_component.rb
77
112
  - lib/class_metrix/formatters/components/missing_behaviors_component.rb
78
113
  - lib/class_metrix/formatters/components/table_component.rb
114
+ - lib/class_metrix/formatters/components/table_component/column_width_calculator.rb
115
+ - lib/class_metrix/formatters/components/table_component/row_processor.rb
116
+ - lib/class_metrix/formatters/components/table_component/table_data_extractor.rb
117
+ - lib/class_metrix/formatters/components/table_component/table_renderer.rb
79
118
  - lib/class_metrix/formatters/csv_formatter.rb
80
119
  - lib/class_metrix/formatters/markdown_formatter.rb
81
120
  - lib/class_metrix/formatters/shared/csv_table_builder.rb
@@ -84,8 +123,19 @@ files:
84
123
  - lib/class_metrix/formatters/shared/value_processor.rb
85
124
  - lib/class_metrix/processors/value_processor.rb
86
125
  - lib/class_metrix/utils/class_resolver.rb
126
+ - lib/class_metrix/utils/debug_logger.rb
87
127
  - lib/class_metrix/version.rb
88
- - sig/class/metrix.rbs
128
+ - sig/class_metrix.rbs
129
+ - sig/extractor.rbs
130
+ - sig/extractors.rbs
131
+ - sig/formatters_base.rbs
132
+ - sig/formatters_components.rbs
133
+ - sig/formatters_main.rbs
134
+ - sig/formatters_shared.rbs
135
+ - sig/manifest.yaml
136
+ - sig/utils.rbs
137
+ - sig/value_processor.rbs
138
+ - sig/version.rbs
89
139
  homepage: https://github.com/patrick204nqh/class-metrix
90
140
  licenses:
91
141
  - MIT