makit 0.0.111 → 0.0.112

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 (140) 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 +320 -323
  31. data/lib/makit/commands/middleware/unified_logger.rb +243 -243
  32. data/lib/makit/commands/middleware/validator.rb +269 -269
  33. data/lib/makit/commands/request.rb +254 -254
  34. data/lib/makit/commands/result.rb +323 -323
  35. data/lib/makit/commands/runner.rb +337 -317
  36. data/lib/makit/commands/strategies/base.rb +160 -160
  37. data/lib/makit/commands/strategies/synchronous.rb +134 -134
  38. data/lib/makit/commands.rb +51 -42
  39. data/lib/makit/configuration/gitlab_helper.rb +60 -60
  40. data/lib/makit/configuration/project.rb +127 -127
  41. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  42. data/lib/makit/configuration/step.rb +34 -34
  43. data/lib/makit/configuration.rb +14 -14
  44. data/lib/makit/content/default_gitignore.rb +7 -7
  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 +141 -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/project.rb +153 -153
  54. data/lib/makit/dotnet/solution.rb +38 -38
  55. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  56. data/lib/makit/dotnet/solution_console.rb +264 -264
  57. data/lib/makit/dotnet/solution_maui.rb +354 -354
  58. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  59. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  60. data/lib/makit/dotnet.rb +102 -102
  61. data/lib/makit/email.rb +90 -90
  62. data/lib/makit/environment.rb +142 -142
  63. data/lib/makit/examples/runner.rb +370 -370
  64. data/lib/makit/exceptions.rb +45 -45
  65. data/lib/makit/fileinfo.rb +24 -24
  66. data/lib/makit/files.rb +43 -43
  67. data/lib/makit/gems.rb +40 -40
  68. data/lib/makit/git/cli.rb +54 -54
  69. data/lib/makit/git/repository.rb +90 -90
  70. data/lib/makit/git.rb +98 -98
  71. data/lib/makit/gitlab_runner.rb +59 -59
  72. data/lib/makit/humanize.rb +137 -137
  73. data/lib/makit/indexer.rb +47 -47
  74. data/lib/makit/logging/configuration.rb +305 -305
  75. data/lib/makit/logging/formatters/base.rb +39 -39
  76. data/lib/makit/logging/formatters/console_formatter.rb +140 -127
  77. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  78. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  79. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  80. data/lib/makit/logging/log_request.rb +115 -115
  81. data/lib/makit/logging/logger.rb +163 -159
  82. data/lib/makit/logging/sinks/console.rb +72 -72
  83. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  84. data/lib/makit/logging/sinks/unified_file_sink.rb +303 -303
  85. data/lib/makit/logging.rb +530 -521
  86. data/lib/makit/markdown.rb +75 -75
  87. data/lib/makit/mp/basic_object_mp.rb +17 -17
  88. data/lib/makit/mp/command_mp.rb +13 -13
  89. data/lib/makit/mp/command_request.mp.rb +17 -17
  90. data/lib/makit/mp/project_mp.rb +199 -199
  91. data/lib/makit/mp/string_mp.rb +193 -348
  92. data/lib/makit/nuget.rb +74 -74
  93. data/lib/makit/port.rb +32 -32
  94. data/lib/makit/process.rb +163 -163
  95. data/lib/makit/protoc.rb +107 -107
  96. data/lib/makit/rake/cli.rb +196 -196
  97. data/lib/makit/rake.rb +25 -25
  98. data/lib/makit/ruby/cli.rb +185 -185
  99. data/lib/makit/ruby.rb +25 -25
  100. data/lib/makit/secrets.rb +51 -51
  101. data/lib/makit/serializer.rb +130 -117
  102. data/lib/makit/services/builder.rb +186 -186
  103. data/lib/makit/services/error_handler.rb +226 -226
  104. data/lib/makit/services/repository_manager.rb +229 -229
  105. data/lib/makit/services/validator.rb +112 -112
  106. data/lib/makit/setup/classlib.rb +53 -53
  107. data/lib/makit/setup/gem.rb +30 -17
  108. data/lib/makit/setup/runner.rb +45 -40
  109. data/lib/makit/setup.rb +5 -0
  110. data/lib/makit/show.rb +110 -110
  111. data/lib/makit/storage.rb +126 -126
  112. data/lib/makit/symbols.rb +170 -161
  113. data/lib/makit/task_info.rb +128 -128
  114. data/lib/makit/tasks/at_exit.rb +13 -13
  115. data/lib/makit/tasks/build.rb +19 -18
  116. data/lib/makit/tasks/clean.rb +11 -11
  117. data/lib/makit/tasks/hook_manager.rb +393 -239
  118. data/lib/makit/tasks/init.rb +47 -47
  119. data/lib/makit/tasks/integrate.rb +17 -15
  120. data/lib/makit/tasks/pull_incoming.rb +11 -12
  121. data/lib/makit/tasks/setup.rb +6 -6
  122. data/lib/makit/tasks/sync.rb +12 -11
  123. data/lib/makit/tasks/tag.rb +15 -0
  124. data/lib/makit/tasks/task_monkey_patch.rb +79 -79
  125. data/lib/makit/tasks.rb +10 -0
  126. data/lib/makit/test_cache.rb +239 -239
  127. data/lib/makit/tree.rb +37 -37
  128. data/lib/makit/v1/makit.v1_pb.rb +34 -34
  129. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  130. data/lib/makit/version.rb +5 -5
  131. data/lib/makit/version_util.rb +21 -0
  132. data/lib/makit/wix.rb +95 -95
  133. data/lib/makit/yaml.rb +29 -29
  134. data/lib/makit/zip.rb +17 -17
  135. data/lib/makit copy.rb +44 -0
  136. data/lib/makit.rb +40 -8
  137. metadata +50 -7
  138. data/lib/makit/command_runner.rb +0 -463
  139. data/lib/makit/commands/compatibility.rb +0 -365
  140. data/lib/makit/task_hooks.rb +0 -125
