makit 0.0.168 → 0.0.169

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 (179) 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 +187 -187
  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/github_actions.rb +202 -202
  84. data/lib/makit/gitlab/pipeline.rb +857 -857
  85. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  86. data/lib/makit/gitlab_runner.rb +59 -59
  87. data/lib/makit/humanize.rb +218 -218
  88. data/lib/makit/indexer.rb +47 -47
  89. data/lib/makit/io/filesystem.rb +111 -111
  90. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  91. data/lib/makit/lint.rb +212 -212
  92. data/lib/makit/logging/configuration.rb +309 -309
  93. data/lib/makit/logging/format_registry.rb +84 -84
  94. data/lib/makit/logging/formatters/base.rb +39 -39
  95. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  96. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  97. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  98. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  99. data/lib/makit/logging/log_request.rb +119 -119
  100. data/lib/makit/logging/logger.rb +199 -199
  101. data/lib/makit/logging/sinks/base.rb +91 -91
  102. data/lib/makit/logging/sinks/console.rb +72 -72
  103. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  104. data/lib/makit/logging/sinks/structured.rb +123 -123
  105. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  106. data/lib/makit/logging.rb +578 -578
  107. data/lib/makit/markdown.rb +75 -75
  108. data/lib/makit/mp/basic_object_mp.rb +17 -17
  109. data/lib/makit/mp/command_mp.rb +13 -13
  110. data/lib/makit/mp/command_request.mp.rb +17 -17
  111. data/lib/makit/mp/project_mp.rb +199 -199
  112. data/lib/makit/mp/string_mp.rb +205 -205
  113. data/lib/makit/nuget.rb +460 -458
  114. data/lib/makit/podman/podman.rb +458 -458
  115. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  116. data/lib/makit/port.rb +32 -32
  117. data/lib/makit/process.rb +377 -377
  118. data/lib/makit/protoc.rb +112 -112
  119. data/lib/makit/rake/cli.rb +196 -196
  120. data/lib/makit/rake/trace_controller.rb +174 -174
  121. data/lib/makit/rake.rb +81 -81
  122. data/lib/makit/ruby/cli.rb +185 -185
  123. data/lib/makit/ruby.rb +25 -25
  124. data/lib/makit/rubygems.rb +137 -137
  125. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  126. data/lib/makit/secrets/azure_secrets.rb +221 -221
  127. data/lib/makit/secrets/local_secrets.rb +72 -72
  128. data/lib/makit/secrets/secrets_manager.rb +105 -105
  129. data/lib/makit/secrets.rb +96 -96
  130. data/lib/makit/serializer.rb +130 -130
  131. data/lib/makit/services/builder.rb +186 -186
  132. data/lib/makit/services/error_handler.rb +226 -226
  133. data/lib/makit/services/repository_manager.rb +367 -367
  134. data/lib/makit/services/validator.rb +112 -112
  135. data/lib/makit/setup/classlib.rb +101 -101
  136. data/lib/makit/setup/gem.rb +268 -268
  137. data/lib/makit/setup/pages.rb +11 -11
  138. data/lib/makit/setup/razorclasslib.rb +101 -101
  139. data/lib/makit/setup/runner.rb +54 -54
  140. data/lib/makit/setup.rb +5 -5
  141. data/lib/makit/show.rb +110 -110
  142. data/lib/makit/storage.rb +126 -126
  143. data/lib/makit/symbols.rb +175 -175
  144. data/lib/makit/task_info.rb +130 -130
  145. data/lib/makit/tasks/at_exit.rb +15 -15
  146. data/lib/makit/tasks/build.rb +22 -22
  147. data/lib/makit/tasks/bump.rb +7 -7
  148. data/lib/makit/tasks/clean.rb +13 -13
  149. data/lib/makit/tasks/configure.rb +10 -10
  150. data/lib/makit/tasks/format.rb +10 -10
  151. data/lib/makit/tasks/hook_manager.rb +443 -443
  152. data/lib/makit/tasks/info.rb +368 -368
  153. data/lib/makit/tasks/init.rb +49 -49
  154. data/lib/makit/tasks/integrate.rb +60 -60
  155. data/lib/makit/tasks/pull_incoming.rb +13 -13
  156. data/lib/makit/tasks/secrets.rb +7 -7
  157. data/lib/makit/tasks/setup.rb +16 -16
  158. data/lib/makit/tasks/sync.rb +14 -14
  159. data/lib/makit/tasks/tag.rb +27 -27
  160. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  161. data/lib/makit/tasks/test.rb +22 -22
  162. data/lib/makit/tasks/update.rb +21 -21
  163. data/lib/makit/tasks/version.rb +6 -6
  164. data/lib/makit/tasks.rb +24 -24
  165. data/lib/makit/test_cache.rb +239 -239
  166. data/lib/makit/tree.rb +37 -37
  167. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  168. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  169. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  170. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  171. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  172. data/lib/makit/version.rb +661 -661
  173. data/lib/makit/version_util.rb +21 -21
  174. data/lib/makit/wix.rb +95 -95
  175. data/lib/makit/yaml.rb +29 -29
  176. data/lib/makit/zip.rb +17 -17
  177. data/lib/makit copy.rb +44 -44
  178. data/lib/makit.rb +121 -121
  179. 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