makit 0.0.140 → 0.0.141

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 (153) 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/auto.rb +48 -48
  6. data/lib/makit/cli/build_commands.rb +500 -500
  7. data/lib/makit/cli/generators/base_generator.rb +74 -74
  8. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  9. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  10. data/lib/makit/cli/generators/node_generator.rb +50 -50
  11. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  12. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  13. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  14. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  15. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  16. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
  17. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  18. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  19. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  20. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  21. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  22. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  23. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  24. data/lib/makit/cli/main.rb +69 -69
  25. data/lib/makit/cli/project_commands.rb +868 -868
  26. data/lib/makit/cli/repository_commands.rb +661 -661
  27. data/lib/makit/cli/strategy_commands.rb +203 -203
  28. data/lib/makit/cli/utility_commands.rb +521 -521
  29. data/lib/makit/commands/factory.rb +359 -359
  30. data/lib/makit/commands/middleware/base.rb +73 -73
  31. data/lib/makit/commands/middleware/cache.rb +248 -248
  32. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  33. data/lib/makit/commands/middleware/validator.rb +269 -269
  34. data/lib/makit/commands/request.rb +316 -316
  35. data/lib/makit/commands/result.rb +323 -323
  36. data/lib/makit/commands/runner.rb +388 -385
  37. data/lib/makit/commands/strategies/base.rb +171 -171
  38. data/lib/makit/commands/strategies/child_process.rb +165 -165
  39. data/lib/makit/commands/strategies/factory.rb +136 -136
  40. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  41. data/lib/makit/commands.rb +50 -50
  42. data/lib/makit/configuration/dotnet_project.rb +12 -12
  43. data/lib/makit/configuration/gitlab_helper.rb +58 -58
  44. data/lib/makit/configuration/project.rb +168 -168
  45. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  46. data/lib/makit/configuration/step.rb +34 -34
  47. data/lib/makit/configuration/timeout.rb +74 -74
  48. data/lib/makit/configuration.rb +15 -15
  49. data/lib/makit/content/default_gitignore.rb +7 -7
  50. data/lib/makit/content/default_gitignore.txt +225 -225
  51. data/lib/makit/content/default_rakefile.rb +13 -13
  52. data/lib/makit/content/gem_rakefile.rb +16 -16
  53. data/lib/makit/context.rb +1 -1
  54. data/lib/makit/data.rb +49 -49
  55. data/lib/makit/directories.rb +140 -140
  56. data/lib/makit/directory.rb +262 -262
  57. data/lib/makit/docs/files.rb +89 -89
  58. data/lib/makit/docs/rake.rb +102 -102
  59. data/lib/makit/dotnet/cli.rb +69 -69
  60. data/lib/makit/dotnet/project.rb +217 -217
  61. data/lib/makit/dotnet/solution.rb +38 -38
  62. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  63. data/lib/makit/dotnet/solution_console.rb +264 -264
  64. data/lib/makit/dotnet/solution_maui.rb +354 -354
  65. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  66. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  67. data/lib/makit/dotnet.rb +102 -102
  68. data/lib/makit/email.rb +90 -90
  69. data/lib/makit/environment.rb +142 -142
  70. data/lib/makit/examples/runner.rb +370 -370
  71. data/lib/makit/exceptions.rb +45 -45
  72. data/lib/makit/fileinfo.rb +24 -24
  73. data/lib/makit/files.rb +43 -43
  74. data/lib/makit/gems.rb +40 -40
  75. data/lib/makit/git/cli.rb +54 -54
  76. data/lib/makit/git/repository.rb +90 -90
  77. data/lib/makit/git.rb +98 -98
  78. data/lib/makit/gitlab_runner.rb +59 -59
  79. data/lib/makit/humanize.rb +137 -137
  80. data/lib/makit/indexer.rb +47 -47
  81. data/lib/makit/logging/configuration.rb +308 -308
  82. data/lib/makit/logging/format_registry.rb +84 -84
  83. data/lib/makit/logging/formatters/base.rb +39 -39
  84. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  85. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  86. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  87. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  88. data/lib/makit/logging/log_request.rb +119 -119
  89. data/lib/makit/logging/logger.rb +199 -199
  90. data/lib/makit/logging/sinks/base.rb +91 -91
  91. data/lib/makit/logging/sinks/console.rb +72 -72
  92. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  93. data/lib/makit/logging/sinks/structured.rb +123 -123
  94. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  95. data/lib/makit/logging.rb +565 -565
  96. data/lib/makit/markdown.rb +75 -75
  97. data/lib/makit/mp/basic_object_mp.rb +17 -17
  98. data/lib/makit/mp/command_mp.rb +13 -13
  99. data/lib/makit/mp/command_request.mp.rb +17 -17
  100. data/lib/makit/mp/project_mp.rb +199 -199
  101. data/lib/makit/mp/string_mp.rb +199 -191
  102. data/lib/makit/nuget.rb +74 -74
  103. data/lib/makit/port.rb +32 -32
  104. data/lib/makit/process.rb +163 -163
  105. data/lib/makit/protoc.rb +107 -107
  106. data/lib/makit/rake/cli.rb +196 -196
  107. data/lib/makit/rake/trace_controller.rb +173 -173
  108. data/lib/makit/rake.rb +80 -80
  109. data/lib/makit/ruby/cli.rb +185 -185
  110. data/lib/makit/ruby.rb +25 -25
  111. data/lib/makit/secrets.rb +51 -51
  112. data/lib/makit/serializer.rb +130 -130
  113. data/lib/makit/services/builder.rb +186 -186
  114. data/lib/makit/services/error_handler.rb +226 -226
  115. data/lib/makit/services/repository_manager.rb +231 -231
  116. data/lib/makit/services/validator.rb +112 -112
  117. data/lib/makit/setup/classlib.rb +101 -101
  118. data/lib/makit/setup/gem.rb +268 -268
  119. data/lib/makit/setup/razorclasslib.rb +101 -101
  120. data/lib/makit/setup/runner.rb +54 -54
  121. data/lib/makit/setup.rb +5 -5
  122. data/lib/makit/show.rb +110 -110
  123. data/lib/makit/storage.rb +126 -126
  124. data/lib/makit/symbols.rb +170 -170
  125. data/lib/makit/task_info.rb +130 -130
  126. data/lib/makit/tasks/at_exit.rb +15 -15
  127. data/lib/makit/tasks/build.rb +22 -22
  128. data/lib/makit/tasks/clean.rb +13 -13
  129. data/lib/makit/tasks/configure.rb +10 -10
  130. data/lib/makit/tasks/format.rb +10 -10
  131. data/lib/makit/tasks/hook_manager.rb +443 -443
  132. data/lib/makit/tasks/init.rb +49 -49
  133. data/lib/makit/tasks/integrate.rb +29 -29
  134. data/lib/makit/tasks/pull_incoming.rb +13 -13
  135. data/lib/makit/tasks/setup.rb +13 -13
  136. data/lib/makit/tasks/sync.rb +17 -17
  137. data/lib/makit/tasks/tag.rb +16 -16
  138. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  139. data/lib/makit/tasks/test.rb +22 -22
  140. data/lib/makit/tasks/update.rb +18 -18
  141. data/lib/makit/tasks.rb +20 -20
  142. data/lib/makit/test_cache.rb +239 -239
  143. data/lib/makit/tree.rb +37 -37
  144. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  145. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  146. data/lib/makit/version.rb +99 -99
  147. data/lib/makit/version_util.rb +21 -21
  148. data/lib/makit/wix.rb +95 -95
  149. data/lib/makit/yaml.rb +29 -29
  150. data/lib/makit/zip.rb +17 -17
  151. data/lib/makit copy.rb +44 -44
  152. data/lib/makit.rb +42 -42
  153. metadata +2 -2
