makit 0.0.99 → 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.
- checksums.yaml +4 -4
- data/README.md +41 -0
- data/exe/makit +5 -0
- data/lib/makit/apache.rb +28 -32
- data/lib/makit/cli/build_commands.rb +500 -0
- data/lib/makit/cli/generators/base_generator.rb +74 -0
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -0
- data/lib/makit/cli/generators/generator_factory.rb +49 -0
- data/lib/makit/cli/generators/node_generator.rb +50 -0
- data/lib/makit/cli/generators/ruby_generator.rb +77 -0
- data/lib/makit/cli/generators/rust_generator.rb +50 -0
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -0
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -0
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -0
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -0
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -0
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -0
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -0
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -0
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -0
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -0
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -0
- data/lib/makit/cli/main.rb +62 -33
- data/lib/makit/cli/project_commands.rb +868 -0
- data/lib/makit/cli/repository_commands.rb +661 -0
- data/lib/makit/cli/utility_commands.rb +521 -0
- data/lib/makit/commands/factory.rb +359 -0
- data/lib/makit/commands/middleware/base.rb +73 -0
- data/lib/makit/commands/middleware/cache.rb +248 -0
- data/lib/makit/commands/middleware/command_logger.rb +320 -0
- data/lib/makit/commands/middleware/unified_logger.rb +243 -0
- data/lib/makit/commands/middleware/validator.rb +269 -0
- data/lib/makit/commands/request.rb +254 -0
- data/lib/makit/commands/result.rb +323 -0
- data/lib/makit/commands/runner.rb +337 -0
- data/lib/makit/commands/strategies/base.rb +160 -0
- data/lib/makit/commands/strategies/synchronous.rb +134 -0
- data/lib/makit/commands.rb +51 -21
- data/lib/makit/configuration/gitlab_helper.rb +60 -0
- data/lib/makit/configuration/project.rb +127 -0
- data/lib/makit/configuration/rakefile_helper.rb +43 -0
- data/lib/makit/configuration/step.rb +34 -0
- data/lib/makit/configuration.rb +14 -0
- data/lib/makit/content/default_gitignore.rb +7 -5
- data/lib/makit/content/default_rakefile.rb +13 -11
- data/lib/makit/content/gem_rakefile.rb +16 -14
- data/lib/makit/context.rb +1 -0
- data/lib/makit/data.rb +49 -50
- data/lib/makit/directories.rb +141 -145
- data/lib/makit/directory.rb +262 -276
- data/lib/makit/docs/files.rb +89 -94
- data/lib/makit/docs/rake.rb +102 -106
- data/lib/makit/dotnet/cli.rb +65 -0
- data/lib/makit/dotnet/project.rb +153 -0
- data/lib/makit/dotnet/solution.rb +38 -0
- data/lib/makit/dotnet/solution_classlib.rb +239 -0
- data/lib/makit/dotnet/solution_console.rb +264 -0
- data/lib/makit/dotnet/solution_maui.rb +354 -0
- data/lib/makit/dotnet/solution_wasm.rb +275 -0
- data/lib/makit/dotnet/solution_wpf.rb +304 -0
- data/lib/makit/dotnet.rb +102 -219
- data/lib/makit/email.rb +90 -61
- data/lib/makit/environment.rb +142 -139
- data/lib/makit/examples/runner.rb +370 -0
- data/lib/makit/exceptions.rb +45 -0
- data/lib/makit/fileinfo.rb +24 -26
- data/lib/makit/files.rb +43 -47
- data/lib/makit/gems.rb +29 -28
- data/lib/makit/git/cli.rb +54 -0
- data/lib/makit/git/repository.rb +90 -0
- data/lib/makit/git.rb +98 -145
- data/lib/makit/gitlab_runner.rb +59 -60
- data/lib/makit/humanize.rb +137 -129
- data/lib/makit/indexer.rb +47 -56
- data/lib/makit/logging/configuration.rb +305 -0
- data/lib/makit/logging/format_registry.rb +84 -0
- data/lib/makit/logging/formatters/base.rb +39 -0
- data/lib/makit/logging/formatters/console_formatter.rb +140 -0
- data/lib/makit/logging/formatters/json_formatter.rb +65 -0
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -0
- data/lib/makit/logging/formatters/text_formatter.rb +64 -0
- data/lib/makit/logging/log_request.rb +115 -0
- data/lib/makit/logging/logger.rb +163 -0
- data/lib/makit/logging/sinks/base.rb +91 -0
- data/lib/makit/logging/sinks/console.rb +72 -0
- data/lib/makit/logging/sinks/file_sink.rb +92 -0
- data/lib/makit/logging/sinks/structured.rb +129 -0
- data/lib/makit/logging/sinks/unified_file_sink.rb +303 -0
- data/lib/makit/logging.rb +530 -106
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -16
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -16
- data/lib/makit/mp/project_mp.rb +199 -210
- data/lib/makit/mp/string_mp.rb +193 -176
- data/lib/makit/nuget.rb +74 -72
- data/lib/makit/port.rb +32 -34
- data/lib/makit/process.rb +163 -65
- data/lib/makit/protoc.rb +107 -104
- data/lib/makit/rake/cli.rb +196 -0
- data/lib/makit/rake.rb +25 -25
- data/lib/makit/ruby/cli.rb +185 -0
- data/lib/makit/ruby.rb +25 -0
- data/lib/makit/secrets.rb +51 -51
- data/lib/makit/serializer.rb +130 -115
- data/lib/makit/services/builder.rb +186 -0
- data/lib/makit/services/error_handler.rb +226 -0
- data/lib/makit/services/repository_manager.rb +229 -0
- data/lib/makit/services/validator.rb +112 -0
- data/lib/makit/setup/classlib.rb +53 -0
- data/lib/makit/setup/gem.rb +263 -0
- data/lib/makit/setup/runner.rb +45 -0
- data/lib/makit/setup.rb +5 -0
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -131
- data/lib/makit/symbols.rb +170 -149
- data/lib/makit/task_info.rb +128 -86
- data/lib/makit/tasks/at_exit.rb +13 -0
- data/lib/makit/tasks/build.rb +19 -0
- data/lib/makit/tasks/clean.rb +11 -0
- data/lib/makit/tasks/hook_manager.rb +393 -0
- data/lib/makit/tasks/init.rb +47 -0
- data/lib/makit/tasks/integrate.rb +17 -0
- data/lib/makit/tasks/pull_incoming.rb +11 -0
- data/lib/makit/tasks/setup.rb +6 -0
- data/lib/makit/tasks/sync.rb +12 -0
- data/lib/makit/tasks/tag.rb +15 -0
- data/lib/makit/tasks/task_monkey_patch.rb +79 -0
- data/lib/makit/tasks.rb +15 -150
- data/lib/makit/test_cache.rb +239 -0
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +3 -4
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -25
- data/lib/makit/version.rb +5 -61
- data/lib/makit/version_util.rb +21 -0
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -17
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -0
- data/lib/makit.rb +40 -267
- metadata +117 -110
- data/lib/makit/cli/clean.rb +0 -14
- data/lib/makit/cli/clone.rb +0 -59
- data/lib/makit/cli/init.rb +0 -38
- data/lib/makit/cli/make.rb +0 -54
- data/lib/makit/cli/new.rb +0 -37
- data/lib/makit/cli/nuget_cache.rb +0 -38
- data/lib/makit/cli/pull.rb +0 -31
- data/lib/makit/cli/setup.rb +0 -71
- data/lib/makit/cli/work.rb +0 -21
- data/lib/makit/command_runner.rb +0 -404
- data/lib/makit/content/default_gitignore.txt +0 -222
data/lib/makit/rake.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# This module provides classes for the Makit gem.
|
4
|
-
module Makit
|
5
|
-
# This class provide methods for working with the system Environment.
|
6
|
-
#
|
7
|
-
class
|
8
|
-
def self.rake_repository(url, task_name)
|
9
|
-
local_path = File.join(Makit::Directories::HOME, "code", "work", Makit::Directories.get_relative_directory(url))
|
10
|
-
if
|
11
|
-
Dir.chdir(local_path) do
|
12
|
-
puts "
|
13
|
-
"git pull".run
|
14
|
-
end
|
15
|
-
else
|
16
|
-
puts "> ".colorize(:grey) + "git clone #{url} #{local_path}".colorize(:green)
|
17
|
-
`git clone #{url} #{local_path}`
|
18
|
-
end
|
19
|
-
Dir.chdir(local_path) do
|
20
|
-
puts "
|
21
|
-
"rake #{task_name}".run
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This module provides classes for the Makit gem.
|
4
|
+
module Makit
|
5
|
+
# This class provide methods for working with the system Environment.
|
6
|
+
#
|
7
|
+
class RakeHelper
|
8
|
+
def self.rake_repository(url, task_name)
|
9
|
+
local_path = File.join(Makit::Directories::HOME, "code", "work", Makit::Directories.get_relative_directory(url))
|
10
|
+
if Dir.exist?(local_path)
|
11
|
+
Dir.chdir(local_path) do
|
12
|
+
puts " #{local_path.to_s.colorize(:grey)}"
|
13
|
+
"git pull".run
|
14
|
+
end
|
15
|
+
else
|
16
|
+
puts "> ".colorize(:grey) + "git clone #{url} #{local_path}".colorize(:green)
|
17
|
+
`git clone #{url} #{local_path}`
|
18
|
+
end
|
19
|
+
Dir.chdir(local_path) do
|
20
|
+
puts " #{local_path.to_s.colorize(:grey)}"
|
21
|
+
"rake #{task_name}".run
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
class Ruby
|
5
|
+
class CLI
|
6
|
+
# Get the current Ruby version using the 'ruby' CLI
|
7
|
+
def self.current_version
|
8
|
+
version_output = `ruby --version 2>/dev/null`.strip
|
9
|
+
raise "Ruby is not installed or not available in PATH" if version_output.empty?
|
10
|
+
|
11
|
+
# Extract version number from output like "ruby 3.2.0p123 (2023-01-01 revision abc123) [x86_64-darwin22]"
|
12
|
+
version_match = version_output.match(/ruby (\d+\.\d+\.\d+)/)
|
13
|
+
if version_match
|
14
|
+
version_match[1]
|
15
|
+
else
|
16
|
+
# Fallback: return the full version string if parsing fails
|
17
|
+
version_output
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get detailed Ruby version information
|
22
|
+
def self.version_info
|
23
|
+
version_output = `ruby --version 2>/dev/null`.strip
|
24
|
+
raise "Ruby is not installed or not available in PATH" if version_output.empty?
|
25
|
+
|
26
|
+
{
|
27
|
+
full_version: version_output,
|
28
|
+
version: current_version,
|
29
|
+
patch_level: extract_patch_level(version_output),
|
30
|
+
release_date: extract_release_date(version_output),
|
31
|
+
platform: extract_platform(version_output),
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
# Check if Ruby is installed and available
|
36
|
+
def self.installed?
|
37
|
+
system("ruby --version > /dev/null 2>&1")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get the Ruby executable path
|
41
|
+
def self.executable_path
|
42
|
+
`which ruby 2>/dev/null`.strip
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get Ruby configuration information
|
46
|
+
def self.config
|
47
|
+
return {} unless installed?
|
48
|
+
|
49
|
+
config_output = `ruby -e "puts RbConfig::CONFIG" 2>/dev/null`
|
50
|
+
return {} if config_output.empty?
|
51
|
+
|
52
|
+
config = {}
|
53
|
+
config_output.lines.each do |line|
|
54
|
+
key, value = line.strip.split("=", 2)
|
55
|
+
config[key] = value if key && value
|
56
|
+
end
|
57
|
+
config
|
58
|
+
end
|
59
|
+
|
60
|
+
# Get Ruby platform information
|
61
|
+
def self.platform
|
62
|
+
return nil unless installed?
|
63
|
+
|
64
|
+
`ruby -e "puts RUBY_PLATFORM" 2>/dev/null`.strip
|
65
|
+
end
|
66
|
+
|
67
|
+
# Get Ruby engine information
|
68
|
+
def self.engine
|
69
|
+
return nil unless installed?
|
70
|
+
|
71
|
+
engine_info = `ruby -e "puts RUBY_ENGINE" 2>/dev/null`.strip
|
72
|
+
engine_version = `ruby -e "puts RUBY_ENGINE_VERSION" 2>/dev/null`.strip
|
73
|
+
|
74
|
+
{
|
75
|
+
name: engine_info,
|
76
|
+
version: engine_version,
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
# Get Ruby installation directory
|
81
|
+
def self.installation_dir
|
82
|
+
return nil unless installed?
|
83
|
+
|
84
|
+
`ruby -e "puts RbConfig::CONFIG['prefix']" 2>/dev/null`.strip
|
85
|
+
end
|
86
|
+
|
87
|
+
# Get Ruby library directories
|
88
|
+
def self.library_dirs
|
89
|
+
return [] unless installed?
|
90
|
+
|
91
|
+
lib_dirs = `ruby -e "puts RbConfig::CONFIG['libdir']" 2>/dev/null`.strip
|
92
|
+
arch_lib_dirs = `ruby -e "puts RbConfig::CONFIG['archdir']" 2>/dev/null`.strip
|
93
|
+
|
94
|
+
[lib_dirs, arch_lib_dirs].compact.uniq
|
95
|
+
end
|
96
|
+
|
97
|
+
# Get Ruby gem directories
|
98
|
+
def self.gem_dirs
|
99
|
+
return [] unless installed?
|
100
|
+
|
101
|
+
gem_dirs_output = `ruby -e "puts Gem.path" 2>/dev/null`
|
102
|
+
return [] if gem_dirs_output.empty?
|
103
|
+
|
104
|
+
gem_dirs_output.strip.split("\n")
|
105
|
+
end
|
106
|
+
|
107
|
+
# Get Ruby load path
|
108
|
+
def self.load_path
|
109
|
+
return [] unless installed?
|
110
|
+
|
111
|
+
load_path_output = `ruby -e "puts $LOAD_PATH" 2>/dev/null`
|
112
|
+
return [] if load_path_output.empty?
|
113
|
+
|
114
|
+
load_path_output.strip.split("\n")
|
115
|
+
end
|
116
|
+
|
117
|
+
# Check if a specific Ruby version is available
|
118
|
+
def self.version_available?(version)
|
119
|
+
return false unless installed?
|
120
|
+
|
121
|
+
current = current_version
|
122
|
+
case version
|
123
|
+
when /^(\d+)\.(\d+)\.(\d+)$/
|
124
|
+
major = ::Regexp.last_match(1).to_i
|
125
|
+
minor = ::Regexp.last_match(2).to_i
|
126
|
+
patch = ::Regexp.last_match(3).to_i
|
127
|
+
current_major, current_minor, current_patch = current.split(".").map(&:to_i)
|
128
|
+
|
129
|
+
if major != current_major
|
130
|
+
major == current_major
|
131
|
+
elsif minor != current_minor
|
132
|
+
minor == current_minor
|
133
|
+
else
|
134
|
+
patch == current_patch
|
135
|
+
end
|
136
|
+
when /^(\d+)\.(\d+)$/
|
137
|
+
major = ::Regexp.last_match(1).to_i
|
138
|
+
minor = ::Regexp.last_match(2).to_i
|
139
|
+
current_major, current_minor = current.split(".").map(&:to_i)
|
140
|
+
major == current_major && minor == current_minor
|
141
|
+
when /^(\d+)$/
|
142
|
+
major = ::Regexp.last_match(1).to_i
|
143
|
+
current_major = current.split(".").first.to_i
|
144
|
+
major == current_major
|
145
|
+
else
|
146
|
+
false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# Get Ruby environment summary
|
151
|
+
def self.environment_summary
|
152
|
+
return { error: "Ruby is not installed" } unless installed?
|
153
|
+
|
154
|
+
{
|
155
|
+
version: current_version,
|
156
|
+
full_version: version_info[:full_version],
|
157
|
+
platform: platform,
|
158
|
+
engine: engine,
|
159
|
+
executable_path: executable_path,
|
160
|
+
installation_dir: installation_dir,
|
161
|
+
gem_dirs: gem_dirs,
|
162
|
+
library_dirs: library_dirs,
|
163
|
+
}
|
164
|
+
end
|
165
|
+
|
166
|
+
# Extract patch level from version string
|
167
|
+
def self.extract_patch_level(version_string)
|
168
|
+
match = version_string.match(/p(\d+)/)
|
169
|
+
match ? match[1] : nil
|
170
|
+
end
|
171
|
+
|
172
|
+
# Extract release date from version string
|
173
|
+
def self.extract_release_date(version_string)
|
174
|
+
match = version_string.match(/\((\d{4}-\d{2}-\d{2})/)
|
175
|
+
match ? match[1] : nil
|
176
|
+
end
|
177
|
+
|
178
|
+
# Extract platform from version string
|
179
|
+
def self.extract_platform(version_string)
|
180
|
+
match = version_string.match(/\[([^\]]+)\]/)
|
181
|
+
match ? match[1] : nil
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
data/lib/makit/ruby.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "ruby/cli"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
class Ruby
|
7
|
+
# Main Ruby module for Makit
|
8
|
+
# Provides Ruby-related functionality and utilities
|
9
|
+
|
10
|
+
# Get current Ruby version (convenience method)
|
11
|
+
def self.version
|
12
|
+
CLI.current_version
|
13
|
+
end
|
14
|
+
|
15
|
+
# Check if Ruby is installed (convenience method)
|
16
|
+
def self.installed?
|
17
|
+
CLI.installed?
|
18
|
+
end
|
19
|
+
|
20
|
+
# Get Ruby environment information (convenience method)
|
21
|
+
def self.info
|
22
|
+
CLI.environment_summary
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/makit/secrets.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
def save_secrets_hash(hash)
|
46
|
-
secrets_file = get_secrets_filename
|
47
|
-
# pretty print the hash
|
48
|
-
File.open(secrets_file, "w") { |f| f.puts JSON.pretty_generate(hash) }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
class Secrets
|
5
|
+
def add(key, value)
|
6
|
+
secrets_hash = get_secrets_hash
|
7
|
+
secrets_hash[key] = value
|
8
|
+
save_secrets_hash(secrets_hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove(key)
|
12
|
+
secrets_hash = get_secrets_hash
|
13
|
+
secrets_hash.delete(key)
|
14
|
+
save_secrets_hash(secrets_hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_key?(key)
|
18
|
+
secrets_hash = get_secrets_hash
|
19
|
+
secrets_hash.key?(key)
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(key)
|
23
|
+
secrets_hash = get_secrets_hash
|
24
|
+
secrets_hash[key]
|
25
|
+
end
|
26
|
+
|
27
|
+
def set(key, value)
|
28
|
+
secrets_hash = get_secrets_hash
|
29
|
+
secrets_hash[key] = value
|
30
|
+
save_secrets_hash(secrets_hash)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_secrets_filename
|
34
|
+
"#{Makit::Directories::ROOT}/secrets.json"
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_secrets_hash
|
38
|
+
secrets_file = get_secrets_filename
|
39
|
+
return {} unless File.exist?(secrets_file)
|
40
|
+
|
41
|
+
text = File.read(secrets_file)
|
42
|
+
JSON.parse(text)
|
43
|
+
end
|
44
|
+
|
45
|
+
def save_secrets_hash(hash)
|
46
|
+
secrets_file = get_secrets_filename
|
47
|
+
# pretty print the hash
|
48
|
+
File.open(secrets_file, "w") { |f| f.puts JSON.pretty_generate(hash) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/makit/serializer.rb
CHANGED
@@ -1,115 +1,130 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
when ".
|
39
|
-
Makit::Serializer.new(Makit::Proto3Formats::
|
40
|
-
|
41
|
-
Makit::Serializer.new(Makit::Proto3Formats::
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
when Proto3Formats::
|
75
|
-
#puts "Serializing to protobuf
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
when Proto3Formats::
|
99
|
-
raise "data is not of type string"
|
100
|
-
|
101
|
-
|
102
|
-
json
|
103
|
-
#
|
104
|
-
type.decode_json(json)
|
105
|
-
when Proto3Formats::
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
type
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|