Class: ClassMetrix::Extractor

Inherits:
Object
  • Object
show all
Defined in:
lib/class_metrix/extractor.rb

Instance Method Summary collapse

Constructor Details

#initialize(*types) ⇒ Extractor

Returns a new instance of Extractor.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/class_metrix/extractor.rb', line 13

def initialize(*types)
  @types = types.flatten
  @classes = []
  @filters = []
  @expand_hashes = false
  @handle_errors = false
  @modules = []
  @include_inherited = false
  @include_modules = false
  @show_source = false
  @hide_main_row = false
  @hide_key_rows = true # Default: show only main rows
  @debug_mode = false
  @debug_level = :basic
  @logger = nil # Will be initialized when debug mode is enabled
end

Instance Method Details

#debug(level = :basic) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/class_metrix/extractor.rb', line 47

def debug(level = :basic)
  @debug_mode = true
  @debug_level = level
  @logger = Utils::DebugLogger.new("Extractor", @debug_mode, level)
  @logger&.log("Debug mode enabled (level: #{level})")
  self
end

#expand_hashesObject



41
42
43
44
45
# File 'lib/class_metrix/extractor.rb', line 41

def expand_hashes
  @expand_hashes = true
  @logger&.log("Hash expansion enabled")
  self
end

#filter(pattern) ⇒ Object



36
37
38
39
# File 'lib/class_metrix/extractor.rb', line 36

def filter(pattern)
  @filters << pattern
  self
end

#from(classes) ⇒ Object



30
31
32
33
34
# File 'lib/class_metrix/extractor.rb', line 30

def from(classes)
  @classes = ClassResolver.normalize_classes(classes)
  @logger&.log("Normalized classes: #{@classes.map(&:name)}")
  self
end

#handle_errorsObject



55
56
57
58
# File 'lib/class_metrix/extractor.rb', line 55

def handle_errors
  @handle_errors = true
  self
end

#hide_key_rowsObject



112
113
114
115
# File 'lib/class_metrix/extractor.rb', line 112

def hide_key_rows
  @hide_key_rows = true
  self
end

#hide_main_rowObject

Lower-level options (for advanced usage)



107
108
109
110
# File 'lib/class_metrix/extractor.rb', line 107

def hide_main_row
  @hide_main_row = true
  self
end

#include_allObject



81
82
83
84
85
# File 'lib/class_metrix/extractor.rb', line 81

def include_all
  @include_inherited = true
  @include_modules = true
  self
end

#include_inheritedObject

Inheritance and module inclusion options



66
67
68
69
# File 'lib/class_metrix/extractor.rb', line 66

def include_inherited
  @include_inherited = true
  self
end

#include_modulesObject



71
72
73
74
# File 'lib/class_metrix/extractor.rb', line 71

def include_modules
  @include_modules = true
  self
end

#modules(module_list) ⇒ Object



60
61
62
63
# File 'lib/class_metrix/extractor.rb', line 60

def modules(module_list)
  @modules = module_list
  self
end

#show_expanded_detailsObject



100
101
102
103
104
# File 'lib/class_metrix/extractor.rb', line 100

def show_expanded_details
  @hide_main_row = false
  @hide_key_rows = false
  self
end

#show_only_keysObject



94
95
96
97
98
# File 'lib/class_metrix/extractor.rb', line 94

def show_only_keys
  @hide_main_row = true
  @hide_key_rows = false
  self
end

#show_only_mainObject

Hash expansion display options



88
89
90
91
92
# File 'lib/class_metrix/extractor.rb', line 88

def show_only_main
  @hide_main_row = false
  @hide_key_rows = true
  self
end

#show_sourceObject



76
77
78
79
# File 'lib/class_metrix/extractor.rb', line 76

def show_source
  @show_source = true
  self
end

#to_csv(filename = nil, **options) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/class_metrix/extractor.rb', line 145

def to_csv(filename = nil, **options)
  @logger&.log("Starting CSV generation...")
  data = extract_all_data

  format_options = {
    extraction_types: @types,
    show_metadata: true,
    separator: ",",
    quote_char: '"',
    flatten_hashes: true,
    null_value: "",
    comment_char: "#",
    hide_main_row: @hide_main_row,
    hide_key_rows: @hide_key_rows,
    debug_mode: @debug_mode,
    debug_level: @debug_level
  }.merge(options)

  formatted = CsvFormatter.new(data, @expand_hashes, format_options).format

  File.write(filename, formatted) if filename
  formatted
end

#to_markdown(filename = nil, **options) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/class_metrix/extractor.rb', line 117

def to_markdown(filename = nil, **options)
  @logger&.log("Starting markdown generation...")
  data = extract_all_data
  @logger&.log("Extracted data structure with #{data[:rows]&.length || 0} rows")

  format_options = {
    extraction_types: @types,
    show_missing_summary: false,
    show_footer: true,
    footer_style: :default,
    show_timestamp: false,
    show_metadata: true,
    show_classes: true,
    show_extraction_info: true,
    table_style: :standard,
    summary_style: :grouped,
    hide_main_row: @hide_main_row,
    hide_key_rows: @hide_key_rows,
    debug_mode: @debug_mode,
    debug_level: @debug_level
  }.merge(options)

  formatted = MarkdownFormatter.new(data, @expand_hashes, format_options).format

  File.write(filename, formatted) if filename
  formatted
end