@@ -1,199 +1,199 @@
1
- # frozen_string_literal: true
2
-
3
- require "set"
4
- require_relative "log_request"
5
- require_relative "sinks/base"
6
- require_relative "sinks/console"
7
- require_relative "sinks/file_sink"
8
- require_relative "sinks/structured"
9
-
10
- module Makit
11
- module Logging
12
- # Main logger class that orchestrates logging through sinks
13
- #
14
- # This class provides a clean interface for logging with support for
15
- # sink-based output processing. It follows the same pattern as the
16
- # Commands::Runner but for logging operations.
17
- #
18
- # @example Basic usage
19
- # logger = Logger.new
20
- # logger.info("Processing started")
21
- #
22
- # @example With custom sinks
23
- # logger = Logger.new(
24
- # sinks: [
25
- # Sinks::Console.new,
26
- # Sinks::File.new(log_file: "custom.log")
27
- # ]
28
- # )
29
- #
30
- # @example Using convenience methods
31
- # logger.success("Build completed")
32
- # logger.error("Build failed", { repository: "user/repo" })
33
- class Logger
34
- # @return [Array<Sinks::Base>] list of sinks to process log requests
35
- attr_reader :sinks
36
- # @return [Symbol] minimum log level for filtering
37
- attr_reader :level
38
- # @return [Symbol] current verbosity level
39
- attr_reader :verbosity
40
-
41
- # Initialize the logger with sinks and log level
42
- #
43
- # @param sinks [Array<Sinks::Base>] list of sinks to use
44
- # @param level [Symbol] minimum log level (:debug, :info, :warn, :error, :fatal, :success)
45
- # @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
46
- def initialize(sinks: [], level: :info, verbosity: :normal)
47
- @sinks = sinks
48
- @level = level
49
- @verbosity = verbosity
50
- @logged_tasks = Set.new
51
- end
52
-
53
- # Log a message with the specified level
54
- #
55
- # @param level [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
56
- # @param message [String] the log message
57
- # @param context [Hash] additional context information
58
- # @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
59
- # @return [void]
60
- def log(level, message, context = {}, verbosity: :normal)
61
- return unless should_log?(level)
62
- return unless should_show_verbosity?(verbosity)
63
-
64
- log_request = LogRequest.new(level, message, context, verbosity: verbosity)
65
- execute_sinks(log_request)
66
- end
67
-
68
- # Log an info message
69
- #
70
- # @param message [String] the log message
71
- # @param context [Hash] additional context information
72
- # @return [void]
73
- def info(message, context = {})
74
- log(:info, message, context)
75
- end
76
-
77
- # Log a success message
78
- #
79
- # @param message [String] the log message
80
- # @param context [Hash] additional context information
81
- # @return [void]
82
- def success(message, context = {})
83
- log(:success, message, context)
84
- end
85
-
86
- # Log an error message
87
- #
88
- # @param message [String] the log message
89
- # @param context [Hash] additional context information
90
- # @return [void]
91
- def error(message, context = {})
92
- log(:error, message, context)
93
- end
94
-
95
- # Log a warning message
96
- #
97
- # @param message [String] the log message
98
- # @param context [Hash] additional context information
99
- # @return [void]
100
- def warn(message, context = {})
101
- log(:warn, message, context)
102
- end
103
-
104
- # Log a debug message
105
- #
106
- # @param message [String] the log message
107
- # @param context [Hash] additional context information
108
- # @return [void]
109
- def debug(message, context = {})
110
- log(:debug, message, context)
111
- end
112
-
113
- # Log a fatal message
114
- #
115
- # @param message [String] the log message
116
- # @param context [Hash] additional context information
117
- # @return [void]
118
- def fatal(message, context = {})
119
- log(:fatal, message, context)
120
- end
121
-
122
- # Log a verbose message (only shown in verbose or debug mode)
123
- #
124
- # @param message [String] the log message
125
- # @param context [Hash] additional context information
126
- # @return [void]
127
- def verbose(message, context = {})
128
- log(:info, message, context, verbosity: :verbose)
129
- end
130
-
131
- # Log a quiet message (shown even in quiet mode)
132
- #
133
- # @param message [String] the log message
134
- # @param context [Hash] additional context information
135
- # @return [void]
136
- def quiet(message, context = {})
137
- log(:info, message, context, verbosity: :quiet)
138
- end
139
-
140
- def task_start(message, context = {})
141
- return if @logged_tasks.include?(message)
142
-
143
- @logged_tasks.add(message)
144
- # Format task name with colon prefix and bold white styling
145
- formatted_message = ": #{message}".colorize(:white).bold
146
- # Add special context to identify task messages
147
- task_context = context.merge(task_message: true)
148
- log(:info, formatted_message, task_context)
149
- end
150
-
151
- # Get logger configuration
152
- #
153
- # @return [Hash] logger configuration
154
- def config
155
- {
156
- level: @level,
157
- sinks_count: @sinks.length,
158
- sinks: @sinks.map(&:config),
159
- }
160
- end
161
-
162
- private
163
-
164
- # Check if a log level should be processed
165
- #
166
- # @param level [Symbol] the log level to check
167
- # @return [Boolean] true if the level should be logged
168
- def should_log?(level)
169
- levels = %i[debug info warn error fatal success]
170
- levels.index(level) >= levels.index(@level)
171
- end
172
-
173
- # Check if a verbosity level should be shown
174
- #
175
- # @param verbosity [Symbol] the verbosity level to check
176
- # @return [Boolean] true if the verbosity should be shown
177
- def should_show_verbosity?(verbosity)
178
- verbosity_levels = %i[quiet normal verbose debug]
179
- verbosity_index = verbosity_levels.index(verbosity) || 1 # default to normal
180
- current_index = verbosity_levels.index(@verbosity) || 1
181
- verbosity_index <= current_index
182
- end
183
-
184
- # Execute the sink chain for a log request
185
- #
186
- # @param log_request [LogRequest] the log request to process
187
- # @return [void]
188
- def execute_sinks(log_request)
189
- # Filter applicable sinks
190
- applicable_sinks = @sinks.select { |s| s.applicable?(log_request) }
191
-
192
- # Execute sink chain
193
- applicable_sinks.reduce(log_request) do |request, sink|
194
- sink.call(request)
195
- end
196
- end
197
- end
198
- end
199
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+ require_relative "log_request"
5
+ require_relative "sinks/base"
6
+ require_relative "sinks/console"
7
+ require_relative "sinks/file_sink"
8
+ require_relative "sinks/structured"
9
+
10
+ module Makit
11
+ module Logging
12
+ # Main logger class that orchestrates logging through sinks
13
+ #
14
+ # This class provides a clean interface for logging with support for
15
+ # sink-based output processing. It follows the same pattern as the
16
+ # Commands::Runner but for logging operations.
17
+ #
18
+ # @example Basic usage
19
+ # logger = Logger.new
20
+ # logger.info("Processing started")
21
+ #
22
+ # @example With custom sinks
23
+ # logger = Logger.new(
24
+ # sinks: [
25
+ # Sinks::Console.new,
26
+ # Sinks::File.new(log_file: "custom.log")
27
+ # ]
28
+ # )
29
+ #
30
+ # @example Using convenience methods
31
+ # logger.success("Build completed")
32
+ # logger.error("Build failed", { repository: "user/repo" })
33
+ class Logger
34
+ # @return [Array<Sinks::Base>] list of sinks to process log requests
35
+ attr_reader :sinks
36
+ # @return [Symbol] minimum log level for filtering
37
+ attr_reader :level
38
+ # @return [Symbol] current verbosity level
39
+ attr_reader :verbosity
40
+
41
+ # Initialize the logger with sinks and log level
42
+ #
43
+ # @param sinks [Array<Sinks::Base>] list of sinks to use
44
+ # @param level [Symbol] minimum log level (:debug, :info, :warn, :error, :fatal, :success)
45
+ # @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
46
+ def initialize(sinks: [], level: :info, verbosity: :normal)
47
+ @sinks = sinks
48
+ @level = level
49
+ @verbosity = verbosity
50
+ @logged_tasks = Set.new
51
+ end
52
+
53
+ # Log a message with the specified level
54
+ #
55
+ # @param level [Symbol] the log level (:debug, :info, :warn, :error, :fatal, :success)
56
+ # @param message [String] the log message
57
+ # @param context [Hash] additional context information
58
+ # @param verbosity [Symbol] verbosity level (:quiet, :normal, :verbose, :debug)
59
+ # @return [void]
60
+ def log(level, message, context = {}, verbosity: :normal)
61
+ return unless should_log?(level)
62
+ return unless should_show_verbosity?(verbosity)
63
+
64
+ log_request = LogRequest.new(level, message, context, verbosity: verbosity)
65
+ execute_sinks(log_request)
66
+ end
67
+
68
+ # Log an info message
69
+ #
70
+ # @param message [String] the log message
71
+ # @param context [Hash] additional context information
72
+ # @return [void]
73
+ def info(message, context = {})
74
+ log(:info, message, context)
75
+ end
76
+
77
+ # Log a success message
78
+ #
79
+ # @param message [String] the log message
80
+ # @param context [Hash] additional context information
81
+ # @return [void]
82
+ def success(message, context = {})
83
+ log(:success, message, context)
84
+ end
85
+
86
+ # Log an error message
87
+ #
88
+ # @param message [String] the log message
89
+ # @param context [Hash] additional context information
90
+ # @return [void]
91
+ def error(message, context = {})
92
+ log(:error, message, context)
93
+ end
94
+
95
+ # Log a warning message
96
+ #
97
+ # @param message [String] the log message
98
+ # @param context [Hash] additional context information
99
+ # @return [void]
100
+ def warn(message, context = {})
101
+ log(:warn, message, context)
102
+ end
103
+
104
+ # Log a debug message
105
+ #
106
+ # @param message [String] the log message
107
+ # @param context [Hash] additional context information
108
+ # @return [void]
109
+ def debug(message, context = {})
110
+ log(:debug, message, context)
111
+ end
112
+
113
+ # Log a fatal message
114
+ #
115
+ # @param message [String] the log message
116
+ # @param context [Hash] additional context information
117
+ # @return [void]
118
+ def fatal(message, context = {})
119
+ log(:fatal, message, context)
120
+ end
121
+
122
+ # Log a verbose message (only shown in verbose or debug mode)
123
+ #
124
+ # @param message [String] the log message
125
+ # @param context [Hash] additional context information
126
+ # @return [void]
127
+ def verbose(message, context = {})
128
+ log(:info, message, context, verbosity: :verbose)
129
+ end
130
+
131
+ # Log a quiet message (shown even in quiet mode)
132
+ #
133
+ # @param message [String] the log message
134
+ # @param context [Hash] additional context information
135
+ # @return [void]
136
+ def quiet(message, context = {})
137
+ log(:info, message, context, verbosity: :quiet)
138
+ end
139
+
140
+ def task_start(message, context = {})
141
+ return if @logged_tasks.include?(message)
142
+
143
+ @logged_tasks.add(message)
144
+ # Format task name with colon prefix and bold white styling
145
+ formatted_message = ": #{message}".colorize(:white).bold
146
+ # Add special context to identify task messages
147
+ task_context = context.merge(task_message: true)
148
+ log(:info, formatted_message, task_context)
149
+ end
150
+
151
+ # Get logger configuration
152
+ #
153
+ # @return [Hash] logger configuration
154
+ def config
155
+ {
156
+ level: @level,
157
+ sinks_count: @sinks.length,
158
+ sinks: @sinks.map(&:config),
159
+ }
160
+ end
161
+
162
+ private
163
+
164
+ # Check if a log level should be processed
165
+ #
166
+ # @param level [Symbol] the log level to check
167
+ # @return [Boolean] true if the level should be logged
168
+ def should_log?(level)
169
+ levels = %i[debug info warn error fatal success]
170
+ levels.index(level) >= levels.index(@level)
171
+ end
172
+
173
+ # Check if a verbosity level should be shown
174
+ #
175
+ # @param verbosity [Symbol] the verbosity level to check
176
+ # @return [Boolean] true if the verbosity should be shown
177
+ def should_show_verbosity?(verbosity)
178
+ verbosity_levels = %i[quiet normal verbose debug]
179
+ verbosity_index = verbosity_levels.index(verbosity) || 1 # default to normal
180
+ current_index = verbosity_levels.index(@verbosity) || 1
181
+ verbosity_index <= current_index
182
+ end
183
+
184
+ # Execute the sink chain for a log request
185
+ #
186
+ # @param log_request [LogRequest] the log request to process
187
+ # @return [void]
188
+ def execute_sinks(log_request)
189
+ # Filter applicable sinks
190
+ applicable_sinks = @sinks.select { |s| s.applicable?(log_request) }
191
+
192
+ # Execute sink chain
193
+ applicable_sinks.reduce(log_request) do |request, sink|
194
+ sink.call(request)
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end
@@ -1,91 +1,91 @@
1
- # frozen_string_literal: true
2
-
3
- module Makit
4
- module Logging
5
- module Sinks
6
- # Base class for all logging sinks
7
- #
8
- # Sinks provide a way to output log requests to various destinations like
9
- # console, files, or external services. This follows the same pattern as
10
- # the commands middleware but focuses on output rather than transformation.
11
- #
12
- # @example Creating a custom logging sink
13
- # class CustomSink < Base
14
- # def call(log_request, &block)
15
- # # Output the log request
16
- # output_log(log_request)
17
- #
18
- # # Continue to next sink
19
- # block.call(log_request) if block_given?
20
- # end
21
- # end
22
- class Base
23
- # Execute sink logic
24
- #
25
- # This method must be implemented by subclasses to provide the actual
26
- # sink functionality. The pattern is to output the log request to the
27
- # destination, then call the block to continue the sink chain.
28
- #
29
- # @param log_request [LogRequest] the log request to process
30
- # @yield [LogRequest] yields the processed log request to the next sink
31
- # @yieldreturn [LogRequest] the processed log request
32
- # @return [LogRequest] the final processed log request
33
- # @raise [NotImplementedError] if not overridden by subclass
34
- def call(log_request, &block)
35
- raise NotImplementedError, "#{self.class.name} must implement #call"
36
- end
37
-
38
- # Check if this sink should be applied to the given log request
39
- #
40
- # Override this method to provide conditional sink application
41
- # based on log request properties like level, message, or context.
42
- #
43
- # @param log_request [LogRequest] the log request
44
- # @return [Boolean] true if sink should be applied
45
- def applicable?(_log_request)
46
- true
47
- end
48
-
49
- # Get sink name for logging and debugging
50
- #
51
- # @return [String] sink name
52
- def name
53
- self.class.name.split("::").last
54
- end
55
-
56
- # Get sink configuration
57
- #
58
- # Override this method to provide sink-specific configuration.
59
- #
60
- # @return [Hash] sink configuration
61
- def config
62
- {}
63
- end
64
-
65
- private
66
-
67
- # Pre-process the log request before outputting
68
- #
69
- # Override this method to modify the log request before it is output
70
- # to the destination.
71
- #
72
- # @param log_request [LogRequest] the log request
73
- # @return [LogRequest] the modified log request
74
- def pre_process(log_request)
75
- log_request
76
- end
77
-
78
- # Post-process the log request after outputting
79
- #
80
- # Override this method to perform any final processing after the
81
- # log request has been output to the destination.
82
- #
83
- # @param log_request [LogRequest] the log request
84
- # @return [LogRequest] the final log request
85
- def post_process(log_request)
86
- log_request
87
- end
88
- end
89
- end
90
- end
91
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ module Logging
5
+ module Sinks
6
+ # Base class for all logging sinks
7
+ #
8
+ # Sinks provide a way to output log requests to various destinations like
9
+ # console, files, or external services. This follows the same pattern as
10
+ # the commands middleware but focuses on output rather than transformation.
11
+ #
12
+ # @example Creating a custom logging sink
13
+ # class CustomSink < Base
14
+ # def call(log_request, &block)
15
+ # # Output the log request
16
+ # output_log(log_request)
17
+ #
18
+ # # Continue to next sink
19
+ # block.call(log_request) if block_given?
20
+ # end
21
+ # end
22
+ class Base
23
+ # Execute sink logic
24
+ #
25
+ # This method must be implemented by subclasses to provide the actual
26
+ # sink functionality. The pattern is to output the log request to the
27
+ # destination, then call the block to continue the sink chain.
28
+ #
29
+ # @param log_request [LogRequest] the log request to process
30
+ # @yield [LogRequest] yields the processed log request to the next sink
31
+ # @yieldreturn [LogRequest] the processed log request
32
+ # @return [LogRequest] the final processed log request
33
+ # @raise [NotImplementedError] if not overridden by subclass
34
+ def call(log_request, &block)
35
+ raise NotImplementedError, "#{self.class.name} must implement #call"
36
+ end
37
+
38
+ # Check if this sink should be applied to the given log request
39
+ #
40
+ # Override this method to provide conditional sink application
41
+ # based on log request properties like level, message, or context.
42
+ #
43
+ # @param log_request [LogRequest] the log request
44
+ # @return [Boolean] true if sink should be applied
45
+ def applicable?(_log_request)
46
+ true
47
+ end
48
+
49
+ # Get sink name for logging and debugging
50
+ #
51
+ # @return [String] sink name
52
+ def name
53
+ self.class.name.split("::").last
54
+ end
55
+
56
+ # Get sink configuration
57
+ #
58
+ # Override this method to provide sink-specific configuration.
59
+ #
60
+ # @return [Hash] sink configuration
61
+ def config
62
+ {}
63
+ end
64
+
65
+ private
66
+
67
+ # Pre-process the log request before outputting
68
+ #
69
+ # Override this method to modify the log request before it is output
70
+ # to the destination.
71
+ #
72
+ # @param log_request [LogRequest] the log request
73
+ # @return [LogRequest] the modified log request
74
+ def pre_process(log_request)
75
+ log_request
76
+ end
77
+
78
+ # Post-process the log request after outputting
79
+ #
80
+ # Override this method to perform any final processing after the
81
+ # log request has been output to the destination.
82
+ #
83
+ # @param log_request [LogRequest] the log request
84
+ # @return [LogRequest] the final log request
85
+ def post_process(log_request)
86
+ log_request
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end