makit 0.0.157 → 0.0.158
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.
- checksums.yaml +4 -4
- data/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/auto.rb +48 -48
- data/lib/makit/azure/blob_storage.rb +257 -257
- data/lib/makit/azure/cli.rb +284 -284
- data/lib/makit/cli/base.rb +17 -17
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +78 -78
- data/lib/makit/cli/pipeline_commands.rb +311 -311
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +207 -207
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +386 -386
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +162 -162
- data/lib/makit/commands/strategies/factory.rb +136 -136
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +48 -48
- data/lib/makit/configuration/gitlab_helper.rb +61 -61
- data/lib/makit/configuration/project.rb +292 -292
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -74
- data/lib/makit/configuration.rb +21 -21
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +170 -170
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +69 -69
- data/lib/makit/dotnet/project.rb +217 -217
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +32 -32
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +78 -54
- data/lib/makit/git/repository.rb +100 -100
- data/lib/makit/git.rb +104 -104
- data/lib/makit/gitlab/pipeline.rb +857 -857
- data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +218 -218
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/io/filesystem.rb +111 -111
- data/lib/makit/io/filesystem_service_impl.rb +337 -337
- data/lib/makit/lint.rb +212 -212
- data/lib/makit/logging/configuration.rb +309 -309
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +578 -578
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +205 -205
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/podman/podman.rb +458 -458
- data/lib/makit/podman/podman_service_impl.rb +1081 -1081
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +377 -377
- data/lib/makit/protoc.rb +112 -112
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake/trace_controller.rb +174 -174
- data/lib/makit/rake.rb +81 -81
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/rubygems.rb +137 -0
- data/lib/makit/secrets/azure_key_vault.rb +322 -322
- data/lib/makit/secrets/azure_secrets.rb +183 -183
- data/lib/makit/secrets/local_secrets.rb +72 -72
- data/lib/makit/secrets/secrets_manager.rb +105 -105
- data/lib/makit/secrets.rb +16 -16
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +367 -367
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/pages.rb +11 -11
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +175 -175
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/bump.rb +7 -7
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/info.rb +368 -368
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +60 -56
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/secrets.rb +7 -7
- data/lib/makit/tasks/setup.rb +16 -16
- data/lib/makit/tasks/sync.rb +14 -17
- data/lib/makit/tasks/tag.rb +27 -27
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +18 -18
- data/lib/makit/tasks/version.rb +6 -6
- data/lib/makit/tasks.rb +24 -24
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
- data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
- data/lib/makit/version.rb +661 -503
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +115 -114
- metadata +3 -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,16 @@
|
|
|
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
|
+
end
|
|
16
|
+
end
|
data/lib/makit/serializer.rb
CHANGED
|
@@ -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
|