makit 0.0.164 → 0.0.165

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 (177) 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/cli/base.rb +17 -17
  9. data/lib/makit/cli/build_commands.rb +500 -500
  10. data/lib/makit/cli/generators/base_generator.rb +74 -74
  11. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  12. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  13. data/lib/makit/cli/generators/node_generator.rb +50 -50
  14. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  15. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  16. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  17. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  18. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  19. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  20. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  21. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  22. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  23. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  24. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  25. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  26. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  27. data/lib/makit/cli/main.rb +78 -78
  28. data/lib/makit/cli/pipeline_commands.rb +311 -311
  29. data/lib/makit/cli/project_commands.rb +868 -868
  30. data/lib/makit/cli/repository_commands.rb +661 -661
  31. data/lib/makit/cli/strategy_commands.rb +207 -207
  32. data/lib/makit/cli/utility_commands.rb +521 -521
  33. data/lib/makit/commands/factory.rb +359 -359
  34. data/lib/makit/commands/middleware/base.rb +73 -73
  35. data/lib/makit/commands/middleware/cache.rb +248 -248
  36. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  37. data/lib/makit/commands/middleware/validator.rb +269 -269
  38. data/lib/makit/commands/request.rb +316 -316
  39. data/lib/makit/commands/result.rb +323 -323
  40. data/lib/makit/commands/runner.rb +386 -386
  41. data/lib/makit/commands/strategies/base.rb +171 -171
  42. data/lib/makit/commands/strategies/child_process.rb +162 -162
  43. data/lib/makit/commands/strategies/factory.rb +136 -136
  44. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  45. data/lib/makit/commands.rb +50 -50
  46. data/lib/makit/configuration/dotnet_project.rb +48 -48
  47. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  48. data/lib/makit/configuration/project.rb +292 -292
  49. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  50. data/lib/makit/configuration/step.rb +34 -34
  51. data/lib/makit/configuration/timeout.rb +74 -74
  52. data/lib/makit/configuration.rb +21 -21
  53. data/lib/makit/content/default_gitignore.rb +7 -7
  54. data/lib/makit/content/default_gitignore.txt +225 -225
  55. data/lib/makit/content/default_rakefile.rb +13 -13
  56. data/lib/makit/content/gem_rakefile.rb +16 -16
  57. data/lib/makit/context.rb +1 -1
  58. data/lib/makit/data.rb +49 -49
  59. data/lib/makit/directories.rb +170 -170
  60. data/lib/makit/directory.rb +262 -262
  61. data/lib/makit/docs/files.rb +89 -89
  62. data/lib/makit/docs/rake.rb +102 -102
  63. data/lib/makit/dotnet/cli.rb +224 -224
  64. data/lib/makit/dotnet/project.rb +217 -217
  65. data/lib/makit/dotnet/solution.rb +38 -38
  66. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  67. data/lib/makit/dotnet/solution_console.rb +264 -264
  68. data/lib/makit/dotnet/solution_maui.rb +354 -354
  69. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  70. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  71. data/lib/makit/dotnet.rb +110 -110
  72. data/lib/makit/email.rb +90 -90
  73. data/lib/makit/environment.rb +142 -142
  74. data/lib/makit/examples/runner.rb +370 -370
  75. data/lib/makit/exceptions.rb +45 -45
  76. data/lib/makit/fileinfo.rb +32 -32
  77. data/lib/makit/files.rb +43 -43
  78. data/lib/makit/gems.rb +49 -49
  79. data/lib/makit/git/cli.rb +103 -103
  80. data/lib/makit/git/repository.rb +100 -100
  81. data/lib/makit/git.rb +104 -104
  82. data/lib/makit/gitlab/pipeline.rb +857 -857
  83. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  84. data/lib/makit/gitlab_runner.rb +59 -59
  85. data/lib/makit/humanize.rb +218 -218
  86. data/lib/makit/indexer.rb +47 -47
  87. data/lib/makit/io/filesystem.rb +111 -111
  88. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  89. data/lib/makit/lint.rb +212 -212
  90. data/lib/makit/logging/configuration.rb +309 -309
  91. data/lib/makit/logging/format_registry.rb +84 -84
  92. data/lib/makit/logging/formatters/base.rb +39 -39
  93. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  94. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  95. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  96. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  97. data/lib/makit/logging/log_request.rb +119 -119
  98. data/lib/makit/logging/logger.rb +199 -199
  99. data/lib/makit/logging/sinks/base.rb +91 -91
  100. data/lib/makit/logging/sinks/console.rb +72 -72
  101. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  102. data/lib/makit/logging/sinks/structured.rb +123 -123
  103. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  104. data/lib/makit/logging.rb +578 -578
  105. data/lib/makit/markdown.rb +75 -75
  106. data/lib/makit/mp/basic_object_mp.rb +17 -17
  107. data/lib/makit/mp/command_mp.rb +13 -13
  108. data/lib/makit/mp/command_request.mp.rb +17 -17
  109. data/lib/makit/mp/project_mp.rb +199 -199
  110. data/lib/makit/mp/string_mp.rb +205 -205
  111. data/lib/makit/nuget.rb +454 -454
  112. data/lib/makit/podman/podman.rb +458 -458
  113. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  114. data/lib/makit/port.rb +32 -32
  115. data/lib/makit/process.rb +377 -377
  116. data/lib/makit/protoc.rb +112 -112
  117. data/lib/makit/rake/cli.rb +196 -196
  118. data/lib/makit/rake/trace_controller.rb +174 -174
  119. data/lib/makit/rake.rb +81 -81
  120. data/lib/makit/ruby/cli.rb +185 -185
  121. data/lib/makit/ruby.rb +25 -25
  122. data/lib/makit/rubygems.rb +137 -137
  123. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  124. data/lib/makit/secrets/azure_secrets.rb +221 -183
  125. data/lib/makit/secrets/local_secrets.rb +72 -72
  126. data/lib/makit/secrets/secrets_manager.rb +105 -105
  127. data/lib/makit/secrets.rb +96 -16
  128. data/lib/makit/serializer.rb +130 -130
  129. data/lib/makit/services/builder.rb +186 -186
  130. data/lib/makit/services/error_handler.rb +226 -226
  131. data/lib/makit/services/repository_manager.rb +367 -367
  132. data/lib/makit/services/validator.rb +112 -112
  133. data/lib/makit/setup/classlib.rb +101 -101
  134. data/lib/makit/setup/gem.rb +268 -268
  135. data/lib/makit/setup/pages.rb +11 -11
  136. data/lib/makit/setup/razorclasslib.rb +101 -101
  137. data/lib/makit/setup/runner.rb +54 -54
  138. data/lib/makit/setup.rb +5 -5
  139. data/lib/makit/show.rb +110 -110
  140. data/lib/makit/storage.rb +126 -126
  141. data/lib/makit/symbols.rb +175 -175
  142. data/lib/makit/task_info.rb +130 -130
  143. data/lib/makit/tasks/at_exit.rb +15 -15
  144. data/lib/makit/tasks/build.rb +22 -22
  145. data/lib/makit/tasks/bump.rb +7 -7
  146. data/lib/makit/tasks/clean.rb +13 -13
  147. data/lib/makit/tasks/configure.rb +10 -10
  148. data/lib/makit/tasks/format.rb +10 -10
  149. data/lib/makit/tasks/hook_manager.rb +443 -443
  150. data/lib/makit/tasks/info.rb +368 -368
  151. data/lib/makit/tasks/init.rb +49 -49
  152. data/lib/makit/tasks/integrate.rb +60 -60
  153. data/lib/makit/tasks/pull_incoming.rb +13 -13
  154. data/lib/makit/tasks/secrets.rb +7 -7
  155. data/lib/makit/tasks/setup.rb +16 -16
  156. data/lib/makit/tasks/sync.rb +14 -14
  157. data/lib/makit/tasks/tag.rb +27 -27
  158. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  159. data/lib/makit/tasks/test.rb +22 -22
  160. data/lib/makit/tasks/update.rb +21 -21
  161. data/lib/makit/tasks/version.rb +6 -6
  162. data/lib/makit/tasks.rb +24 -24
  163. data/lib/makit/test_cache.rb +239 -239
  164. data/lib/makit/tree.rb +37 -37
  165. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  166. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  167. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  168. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  169. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  170. data/lib/makit/version.rb +661 -661
  171. data/lib/makit/version_util.rb +21 -21
  172. data/lib/makit/wix.rb +95 -95
  173. data/lib/makit/yaml.rb +29 -29
  174. data/lib/makit/zip.rb +17 -17
  175. data/lib/makit copy.rb +44 -44
  176. data/lib/makit.rb +119 -119
  177. metadata +2 -2
