makit 0.0.164 → 0.0.166

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 (178) 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/azure/blob_storage.rb +257 -257
  7. data/lib/makit/azure/cli.rb +284 -284
  8. data/lib/makit/azure-pipelines.rb +139 -0
  9. data/lib/makit/cli/base.rb +17 -17
  10. data/lib/makit/cli/build_commands.rb +500 -500
  11. data/lib/makit/cli/generators/base_generator.rb +74 -74
  12. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  13. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  14. data/lib/makit/cli/generators/node_generator.rb +50 -50
  15. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  16. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  17. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  18. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  19. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  20. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  21. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  22. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  23. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  24. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  25. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  26. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  27. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  28. data/lib/makit/cli/main.rb +78 -78
  29. data/lib/makit/cli/pipeline_commands.rb +311 -311
  30. data/lib/makit/cli/project_commands.rb +868 -868
  31. data/lib/makit/cli/repository_commands.rb +661 -661
  32. data/lib/makit/cli/strategy_commands.rb +207 -207
  33. data/lib/makit/cli/utility_commands.rb +521 -521
  34. data/lib/makit/commands/factory.rb +359 -359
  35. data/lib/makit/commands/middleware/base.rb +73 -73
  36. data/lib/makit/commands/middleware/cache.rb +248 -248
  37. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  38. data/lib/makit/commands/middleware/validator.rb +269 -269
  39. data/lib/makit/commands/request.rb +316 -316
  40. data/lib/makit/commands/result.rb +323 -323
  41. data/lib/makit/commands/runner.rb +386 -386
  42. data/lib/makit/commands/strategies/base.rb +171 -171
  43. data/lib/makit/commands/strategies/child_process.rb +162 -162
  44. data/lib/makit/commands/strategies/factory.rb +136 -136
  45. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  46. data/lib/makit/commands.rb +50 -50
  47. data/lib/makit/configuration/dotnet_project.rb +48 -48
  48. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  49. data/lib/makit/configuration/project.rb +292 -292
  50. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  51. data/lib/makit/configuration/step.rb +34 -34
  52. data/lib/makit/configuration/timeout.rb +74 -74
  53. data/lib/makit/configuration.rb +21 -21
  54. data/lib/makit/content/default_gitignore.rb +7 -7
  55. data/lib/makit/content/default_gitignore.txt +225 -225
  56. data/lib/makit/content/default_rakefile.rb +13 -13
  57. data/lib/makit/content/gem_rakefile.rb +16 -16
  58. data/lib/makit/context.rb +1 -1
  59. data/lib/makit/data.rb +49 -49
  60. data/lib/makit/directories.rb +170 -170
  61. data/lib/makit/directory.rb +262 -262
  62. data/lib/makit/docs/files.rb +89 -89
  63. data/lib/makit/docs/rake.rb +102 -102
  64. data/lib/makit/dotnet/cli.rb +224 -224
  65. data/lib/makit/dotnet/project.rb +217 -217
  66. data/lib/makit/dotnet/solution.rb +38 -38
  67. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  68. data/lib/makit/dotnet/solution_console.rb +264 -264
  69. data/lib/makit/dotnet/solution_maui.rb +354 -354
  70. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  71. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  72. data/lib/makit/dotnet.rb +110 -110
  73. data/lib/makit/email.rb +90 -90
  74. data/lib/makit/environment.rb +142 -142
  75. data/lib/makit/examples/runner.rb +370 -370
  76. data/lib/makit/exceptions.rb +45 -45
  77. data/lib/makit/fileinfo.rb +32 -32
  78. data/lib/makit/files.rb +43 -43
  79. data/lib/makit/gems.rb +49 -49
  80. data/lib/makit/git/cli.rb +103 -103
  81. data/lib/makit/git/repository.rb +100 -100
  82. data/lib/makit/git.rb +104 -104
  83. data/lib/makit/gitlab/pipeline.rb +857 -857
  84. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  85. data/lib/makit/gitlab_runner.rb +59 -59
  86. data/lib/makit/humanize.rb +218 -218
  87. data/lib/makit/indexer.rb +47 -47
  88. data/lib/makit/io/filesystem.rb +111 -111
  89. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  90. data/lib/makit/lint.rb +212 -212
  91. data/lib/makit/logging/configuration.rb +309 -309
  92. data/lib/makit/logging/format_registry.rb +84 -84
  93. data/lib/makit/logging/formatters/base.rb +39 -39
  94. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  95. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  96. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  97. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  98. data/lib/makit/logging/log_request.rb +119 -119
  99. data/lib/makit/logging/logger.rb +199 -199
  100. data/lib/makit/logging/sinks/base.rb +91 -91
  101. data/lib/makit/logging/sinks/console.rb +72 -72
  102. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  103. data/lib/makit/logging/sinks/structured.rb +123 -123
  104. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  105. data/lib/makit/logging.rb +578 -578
  106. data/lib/makit/markdown.rb +75 -75
  107. data/lib/makit/mp/basic_object_mp.rb +17 -17
  108. data/lib/makit/mp/command_mp.rb +13 -13
  109. data/lib/makit/mp/command_request.mp.rb +17 -17
  110. data/lib/makit/mp/project_mp.rb +199 -199
  111. data/lib/makit/mp/string_mp.rb +205 -205
  112. data/lib/makit/nuget.rb +454 -454
  113. data/lib/makit/podman/podman.rb +458 -458
  114. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  115. data/lib/makit/port.rb +32 -32
  116. data/lib/makit/process.rb +377 -377
  117. data/lib/makit/protoc.rb +112 -112
  118. data/lib/makit/rake/cli.rb +196 -196
  119. data/lib/makit/rake/trace_controller.rb +174 -174
  120. data/lib/makit/rake.rb +81 -81
  121. data/lib/makit/ruby/cli.rb +185 -185
  122. data/lib/makit/ruby.rb +25 -25
  123. data/lib/makit/rubygems.rb +137 -137
  124. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  125. data/lib/makit/secrets/azure_secrets.rb +221 -183
  126. data/lib/makit/secrets/local_secrets.rb +72 -72
  127. data/lib/makit/secrets/secrets_manager.rb +105 -105
  128. data/lib/makit/secrets.rb +96 -16
  129. data/lib/makit/serializer.rb +130 -130
  130. data/lib/makit/services/builder.rb +186 -186
  131. data/lib/makit/services/error_handler.rb +226 -226
  132. data/lib/makit/services/repository_manager.rb +367 -367
  133. data/lib/makit/services/validator.rb +112 -112
  134. data/lib/makit/setup/classlib.rb +101 -101
  135. data/lib/makit/setup/gem.rb +268 -268
  136. data/lib/makit/setup/pages.rb +11 -11
  137. data/lib/makit/setup/razorclasslib.rb +101 -101
  138. data/lib/makit/setup/runner.rb +54 -54
  139. data/lib/makit/setup.rb +5 -5
  140. data/lib/makit/show.rb +110 -110
  141. data/lib/makit/storage.rb +126 -126
  142. data/lib/makit/symbols.rb +175 -175
  143. data/lib/makit/task_info.rb +130 -130
  144. data/lib/makit/tasks/at_exit.rb +15 -15
  145. data/lib/makit/tasks/build.rb +22 -22
  146. data/lib/makit/tasks/bump.rb +7 -7
  147. data/lib/makit/tasks/clean.rb +13 -13
  148. data/lib/makit/tasks/configure.rb +10 -10
  149. data/lib/makit/tasks/format.rb +10 -10
  150. data/lib/makit/tasks/hook_manager.rb +443 -443
  151. data/lib/makit/tasks/info.rb +368 -368
  152. data/lib/makit/tasks/init.rb +49 -49
  153. data/lib/makit/tasks/integrate.rb +60 -60
  154. data/lib/makit/tasks/pull_incoming.rb +13 -13
  155. data/lib/makit/tasks/secrets.rb +7 -7
  156. data/lib/makit/tasks/setup.rb +16 -16
  157. data/lib/makit/tasks/sync.rb +14 -14
  158. data/lib/makit/tasks/tag.rb +27 -27
  159. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  160. data/lib/makit/tasks/test.rb +22 -22
  161. data/lib/makit/tasks/update.rb +21 -21
  162. data/lib/makit/tasks/version.rb +6 -6
  163. data/lib/makit/tasks.rb +24 -24
  164. data/lib/makit/test_cache.rb +239 -239
  165. data/lib/makit/tree.rb +37 -37
  166. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  167. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  168. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  169. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  170. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  171. data/lib/makit/version.rb +661 -661
  172. data/lib/makit/version_util.rb +21 -21
  173. data/lib/makit/wix.rb +95 -95
  174. data/lib/makit/yaml.rb +29 -29
  175. data/lib/makit/zip.rb +17 -17
  176. data/lib/makit copy.rb +44 -44
  177. data/lib/makit.rb +120 -119
  178. metadata +3 -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