@@ -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,127 +1,140 @@
1
- # frozen_string_literal: true
2
-
3
- require "colorize"
4
- require_relative "base"
5
-
6
- module Makit
7
- module Logging
8
- module Formatters
9
- # Console formatter for colored log output
10
- #
11
- # Formats log requests for console display with colors, symbols, and optional
12
- # timestamps/levels. This is specifically designed for human-readable console output.
13
- #
14
- # @example
15
- # formatter = ConsoleFormatter.new
16
- # formatted = formatter.format(log_request)
17
- # # => "→ Processing started" (with appropriate color)
18
- class ConsoleFormatter < Base
19
- # @return [Boolean] whether to show timestamps
20
- attr_reader :show_timestamp
21
- # @return [Boolean] whether to show log levels
22
- attr_reader :show_level
23
-
24
- # Initialize console formatter
25
- #
26
- # @param show_timestamp [Boolean] whether to show timestamps (default: false)
27
- # @param show_level [Boolean] whether to show log levels (default: false)
28
- def initialize(show_timestamp: false, show_level: false)
29
- @show_timestamp = show_timestamp
30
- @show_level = show_level
31
- end
32
-
33
- # Format log request for console display
34
- #
35
- # @param log_request [LogRequest] the log request to format
36
- # @return [String] console formatted log entry with colors
37
- def format(log_request)
38
- parts = []
39
-
40
- # Add timestamp if enabled
41
- if @show_timestamp
42
- timestamp = log_request.timestamp.strftime("%H:%M:%S")
43
- parts << "[#{timestamp}]".colorize(:light_black)
44
- end
45
-
46
- # Add log level if enabled
47
- if @show_level
48
- level_str = log_request.level.to_s.upcase
49
- level_color = get_level_color(log_request.level)
50
- parts << level_str.colorize(level_color)
51
- end
52
-
53
- # Add symbol and message
54
- symbol = get_level_symbol(log_request.level)
55
- symbol_color = get_level_color(log_request.level)
56
- message = log_request.message
57
-
58
- # Add context if present
59
- if !log_request.context.empty?
60
- context_str = log_request.context.map { |k, v| "#{k}=#{v}" }.join(" ")
61
- message += " #{context_str}".colorize(:light_black)
62
- end
63
-
64
- parts << "#{symbol} #{message}".colorize(symbol_color)
65
-
66
- parts.join(" ")
67
- end
68
-
69
- # Get formatter configuration
70
- #
71
- # @return [Hash] formatter configuration
72
- def config
73
- super.merge(
74
- show_timestamp: @show_timestamp,
75
- show_level: @show_level,
76
- )
77
- end
78
-
79
- private
80
-
81
- # Get the color for a log level
82
- #
83
- # @param level [Symbol] the log level
84
- # @return [Symbol] the color for the level
85
- def get_level_color(level)
86
- case level
87
- when :debug
88
- :grey
89
- when :info
90
- :grey
91
- when :warn
92
- :light_yellow
93
- when :error, :fatal
94
- :light_red
95
- when :success
96
- :green
97
- else
98
- :white
99
- end
100
- end
101
-
102
- # Get the symbol for a log level
103
- #
104
- # @param level [Symbol] the log level
105
- # @return [String] the symbol for the level
106
- def get_level_symbol(level)
107
- case level
108
- when :debug
109
- "•"
110
- when :info
111
- " " #"→"
112
- when :warn
113
- "!" #"⚠"
114
- when :error
115
- "✗"
116
- when :fatal
117
- "💀"
118
- when :success
119
- "✓"
120
- else
121
- "•"
122
- end
123
- end
124
- end
125
- end
126
- end
127
- 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
+ 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,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
@@ -1,71 +1,71 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "base"
4
-
5
- module Makit
6
- module Logging
7
- module Formatters
8
- # Plain text formatter with just the message
9
- #
10
- # Formats log requests as plain text containing only the message content.
11
- # This is useful for simple log files where only the message matters.
12
- #
13
- # @example
14
- # formatter = PlainTextFormatter.new
15
- # formatted = formatter.format(log_request)
16
- # # => 'User logged in'
17
- class PlainTextFormatter < Base
18
- # @return [Boolean] whether to include context in output
19
- attr_reader :include_context
20
-
21
- # Initialize plain text formatter
22
- #
23
- # @param include_context [Boolean] whether to include context in output
24
- def initialize(include_context: false)
25
- @include_context = include_context
26
- end
27
-
28
- # Format log request as plain text
29
- #
30
- # @param log_request [LogRequest] the log request to format
31
- # @return [String] plain text formatted log entry
32
- def format(log_request)
33
- message = log_request.message
34
-
35
- # Add context if enabled and present
36
- if @include_context && !log_request.context.empty?
37
- # Create a more readable context representation
38
- context_parts = log_request.context.map do |k, v|
39
- # Format values nicely based on their type
40
- formatted_value = case v
41
- when String
42
- v.include?(" ") ? "\"#{v}\"" : v
43
- when Hash, Array
44
- v.inspect
45
- when Time
46
- v.strftime("%Y-%m-%d %H:%M:%S")
47
- else
48
- v.to_s
49
- end
50
- "#{k}: #{formatted_value}"
51
- end
52
-
53
- context_str = context_parts.join(", ")
54
- message += " (#{context_str})"
55
- end
56
-
57
- message
58
- end
59
-
60
- # Get formatter configuration
61
- #
62
- # @return [Hash] formatter configuration
63
- def config
64
- super.merge(
65
- include_context: @include_context,
66
- )
67
- end
68
- end
69
- end
70
- end
71
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module Makit
6
+ module Logging
7
+ module Formatters
8
+ # Plain text formatter with just the message
9
+ #
10
+ # Formats log requests as plain text containing only the message content.
11
+ # This is useful for simple log files where only the message matters.
12
+ #
13
+ # @example
14
+ # formatter = PlainTextFormatter.new
15
+ # formatted = formatter.format(log_request)
16
+ # # => 'User logged in'
17
+ class PlainTextFormatter < Base
18
+ # @return [Boolean] whether to include context in output
19
+ attr_reader :include_context
20
+
21
+ # Initialize plain text formatter
22
+ #
23
+ # @param include_context [Boolean] whether to include context in output
24
+ def initialize(include_context: false)
25
+ @include_context = include_context
26
+ end
27
+
28
+ # Format log request as plain text
29
+ #
30
+ # @param log_request [LogRequest] the log request to format
31
+ # @return [String] plain text formatted log entry
32
+ def format(log_request)
33
+ message = log_request.message
34
+
35
+ # Add context if enabled and present
36
+ if @include_context && !log_request.context.empty?
37
+ # Create a more readable context representation
38
+ context_parts = log_request.context.map do |k, v|
39
+ # Format values nicely based on their type
40
+ formatted_value = case v
41
+ when String
42
+ v.include?(" ") ? "\"#{v}\"" : v
43
+ when Hash, Array
44
+ v.inspect
45
+ when Time
46
+ v.strftime("%Y-%m-%d %H:%M:%S")
47
+ else
48
+ v.to_s
49
+ end
50
+ "#{k}: #{formatted_value}"
51
+ end
52
+
53
+ context_str = context_parts.join(", ")
54
+ message += " (#{context_str})"
55
+ end
56
+
57
+ message
58
+ end
59
+
60
+ # Get formatter configuration
61
+ #
62
+ # @return [Hash] formatter configuration
63
+ def config
64
+ super.merge(
65
+ include_context: @include_context,
66
+ )
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end