@@ -1,105 +1,105 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "local_secrets"
4
-
5
- module Makit
6
- module Secrets
7
- # Manager class for secrets management
8
- # Uses AzureSecrets if Azure Key Vault environment variables are set,
9
- # otherwise falls back to LocalSecrets
10
- class SecretsManager
11
- def initialize
12
- @secrets_backend = choose_backend
13
- end
14
-
15
- private
16
-
17
- def choose_backend
18
- # Check if Azure Key Vault environment variables are set
19
- if azure_keyvault_configured?
20
- require_relative "azure_secrets"
21
- AzureSecrets.new
22
- else
23
- LocalSecrets.new
24
- end
25
- end
26
-
27
- def azure_keyvault_configured?
28
- # Check for Azure Key Vault configuration
29
- # Requires both AZURE_SERVICE_PRINCIPAL_APP_ID and AZURE_KEYVAULT_NAME
30
- ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"] && !ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"].empty? &&
31
- ENV["AZURE_KEYVAULT_NAME"] && !ENV["AZURE_KEYVAULT_NAME"].empty?
32
- end
33
-
34
- public
35
-
36
- def add(key, value)
37
- @secrets_backend.add(key, value)
38
- end
39
-
40
- def remove(key)
41
- @secrets_backend.remove(key)
42
- end
43
-
44
- def has_key?(key)
45
- @secrets_backend.has_key?(key)
46
- end
47
-
48
- def key?(key)
49
- @secrets_backend.has_key?(key)
50
- end
51
-
52
- def get(key)
53
- @secrets_backend.get(key)
54
- end
55
-
56
- def set(key, value)
57
- @secrets_backend.set(key, value)
58
- end
59
-
60
- def get_secrets_filename
61
- @secrets_backend.get_secrets_filename
62
- end
63
-
64
- def get_secrets_hash
65
- @secrets_backend.get_secrets_hash
66
- end
67
-
68
- def save_secrets_hash(hash)
69
- @secrets_backend.save_secrets_hash(hash)
70
- end
71
-
72
- def info
73
- backend_name = backend_type
74
- puts " Backend: #{backend_name}"
75
-
76
- backend_class_name = @secrets_backend.class.name
77
- if backend_class_name == "Makit::Secrets::AzureSecrets"
78
- puts " Key Vault: #{@secrets_backend.instance_variable_get(:@keyvault_name)}"
79
- secret_name = Makit::Secrets::AzureKeyVault.secret_name
80
- puts " Secret Name: #{secret_name}"
81
- prefix = @secrets_backend.instance_variable_get(:@secret_prefix)
82
- puts " Secret Prefix: #{prefix}" if prefix
83
- elsif backend_class_name == "Makit::Secrets::LocalSecrets"
84
- puts " Secrets File: #{@secrets_backend.get_secrets_filename}"
85
- end
86
- puts ""
87
- @secrets_backend.info
88
- end
89
-
90
- private
91
-
92
- def backend_type
93
- backend_class_name = @secrets_backend.class.name
94
- case backend_class_name
95
- when "Makit::Secrets::AzureSecrets"
96
- "Azure Key Vault"
97
- when "Makit::Secrets::LocalSecrets"
98
- "LocalSecrets"
99
- else
100
- backend_class_name.split("::").last
101
- end
102
- end
103
- end
104
- end
105
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "local_secrets"
4
+
5
+ module Makit
6
+ module Secrets
7
+ # Manager class for secrets management
8
+ # Uses AzureSecrets if Azure Key Vault environment variables are set,
9
+ # otherwise falls back to LocalSecrets
10
+ class SecretsManager
11
+ def initialize
12
+ @secrets_backend = choose_backend
13
+ end
14
+
15
+ private
16
+
17
+ def choose_backend
18
+ # Check if Azure Key Vault environment variables are set
19
+ if azure_keyvault_configured?
20
+ require_relative "azure_secrets"
21
+ AzureSecrets.new
22
+ else
23
+ LocalSecrets.new
24
+ end
25
+ end
26
+
27
+ def azure_keyvault_configured?
28
+ # Check for Azure Key Vault configuration
29
+ # Requires both AZURE_SERVICE_PRINCIPAL_APP_ID and AZURE_KEYVAULT_NAME
30
+ ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"] && !ENV["AZURE_SERVICE_PRINCIPAL_APP_ID"].empty? &&
31
+ ENV["AZURE_KEYVAULT_NAME"] && !ENV["AZURE_KEYVAULT_NAME"].empty?
32
+ end
33
+
34
+ public
35
+
36
+ def add(key, value)
37
+ @secrets_backend.add(key, value)
38
+ end
39
+
40
+ def remove(key)
41
+ @secrets_backend.remove(key)
42
+ end
43
+
44
+ def has_key?(key)
45
+ @secrets_backend.has_key?(key)
46
+ end
47
+
48
+ def key?(key)
49
+ @secrets_backend.has_key?(key)
50
+ end
51
+
52
+ def get(key)
53
+ @secrets_backend.get(key)
54
+ end
55
+
56
+ def set(key, value)
57
+ @secrets_backend.set(key, value)
58
+ end
59
+
60
+ def get_secrets_filename
61
+ @secrets_backend.get_secrets_filename
62
+ end
63
+
64
+ def get_secrets_hash
65
+ @secrets_backend.get_secrets_hash
66
+ end
67
+
68
+ def save_secrets_hash(hash)
69
+ @secrets_backend.save_secrets_hash(hash)
70
+ end
71
+
72
+ def info
73
+ backend_name = backend_type
74
+ puts " Backend: #{backend_name}"
75
+
76
+ backend_class_name = @secrets_backend.class.name
77
+ if backend_class_name == "Makit::Secrets::AzureSecrets"
78
+ puts " Key Vault: #{@secrets_backend.instance_variable_get(:@keyvault_name)}"
79
+ secret_name = Makit::Secrets::AzureKeyVault.secret_name
80
+ puts " Secret Name: #{secret_name}"
81
+ prefix = @secrets_backend.instance_variable_get(:@secret_prefix)
82
+ puts " Secret Prefix: #{prefix}" if prefix
83
+ elsif backend_class_name == "Makit::Secrets::LocalSecrets"
84
+ puts " Secrets File: #{@secrets_backend.get_secrets_filename}"
85
+ end
86
+ puts ""
87
+ @secrets_backend.info
88
+ end
89
+
90
+ private
91
+
92
+ def backend_type
93
+ backend_class_name = @secrets_backend.class.name
94
+ case backend_class_name
95
+ when "Makit::Secrets::AzureSecrets"
96
+ "Azure Key Vault"
97
+ when "Makit::Secrets::LocalSecrets"
98
+ "LocalSecrets"
99
+ else
100
+ backend_class_name.split("::").last
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
data/lib/makit/secrets.rb CHANGED
@@ -1,16 +1,96 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "secrets/local_secrets"
4
- require_relative "secrets/secrets_manager"
5
-
6
- module Makit
7
- module Secrets
8
- # Module for secrets management
9
- # Contains LocalSecrets and SecretsManager classes
10
-
11
- # Backward compatibility: Factory method to create a SecretsManager instance
12
- def self.new
13
- SecretsManager.new
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "secrets/local_secrets"
4
+ require_relative "secrets/secrets_manager"
5
+
6
+ module Makit
7
+ module Secrets
8
+ # Module for secrets management
9
+ # Contains LocalSecrets and SecretsManager classes
10
+
11
+ # Backward compatibility: Factory method to create a SecretsManager instance
12
+ def self.new
13
+ SecretsManager.new
14
+ end
15
+
16
+ # Get or create a default instance for module-level method calls
17
+ @default_instance = nil
18
+
19
+ def self.default_instance
20
+ @default_instance ||= SecretsManager.new
21
+ end
22
+
23
+ # Module-level method: Check if a key exists
24
+ # @param key [String] The secret key to check
25
+ # @return [Boolean] true if key exists, false otherwise
26
+ def self.has_key?(key)
27
+ default_instance.has_key?(key)
28
+ end
29
+
30
+ # Module-level method: Get a secret value
31
+ # @param key [String] The secret key to retrieve
32
+ # @return [String, nil] The secret value, or nil if not found
33
+ def self.get(key)
34
+ default_instance.get(key)
35
+ end
36
+
37
+ # Module-level method: Set a secret value
38
+ # If value is not provided, prompts user for password input
39
+ # @param key [String] The secret key to set
40
+ # @param value [String, nil] The secret value (optional, will prompt if nil)
41
+ # @return [void]
42
+ def self.set(key, value = nil)
43
+ # If value is not provided, prompt user for password
44
+ if value.nil?
45
+ print "Enter password for '#{key}': "
46
+
47
+ # Try to use noecho for secure password input
48
+ begin
49
+ require "io/console"
50
+ value = $stdin.noecho { $stdin.gets }
51
+ rescue LoadError, NoMethodError
52
+ # Fallback to regular input if io/console is not available
53
+ value = $stdin.gets
54
+ end
55
+
56
+ value = value.chomp if value
57
+
58
+ puts "" # New line after password input
59
+
60
+ if value.nil? || value.empty?
61
+ raise "Password cannot be empty"
62
+ end
63
+ end
64
+
65
+ default_instance.set(key, value)
66
+ end
67
+
68
+ # Module-level method: Add a secret (alias for set)
69
+ # @param key [String] The secret key to add
70
+ # @param value [String] The secret value
71
+ # @return [void]
72
+ def self.add(key, value)
73
+ default_instance.add(key, value)
74
+ end
75
+
76
+ # Module-level method: Remove a secret
77
+ # @param key [String] The secret key to remove
78
+ # @return [void]
79
+ def self.remove(key)
80
+ default_instance.remove(key)
81
+ end
82
+
83
+ # Module-level method: Check if a key exists (alias for has_key?)
84
+ # @param key [String] The secret key to check
85
+ # @return [Boolean] true if key exists, false otherwise
86
+ def self.key?(key)
87
+ default_instance.key?(key)
88
+ end
89
+
90
+ # Module-level method: Display secrets information
91
+ # @return [void]
92
+ def self.info
93
+ default_instance.info
94
+ end
95
+ end
96
+ end
@@ -1,130 +1,130 @@
1
- # frozen_string_literal: true
2
-
3
- begin
4
- require "google/protobuf"
5
- rescue LoadError
6
- # google-protobuf gem not available, define a minimal protobuf interface
7
- module Google
8
- module Protobuf
9
- class Message
10
- def to_json(*_args)
11
- {}
12
- end
13
- end
14
- end
15
- end
16
- end
17
- # This module provides classes for the Makit gem.
18
- module Makit
19
- module Proto3Formats
20
- JSON = [0,
21
- PRETTY_JSON = 1,
22
- YAML = 2,
23
- BINARY = 3].freeze
24
- end
25
-
26
- # This class provide methods for serializing and deserializing objects.
27
- #
28
- class Serializer
29
- attr_accessor :format_map
30
-
31
- def self.save_as(filename, object)
32
- extension = File.extname(filename)
33
- case extension
34
- when ".json"
35
- File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).serialize(object))
36
- when ".yml"
37
- File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::YAML).serialize(object))
38
- when ".pb"
39
- File.binwrite(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
40
-
41
- # File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
42
- else
43
- raise "unsupported file extension: #{extension}"
44
- end
45
- end
46
-
47
- def self.open(filename, type)
48
- extension = File.extname(filename)
49
- case extension
50
- when ".json"
51
- Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).deserialize(type, File.read(filename))
52
- when ".yml"
53
- Makit::Serializer.new(Makit::Proto3Formats::YAML).deserialize(type, File.read(filename))
54
- when ".pb"
55
- data = File.binread(filename)
56
- Makit::Serializer.new(Makit::Proto3Formats::BINARY).deserialize(type, data)
57
- else
58
- raise "unsupported file extension: #{extension}"
59
- end
60
- end
61
-
62
- def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
63
- @format_maps = {
64
- ::Google::Protobuf::MessageExts => proto3_format,
65
- }
66
- end
67
-
68
- # Serialize an object to a byte[] or a string
69
- def serialize(object)
70
- raise "Object is nil" if object.nil?
71
- raise "object is not of type ::Google::Protobuf::MessageExts" unless object.is_a? ::Google::Protobuf::MessageExts
72
-
73
- case @format_maps[::Google::Protobuf::MessageExts]
74
- when Proto3Formats::JSON
75
- # puts "Serializing to protobuf json format"
76
- object.to_json
77
- when Proto3Formats::PRETTY_JSON
78
- # puts "Serializing to protobuf pretty json format"
79
- json = object.to_json
80
- JSON.pretty_generate(JSON.parse(json))
81
- when Proto3Formats::YAML
82
- # puts "Serializing to protobuf yaml format"
83
- data = JSON.parse(object.to_json)
84
- data.to_yaml.sub(/^---\n/, "")
85
- when Proto3Formats::BINARY
86
- # puts "Serializing to protobuf binary format"
87
- object.to_proto
88
- else
89
- raise "Unknown serialization format"
90
- end
91
- end
92
-
93
- # Deserialize a byte[] or a string to an object
94
- def deserialize(type, data)
95
- raise "data is nil" if data.nil?
96
-
97
- case @format_maps[::Google::Protobuf::MessageExts]
98
- when Proto3Formats::JSON
99
- raise "data is not of type string" unless data.is_a? String
100
-
101
- json = data
102
- # puts "Deserializing from protobuf json format into type #{type}"
103
- # use the from_json method to deserialize the object
104
- type.decode_json(json)
105
- when Proto3Formats::PRETTY_JSON
106
- raise "data is not of type string" unless data.is_a? String
107
-
108
- json = data
109
- # puts "Deserializing from protobuf pretty json format into type #{type}"
110
- # use the from_json method to deserialize the object
111
- type.decode_json(json)
112
- when Proto3Formats::YAML
113
- raise "data is not of type string" unless data.is_a? String
114
-
115
- yaml = data
116
- # convert yaml to json
117
- json = JSON.pretty_generate(YAML.safe_load(yaml))
118
- # puts "Deserializing from protobuf yaml format into type #{type}"
119
- type.decode_json(json)
120
- when Proto3Formats::BINARY
121
- # raise "data is not of type byte[]" if !data.is_a? Array
122
- bytes = data
123
- # puts "Deserializing from protobuf binary format into type #{type}"
124
- type.decode(bytes)
125
- else
126
- raise "Unknown serialization format"
127
- end
128
- end
129
- end
130
- end
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require "google/protobuf"
5
+ rescue LoadError
6
+ # google-protobuf gem not available, define a minimal protobuf interface
7
+ module Google
8
+ module Protobuf
9
+ class Message
10
+ def to_json(*_args)
11
+ {}
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ # This module provides classes for the Makit gem.
18
+ module Makit
19
+ module Proto3Formats
20
+ JSON = [0,
21
+ PRETTY_JSON = 1,
22
+ YAML = 2,
23
+ BINARY = 3].freeze
24
+ end
25
+
26
+ # This class provide methods for serializing and deserializing objects.
27
+ #
28
+ class Serializer
29
+ attr_accessor :format_map
30
+
31
+ def self.save_as(filename, object)
32
+ extension = File.extname(filename)
33
+ case extension
34
+ when ".json"
35
+ File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).serialize(object))
36
+ when ".yml"
37
+ File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::YAML).serialize(object))
38
+ when ".pb"
39
+ File.binwrite(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
40
+
41
+ # File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
42
+ else
43
+ raise "unsupported file extension: #{extension}"
44
+ end
45
+ end
46
+
47
+ def self.open(filename, type)
48
+ extension = File.extname(filename)
49
+ case extension
50
+ when ".json"
51
+ Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).deserialize(type, File.read(filename))
52
+ when ".yml"
53
+ Makit::Serializer.new(Makit::Proto3Formats::YAML).deserialize(type, File.read(filename))
54
+ when ".pb"
55
+ data = File.binread(filename)
56
+ Makit::Serializer.new(Makit::Proto3Formats::BINARY).deserialize(type, data)
57
+ else
58
+ raise "unsupported file extension: #{extension}"
59
+ end
60
+ end
61
+
62
+ def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
63
+ @format_maps = {
64
+ ::Google::Protobuf::MessageExts => proto3_format,
65
+ }
66
+ end
67
+
68
+ # Serialize an object to a byte[] or a string
69
+ def serialize(object)
70
+ raise "Object is nil" if object.nil?
71
+ raise "object is not of type ::Google::Protobuf::MessageExts" unless object.is_a? ::Google::Protobuf::MessageExts
72
+
73
+ case @format_maps[::Google::Protobuf::MessageExts]
74
+ when Proto3Formats::JSON
75
+ # puts "Serializing to protobuf json format"
76
+ object.to_json
77
+ when Proto3Formats::PRETTY_JSON
78
+ # puts "Serializing to protobuf pretty json format"
79
+ json = object.to_json
80
+ JSON.pretty_generate(JSON.parse(json))
81
+ when Proto3Formats::YAML
82
+ # puts "Serializing to protobuf yaml format"
83
+ data = JSON.parse(object.to_json)
84
+ data.to_yaml.sub(/^---\n/, "")
85
+ when Proto3Formats::BINARY
86
+ # puts "Serializing to protobuf binary format"
87
+ object.to_proto
88
+ else
89
+ raise "Unknown serialization format"
90
+ end
91
+ end
92
+
93
+ # Deserialize a byte[] or a string to an object
94
+ def deserialize(type, data)
95
+ raise "data is nil" if data.nil?
96
+
97
+ case @format_maps[::Google::Protobuf::MessageExts]
98
+ when Proto3Formats::JSON
99
+ raise "data is not of type string" unless data.is_a? String
100
+
101
+ json = data
102
+ # puts "Deserializing from protobuf json format into type #{type}"
103
+ # use the from_json method to deserialize the object
104
+ type.decode_json(json)
105
+ when Proto3Formats::PRETTY_JSON
106
+ raise "data is not of type string" unless data.is_a? String
107
+
108
+ json = data
109
+ # puts "Deserializing from protobuf pretty json format into type #{type}"
110
+ # use the from_json method to deserialize the object
111
+ type.decode_json(json)
112
+ when Proto3Formats::YAML
113
+ raise "data is not of type string" unless data.is_a? String
114
+
115
+ yaml = data
116
+ # convert yaml to json
117
+ json = JSON.pretty_generate(YAML.safe_load(yaml))
118
+ # puts "Deserializing from protobuf yaml format into type #{type}"
119
+ type.decode_json(json)
120
+ when Proto3Formats::BINARY
121
+ # raise "data is not of type byte[]" if !data.is_a? Array
122
+ bytes = data
123
+ # puts "Deserializing from protobuf binary format into type #{type}"
124
+ type.decode(bytes)
125
+ else
126
+ raise "Unknown serialization format"
127
+ end
128
+ end
129
+ end
130
+ end