makit 0.0.112 → 0.0.126

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/cli/build_commands.rb +500 -500
  6. data/lib/makit/cli/generators/base_generator.rb +74 -74
  7. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  8. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  9. data/lib/makit/cli/generators/node_generator.rb +50 -50
  10. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  11. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  12. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  13. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  14. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  15. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
  16. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  17. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  18. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  19. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  20. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  21. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  22. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  23. data/lib/makit/cli/main.rb +62 -62
  24. data/lib/makit/cli/project_commands.rb +868 -868
  25. data/lib/makit/cli/repository_commands.rb +661 -661
  26. data/lib/makit/cli/utility_commands.rb +521 -521
  27. data/lib/makit/commands/factory.rb +359 -359
  28. data/lib/makit/commands/middleware/base.rb +73 -73
  29. data/lib/makit/commands/middleware/cache.rb +248 -248
  30. data/lib/makit/commands/middleware/command_logger.rb +311 -320
  31. data/lib/makit/commands/middleware/validator.rb +269 -269
  32. data/lib/makit/commands/request.rb +316 -254
  33. data/lib/makit/commands/result.rb +323 -323
  34. data/lib/makit/commands/runner.rb +368 -337
  35. data/lib/makit/commands/strategies/base.rb +171 -160
  36. data/lib/makit/commands/strategies/synchronous.rb +139 -134
  37. data/lib/makit/commands.rb +50 -51
  38. data/lib/makit/configuration/gitlab_helper.rb +58 -60
  39. data/lib/makit/configuration/project.rb +167 -127
  40. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  41. data/lib/makit/configuration/step.rb +34 -34
  42. data/lib/makit/configuration.rb +14 -14
  43. data/lib/makit/content/default_gitignore.rb +7 -7
  44. data/lib/makit/content/default_gitignore.txt +226 -0
  45. data/lib/makit/content/default_rakefile.rb +13 -13
  46. data/lib/makit/content/gem_rakefile.rb +16 -16
  47. data/lib/makit/context.rb +1 -1
  48. data/lib/makit/data.rb +49 -49
  49. data/lib/makit/directories.rb +140 -141
  50. data/lib/makit/directory.rb +262 -262
  51. data/lib/makit/docs/files.rb +89 -89
  52. data/lib/makit/docs/rake.rb +102 -102
  53. data/lib/makit/dotnet/cli.rb +69 -65
  54. data/lib/makit/dotnet/project.rb +217 -153
  55. data/lib/makit/dotnet/solution.rb +38 -38
  56. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  57. data/lib/makit/dotnet/solution_console.rb +264 -264
  58. data/lib/makit/dotnet/solution_maui.rb +354 -354
  59. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  60. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  61. data/lib/makit/dotnet.rb +102 -102
  62. data/lib/makit/email.rb +90 -90
  63. data/lib/makit/environment.rb +142 -142
  64. data/lib/makit/examples/runner.rb +370 -370
  65. data/lib/makit/exceptions.rb +45 -45
  66. data/lib/makit/fileinfo.rb +24 -24
  67. data/lib/makit/files.rb +43 -43
  68. data/lib/makit/gems.rb +40 -40
  69. data/lib/makit/git/cli.rb +54 -54
  70. data/lib/makit/git/repository.rb +90 -90
  71. data/lib/makit/git.rb +98 -98
  72. data/lib/makit/gitlab_runner.rb +59 -59
  73. data/lib/makit/humanize.rb +137 -137
  74. data/lib/makit/indexer.rb +47 -47
  75. data/lib/makit/logging/configuration.rb +308 -305
  76. data/lib/makit/logging/format_registry.rb +84 -84
  77. data/lib/makit/logging/formatters/base.rb +39 -39
  78. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  79. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  80. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  81. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  82. data/lib/makit/logging/log_request.rb +119 -115
  83. data/lib/makit/logging/logger.rb +199 -163
  84. data/lib/makit/logging/sinks/base.rb +91 -91
  85. data/lib/makit/logging/sinks/console.rb +72 -72
  86. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  87. data/lib/makit/logging/sinks/structured.rb +123 -129
  88. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -303
  89. data/lib/makit/logging.rb +565 -530
  90. data/lib/makit/markdown.rb +75 -75
  91. data/lib/makit/mp/basic_object_mp.rb +17 -17
  92. data/lib/makit/mp/command_mp.rb +13 -13
  93. data/lib/makit/mp/command_request.mp.rb +17 -17
  94. data/lib/makit/mp/project_mp.rb +199 -199
  95. data/lib/makit/mp/string_mp.rb +191 -193
  96. data/lib/makit/nuget.rb +74 -74
  97. data/lib/makit/port.rb +32 -32
  98. data/lib/makit/process.rb +163 -163
  99. data/lib/makit/protoc.rb +107 -107
  100. data/lib/makit/rake/cli.rb +196 -196
  101. data/lib/makit/rake.rb +25 -25
  102. data/lib/makit/ruby/cli.rb +185 -185
  103. data/lib/makit/ruby.rb +25 -25
  104. data/lib/makit/secrets.rb +51 -51
  105. data/lib/makit/serializer.rb +130 -130
  106. data/lib/makit/services/builder.rb +186 -186
  107. data/lib/makit/services/error_handler.rb +226 -226
  108. data/lib/makit/services/repository_manager.rb +231 -229
  109. data/lib/makit/services/validator.rb +112 -112
  110. data/lib/makit/setup/classlib.rb +90 -53
  111. data/lib/makit/setup/gem.rb +268 -263
  112. data/lib/makit/setup/razorclasslib.rb +91 -0
  113. data/lib/makit/setup/runner.rb +54 -45
  114. data/lib/makit/setup.rb +5 -5
  115. data/lib/makit/show.rb +110 -110
  116. data/lib/makit/storage.rb +126 -126
  117. data/lib/makit/symbols.rb +170 -170
  118. data/lib/makit/task_info.rb +128 -128
  119. data/lib/makit/tasks/at_exit.rb +15 -13
  120. data/lib/makit/tasks/build.rb +22 -19
  121. data/lib/makit/tasks/clean.rb +13 -11
  122. data/lib/makit/tasks/configure.rb +10 -0
  123. data/lib/makit/tasks/format.rb +10 -0
  124. data/lib/makit/tasks/hook_manager.rb +391 -393
  125. data/lib/makit/tasks/init.rb +49 -47
  126. data/lib/makit/tasks/integrate.rb +29 -17
  127. data/lib/makit/tasks/pull_incoming.rb +13 -11
  128. data/lib/makit/tasks/setup.rb +13 -6
  129. data/lib/makit/tasks/sync.rb +17 -12
  130. data/lib/makit/tasks/tag.rb +16 -15
  131. data/lib/makit/tasks/task_monkey_patch.rb +81 -79
  132. data/lib/makit/tasks/test.rb +22 -0
  133. data/lib/makit/tasks/update.rb +18 -0
  134. data/lib/makit/tasks.rb +20 -15
  135. data/lib/makit/test_cache.rb +239 -239
  136. data/lib/makit/tree.rb +37 -37
  137. data/lib/makit/v1/makit.v1_pb.rb +35 -34
  138. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  139. data/lib/makit/version.rb +5 -5
  140. data/lib/makit/version_util.rb +21 -21
  141. data/lib/makit/wix.rb +95 -95
  142. data/lib/makit/yaml.rb +29 -29
  143. data/lib/makit/zip.rb +17 -17
  144. data/lib/makit copy.rb +44 -44
  145. data/lib/makit.rb +39 -40
  146. metadata +69 -7
  147. data/lib/makit/commands/middleware/unified_logger.rb +0 -243
@@ -1,84 +1,84 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- module Logging
5
- # Registry for managing available log formatters
6
- #
7
- # Provides a centralized way to register, retrieve, and manage formatters
8
- # by name. This allows for easy extension and configuration of formatters.
9
- #
10
- # @example Registering a custom formatter
11
- # FormatRegistry.register(:audit, AuditFormatter)
12
- # formatter = FormatRegistry.get(:audit).new
13
- #
14
- # @example Using built-in formatters
15
- # formatter = FormatRegistry.get(:json).new
16
- # formatter = FormatRegistry.get(:text).new(timestamp_format: "%H:%M:%S")
17
- class FormatRegistry
18
- @formatters = {}
19
-
20
- class << self
21
- # @return [Hash] registered formatters
22
- attr_reader :formatters
23
-
24
- # Register a formatter class with a name
25
- #
26
- # @param name [Symbol, String] the name to register the formatter under
27
- # @param formatter_class [Class] the formatter class to register
28
- # @return [void]
29
- def register(name, formatter_class)
30
- @formatters[name.to_sym] = formatter_class
31
- end
32
-
33
- # Get a formatter class by name
34
- #
35
- # @param name [Symbol, String] the name of the formatter
36
- # @return [Class] the formatter class
37
- # @raise [ArgumentError] if formatter is not found
38
- def get(name)
39
- @formatters[name.to_sym] || raise(ArgumentError, "Unknown formatter: #{name}")
40
- end
41
-
42
- # Get all available formatter names
43
- #
44
- # @return [Array<Symbol>] list of registered formatter names
45
- def available_formats
46
- @formatters.keys
47
- end
48
-
49
- # Check if a formatter is registered
50
- #
51
- # @param name [Symbol, String] the name to check
52
- # @return [Boolean] true if formatter is registered
53
- def registered?(name)
54
- @formatters.key?(name.to_sym)
55
- end
56
-
57
- # Clear all registered formatters
58
- #
59
- # @return [void]
60
- def clear
61
- @formatters.clear
62
- end
63
-
64
- # Register built-in formatters
65
- #
66
- # @return [void]
67
- def register_built_ins
68
- require_relative "formatters/json_formatter"
69
- require_relative "formatters/text_formatter"
70
- require_relative "formatters/plain_text_formatter"
71
- require_relative "formatters/console_formatter"
72
-
73
- register(:json, Formatters::JsonFormatter)
74
- register(:text, Formatters::TextFormatter)
75
- register(:plain, Formatters::PlainTextFormatter)
76
- register(:console, Formatters::ConsoleFormatter)
77
- end
78
- end
79
-
80
- # Initialize registry with built-in formatters
81
- register_built_ins
82
- end
83
- end
84
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ module Logging
5
+ # Registry for managing available log formatters
6
+ #
7
+ # Provides a centralized way to register, retrieve, and manage formatters
8
+ # by name. This allows for easy extension and configuration of formatters.
9
+ #
10
+ # @example Registering a custom formatter
11
+ # FormatRegistry.register(:audit, AuditFormatter)
12
+ # formatter = FormatRegistry.get(:audit).new
13
+ #
14
+ # @example Using built-in formatters
15
+ # formatter = FormatRegistry.get(:json).new
16
+ # formatter = FormatRegistry.get(:text).new(timestamp_format: "%H:%M:%S")
17
+ class FormatRegistry
18
+ @formatters = {}
19
+
20
+ class << self
21
+ # @return [Hash] registered formatters
22
+ attr_reader :formatters
23
+
24
+ # Register a formatter class with a name
25
+ #
26
+ # @param name [Symbol, String] the name to register the formatter under
27
+ # @param formatter_class [Class] the formatter class to register
28
+ # @return [void]
29
+ def register(name, formatter_class)
30
+ @formatters[name.to_sym] = formatter_class
31
+ end
32
+
33
+ # Get a formatter class by name
34
+ #
35
+ # @param name [Symbol, String] the name of the formatter
36
+ # @return [Class] the formatter class
37
+ # @raise [ArgumentError] if formatter is not found
38
+ def get(name)
39
+ @formatters[name.to_sym] || raise(ArgumentError, "Unknown formatter: #{name}")
40
+ end
41
+
42
+ # Get all available formatter names
43
+ #
44
+ # @return [Array<Symbol>] list of registered formatter names
45
+ def available_formats
46
+ @formatters.keys
47
+ end
48
+
49
+ # Check if a formatter is registered
50
+ #
51
+ # @param name [Symbol, String] the name to check
52
+ # @return [Boolean] true if formatter is registered
53
+ def registered?(name)
54
+ @formatters.key?(name.to_sym)
55
+ end
56
+
57
+ # Clear all registered formatters
58
+ #
59
+ # @return [void]
60
+ def clear
61
+ @formatters.clear
62
+ end
63
+
64
+ # Register built-in formatters
65
+ #
66
+ # @return [void]
67
+ def register_built_ins
68
+ require_relative "formatters/json_formatter"
69
+ require_relative "formatters/text_formatter"
70
+ require_relative "formatters/plain_text_formatter"
71
+ require_relative "formatters/console_formatter"
72
+
73
+ register(:json, Formatters::JsonFormatter)
74
+ register(:text, Formatters::TextFormatter)
75
+ register(:plain, Formatters::PlainTextFormatter)
76
+ register(:console, Formatters::ConsoleFormatter)
77
+ end
78
+ end
79
+
80
+ # Initialize registry with built-in formatters
81
+ register_built_ins
82
+ end
83
+ end
84
+ end
@@ -1,39 +1,39 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- module Logging
5
- module Formatters
6
- # Base class for all logging formatters
7
- #
8
- # Formatters handle the conversion of log requests into formatted strings
9
- # that can be written to various outputs (console, files, etc.).
10
- # This separates formatting concerns from output routing concerns.
11
- #
12
- # @example Creating a custom formatter
13
- # class CustomFormatter < Base
14
- # def format(log_request)
15
- # "#{log_request.level.upcase}: #{log_request.message}"
16
- # end
17
- # end
18
- class Base
19
- # Format a log request into a string
20
- #
21
- # @param log_request [LogRequest] the log request to format
22
- # @return [String] the formatted log entry
23
- def format(log_request)
24
- raise NotImplementedError, "Subclasses must implement #format"
25
- end
26
-
27
- # Get formatter configuration
28
- #
29
- # @return [Hash] formatter configuration
30
- def config
31
- {
32
- name: self.class.name.split("::").last,
33
- type: self.class.name,
34
- }
35
- end
36
- end
37
- end
38
- end
39
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ module Logging
5
+ module Formatters
6
+ # Base class for all logging formatters
7
+ #
8
+ # Formatters handle the conversion of log requests into formatted strings
9
+ # that can be written to various outputs (console, files, etc.).
10
+ # This separates formatting concerns from output routing concerns.
11
+ #
12
+ # @example Creating a custom formatter
13
+ # class CustomFormatter < Base
14
+ # def format(log_request)
15
+ # "#{log_request.level.upcase}: #{log_request.message}"
16
+ # end
17
+ # end
18
+ class Base
19
+ # Format a log request into a string
20
+ #
21
+ # @param log_request [LogRequest] the log request to format
22
+ # @return [String] the formatted log entry
23
+ def format(log_request)
24
+ raise NotImplementedError, "Subclasses must implement #format"
25
+ end
26
+
27
+ # Get formatter configuration
28
+ #
29
+ # @return [Hash] formatter configuration
30
+ def config
31
+ {
32
+ name: self.class.name.split("::").last,
33
+ type: self.class.name,
34
+ }
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,140 +1,140 @@
1
- # frozen_string_literal: true
2
-
3
- begin
4
- require "colorize"
5
- rescue LoadError
6
- # colorize gem not available, define a no-op colorize method
7
- class String
8
- def colorize(*args)
9
- self
10
- end
11
- end
12
- end
13
- require_relative "base"
14
-
15
- module Makit
16
- module Logging
17
- module Formatters
18
- # Console formatter for colored log output
19
- #
20
- # Formats log requests for console display with colors, symbols, and optional
21
- # timestamps/levels. This is specifically designed for human-readable console output.
22
- #
23
- # @example
24
- # formatter = ConsoleFormatter.new
25
- # formatted = formatter.format(log_request)
26
- # # => "→ Processing started" (with appropriate color)
27
- class ConsoleFormatter < Base
28
- # @return [Boolean] whether to show timestamps
29
- attr_reader :show_timestamp
30
- # @return [Boolean] whether to show log levels
31
- attr_reader :show_level
32
-
33
- # Initialize console formatter
34
- #
35
- # @param show_timestamp [Boolean] whether to show timestamps (default: false)
36
- # @param show_level [Boolean] whether to show log levels (default: false)
37
- def initialize(show_timestamp: false, show_level: false)
38
- @show_timestamp = show_timestamp
39
- @show_level = show_level
40
- end
41
-
42
- # Format log request for console display
43
- #
44
- # @param log_request [LogRequest] the log request to format
45
- # @return [String] console formatted log entry with colors
46
- def format(log_request)
47
- parts = []
48
-
49
- # Add timestamp if enabled
50
- if @show_timestamp
51
- timestamp = log_request.timestamp.strftime("%H:%M:%S")
52
- parts << "[#{timestamp}]".colorize(:light_black)
53
- end
54
-
55
- # Add log level if enabled
56
- if @show_level
57
- level_str = log_request.level.to_s.upcase
58
- level_color = get_level_color(log_request.level)
59
- parts << level_str.colorize(level_color)
60
- end
61
-
62
- # Add symbol and message
63
- symbol = get_level_symbol(log_request.level)
64
- symbol_color = get_level_color(log_request.level)
65
- message = log_request.message
66
-
67
- # Special handling for task messages - no symbol, no context, just the message
68
- if log_request.context[:task_message]
69
- parts << message
70
- else
71
- # Add context if present (only for non-task messages)
72
- if !log_request.context.empty?
73
- context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
74
- message += " #{context_str}".colorize(:light_black)
75
- end
76
- parts << "#{symbol} #{message}".colorize(symbol_color)
77
- end
78
-
79
- parts.join(" ")
80
- end
81
-
82
- # Get formatter configuration
83
- #
84
- # @return [Hash] formatter configuration
85
- def config
86
- super.merge(
87
- show_timestamp: @show_timestamp,
88
- show_level: @show_level,
89
- )
90
- end
91
-
92
- private
93
-
94
- # Get the color for a log level
95
- #
96
- # @param level [Symbol] the log level
97
- # @return [Symbol] the color for the level
98
- def get_level_color(level)
99
- case level
100
- when :debug
101
- :grey
102
- when :info
103
- :grey
104
- when :warn
105
- :light_yellow
106
- when :error, :fatal
107
- :light_red
108
- when :success
109
- :green
110
- else
111
- :white
112
- end
113
- end
114
-
115
- # Get the symbol for a log level
116
- #
117
- # @param level [Symbol] the log level
118
- # @return [String] the symbol for the level
119
- def get_level_symbol(level)
120
- case level
121
- when :debug
122
- "•"
123
- when :info
124
- " " #"→"
125
- when :warn
126
- "!" #"⚠"
127
- when :error
128
- "✗"
129
- when :fatal
130
- "💀"
131
- when :success
132
- "✓"
133
- else
134
- "•"
135
- end
136
- end
137
- end
138
- end
139
- end
140
- end
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "colorize"
5
+ rescue LoadError
6
+ # colorize gem not available, define a no-op colorize method
7
+ class String
8
+ def colorize(*_args)
9
+ self
10
+ end
11
+ end
12
+ end
13
+ require_relative "base"
14
+
15
+ module Makit
16
+ module Logging
17
+ module Formatters
18
+ # Console formatter for colored log output
19
+ #
20
+ # Formats log requests for console display with colors, symbols, and optional
21
+ # timestamps/levels. This is specifically designed for human-readable console output.
22
+ #
23
+ # @example
24
+ # formatter = ConsoleFormatter.new
25
+ # formatted = formatter.format(log_request)
26
+ # # => "→ Processing started" (with appropriate color)
27
+ class ConsoleFormatter < Base
28
+ # @return [Boolean] whether to show timestamps
29
+ attr_reader :show_timestamp
30
+ # @return [Boolean] whether to show log levels
31
+ attr_reader :show_level
32
+
33
+ # Initialize console formatter
34
+ #
35
+ # @param show_timestamp [Boolean] whether to show timestamps (default: false)
36
+ # @param show_level [Boolean] whether to show log levels (default: false)
37
+ def initialize(show_timestamp: false, show_level: false)
38
+ @show_timestamp = show_timestamp
39
+ @show_level = show_level
40
+ end
41
+
42
+ # Format log request for console display
43
+ #
44
+ # @param log_request [LogRequest] the log request to format
45
+ # @return [String] console formatted log entry with colors
46
+ def format(log_request)
47
+ parts = []
48
+
49
+ # Add timestamp if enabled
50
+ if @show_timestamp
51
+ timestamp = log_request.timestamp.strftime("%H:%M:%S")
52
+ parts << "[#{timestamp}]".colorize(:light_black)
53
+ end
54
+
55
+ # Add log level if enabled
56
+ if @show_level
57
+ level_str = log_request.level.to_s.upcase
58
+ level_color = get_level_color(log_request.level)
59
+ parts << level_str.colorize(level_color)
60
+ end
61
+
62
+ # Add symbol and message
63
+ symbol = get_level_symbol(log_request.level)
64
+ symbol_color = get_level_color(log_request.level)
65
+ message = log_request.message
66
+
67
+ # Special handling for task messages - no symbol, no context, just the message
68
+ if log_request.context[:task_message]
69
+ parts << message
70
+ else
71
+ # Add context if present (only for non-task messages)
72
+ unless log_request.context.empty?
73
+ context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
74
+ message += " #{context_str}".colorize(:light_black)
75
+ end
76
+ parts << "#{symbol} #{message}".colorize(symbol_color)
77
+ end
78
+
79
+ parts.join(" ")
80
+ end
81
+
82
+ # Get formatter configuration
83
+ #
84
+ # @return [Hash] formatter configuration
85
+ def config
86
+ super.merge(
87
+ show_timestamp: @show_timestamp,
88
+ show_level: @show_level,
89
+ )
90
+ end
91
+
92
+ private
93
+
94
+ # Get the color for a log level
95
+ #
96
+ # @param level [Symbol] the log level
97
+ # @return [Symbol] the color for the level
98
+ def get_level_color(level)
99
+ case level
100
+ when :debug
101
+ :grey
102
+ when :info
103
+ :grey
104
+ when :warn
105
+ :light_yellow
106
+ when :error, :fatal
107
+ :light_red
108
+ when :success
109
+ :green
110
+ else
111
+ :white
112
+ end
113
+ end
114
+
115
+ # Get the symbol for a log level
116
+ #
117
+ # @param level [Symbol] the log level
118
+ # @return [String] the symbol for the level
119
+ def get_level_symbol(level)
120
+ case level
121
+ when :debug
122
+ "•"
123
+ when :info
124
+ " " # "→"
125
+ when :warn
126
+ "!" # "⚠"
127
+ when :error
128
+ "✗"
129
+ when :fatal
130
+ "💀"
131
+ when :success
132
+ "✓"
133
+ else
134
+ "•"
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,65 +1,65 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
- require_relative "base"
5
-
6
- module Makit
7
- module Logging
8
- module Formatters
9
- # JSON formatter for structured logging
10
- #
11
- # Formats log requests as JSON objects with timestamp, level, message, and context.
12
- # This is ideal for log aggregation systems and structured data analysis.
13
- #
14
- # @example
15
- # formatter = JsonFormatter.new
16
- # formatted = formatter.format(log_request)
17
- # # => '{"timestamp":"2024-01-15T10:30:45Z","level":"INFO","message":"User logged in","context":{"user_id":123}}'
18
- class JsonFormatter < Base
19
- # @return [Hash] additional options for JSON formatting
20
- attr_reader :options
21
-
22
- # Initialize JSON formatter
23
- #
24
- # @param options [Hash] JSON generation options
25
- def initialize(options: {})
26
- @options = {
27
- indent: nil,
28
- space: nil,
29
- space_before: nil,
30
- object_nl: nil,
31
- array_nl: nil,
32
- allow_nan: false,
33
- max_nesting: 100,
34
- }.merge(options)
35
- end
36
-
37
- # Format log request as JSON
38
- #
39
- # @param log_request [LogRequest] the log request to format
40
- # @return [String] JSON formatted log entry
41
- def format(log_request)
42
- log_data = {
43
- timestamp: log_request.timestamp.iso8601,
44
- level: log_request.level.to_s.upcase,
45
- message: log_request.message,
46
- }
47
-
48
- # Add context if present
49
- log_data[:context] = log_request.context unless log_request.context.empty?
50
-
51
- JSON.generate(log_data, @options)
52
- end
53
-
54
- # Get formatter configuration
55
- #
56
- # @return [Hash] formatter configuration including JSON options
57
- def config
58
- super.merge(
59
- json_options: @options,
60
- )
61
- end
62
- end
63
- end
64
- end
65
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require_relative "base"
5
+
6
+ module Makit
7
+ module Logging
8
+ module Formatters
9
+ # JSON formatter for structured logging
10
+ #
11
+ # Formats log requests as JSON objects with timestamp, level, message, and context.
12
+ # This is ideal for log aggregation systems and structured data analysis.
13
+ #
14
+ # @example
15
+ # formatter = JsonFormatter.new
16
+ # formatted = formatter.format(log_request)
17
+ # # => '{"timestamp":"2024-01-15T10:30:45Z","level":"INFO","message":"User logged in","context":{"user_id":123}}'
18
+ class JsonFormatter < Base
19
+ # @return [Hash] additional options for JSON formatting
20
+ attr_reader :options
21
+
22
+ # Initialize JSON formatter
23
+ #
24
+ # @param options [Hash] JSON generation options
25
+ def initialize(options: {})
26
+ @options = {
27
+ indent: nil,
28
+ space: nil,
29
+ space_before: nil,
30
+ object_nl: nil,
31
+ array_nl: nil,
32
+ allow_nan: false,
33
+ max_nesting: 100,
34
+ }.merge(options)
35
+ end
36
+
37
+ # Format log request as JSON
38
+ #
39
+ # @param log_request [LogRequest] the log request to format
40
+ # @return [String] JSON formatted log entry
41
+ def format(log_request)
42
+ log_data = {
43
+ timestamp: log_request.timestamp.iso8601,
44
+ level: log_request.level.to_s.upcase,
45
+ message: log_request.message,
46
+ }
47
+
48
+ # Add context if present
49
+ log_data[:context] = log_request.context unless log_request.context.empty?
50
+
51
+ JSON.generate(log_data, @options)
52
+ end
53
+
54
+ # Get formatter configuration
55
+ #
56
+ # @return [Hash] formatter configuration including JSON options
57
+ def config
58
+ super.merge(
59
+ json_options: @options,
60
+ )
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end