makit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/makit/apache.rb +32 -32
  3. data/lib/makit/cli/clean.rb +14 -14
  4. data/lib/makit/cli/clone.rb +59 -59
  5. data/lib/makit/cli/init.rb +38 -38
  6. data/lib/makit/cli/main.rb +33 -33
  7. data/lib/makit/cli/make.rb +54 -54
  8. data/lib/makit/cli/new.rb +37 -37
  9. data/lib/makit/cli/nuget_cache.rb +38 -38
  10. data/lib/makit/cli/pull.rb +31 -31
  11. data/lib/makit/cli/setup.rb +71 -71
  12. data/lib/makit/cli/work.rb +21 -21
  13. data/lib/makit/command_runner.rb +274 -237
  14. data/lib/makit/commands.rb +21 -21
  15. data/lib/makit/content/default_gitignore.rb +5 -5
  16. data/lib/makit/content/default_rakefile.rb +11 -11
  17. data/lib/makit/content/gem_rakefile.rb +14 -14
  18. data/lib/makit/data.rb +50 -50
  19. data/lib/makit/directories.rb +140 -140
  20. data/lib/makit/directory.rb +151 -120
  21. data/lib/makit/dotnet.rb +83 -75
  22. data/lib/makit/environment.rb +123 -123
  23. data/lib/makit/files.rb +47 -47
  24. data/lib/makit/git.rb +66 -66
  25. data/lib/makit/gitlab_runner.rb +60 -60
  26. data/lib/makit/humanize.rb +89 -89
  27. data/lib/makit/logging.rb +96 -96
  28. data/lib/makit/markdown.rb +75 -75
  29. data/lib/makit/mp/basic_object_mp.rb +16 -16
  30. data/lib/makit/mp/command_request.mp.rb +13 -0
  31. data/lib/makit/mp/project_mp.rb +156 -149
  32. data/lib/makit/mp/string_mp.rb +101 -101
  33. data/lib/makit/nuget.rb +57 -57
  34. data/lib/makit/protoc.rb +61 -61
  35. data/lib/makit/serializer.rb +115 -70
  36. data/lib/makit/storage.rb +131 -131
  37. data/lib/makit/symbols.rb +149 -149
  38. data/lib/makit/tasks.rb +67 -67
  39. data/lib/makit/tree.rb +37 -37
  40. data/lib/makit/v1/makit.v1_pb.rb +5 -5
  41. data/lib/makit/v1/makit.v1_services_pb.rb +25 -25
  42. data/lib/makit/version.rb +12 -12
  43. data/lib/makit/wix.rb +95 -95
  44. data/lib/makit/zip.rb +17 -17
  45. data/lib/makit.rb +243 -243
  46. metadata +4 -39
  47. data/.makit.project.json +0 -4
  48. data/.makit.project.yml +0 -2
  49. data/.rubocop.yml +0 -22
  50. data/.ruby-version +0 -1
  51. data/CHANGELOG.md +0 -8
  52. data/CODE_OF_CONDUCT.md +0 -84
  53. data/LICENSE +0 -21
  54. data/README.md +0 -119
  55. data/Rakefile +0 -200
  56. data/docs/Commands.md +0 -50
  57. data/docs_/Commands.md +0 -166
  58. data/docs_/Minitest.Timeouts.md +0 -332
  59. data/examples/protoc/Rakefile +0 -31
  60. data/examples/rake_default/Rakefile +0 -6
  61. data/examples/rubygem-foo/.gitkeep +0 -0
  62. data/examples/rubygem-foo/Rakefile +0 -3
  63. data/examples/run_mp/Rakefile +0 -8
  64. data/exe/makit +0 -5
  65. data/lib/makit/content/default_gitignore.txt +0 -222
  66. data/lib/makit/content/ruby_gitlab-ci.yml +0 -15
  67. data/lib/makit/v1/makit.v1.proto +0 -103
  68. data/makit.generated.sln +0 -30
  69. data/makit.sln +0 -69
  70. data/pages/.gitignore +0 -5
  71. data/pages/404.html +0 -25
  72. data/pages/Gemfile +0 -33
  73. data/pages/Gemfile.lock +0 -88
  74. data/pages/_config.yml +0 -55
  75. data/pages/_layouts/default.html +0 -1
  76. data/pages/_posts/2024-10-05-welcome-to-jekyll.markdown +0 -29
  77. data/pages/about.markdown +0 -18
  78. data/pages/index.markdown +0 -6
  79. data/sig/makit.rbs +0 -4
  80. data/src/ClassLib/Class1.cs +0 -6
  81. data/src/ClassLib/ClassLib.csproj +0 -13
data/lib/makit/protoc.rb CHANGED
@@ -1,61 +1,61 @@
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 Protoc
8
- def self.grpc_tools_path
9
- File.join(Makit::Directories::NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc::get_latest_grpc_tools_version)
10
- end
11
-
12
- def self.grpc_csharp_plugin_path
13
- Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
14
- end
15
- def self.setup
16
- if (!Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE))
17
- puts " warning: Nuget package cache directory #{Makit::Directories::NUGET_PACKAGE_CACHE} not found".colorize(:red)
18
- puts " warning: Unable to proceed with protoc setup".colorize(:red)
19
- else
20
- Makit::NuGet::cache("Grpc.Tools", "2.66.0")
21
- raise "Nuget package path #{Makit::Directories::NUGET_PACKAGE_CACHE} not found" if !Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
22
-
23
- # test if protoc is installed by running >protoc --version
24
- which_protoc = Makit::Environment.which("protoc")
25
- if (Makit::Environment.which("protoc").nil?)
26
- puts " protoc not found, installing...".colorize(:red)
27
- "go version".run
28
- "go install google.golang.org/protobuf/cmd/protoc-gen-go@latest".run
29
- "go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest".run
30
- "go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest".run
31
- else
32
- puts " protoc found at #{which_protoc}".colorize(:green)
33
- end
34
- raise "protoc not found" if !Makit::Environment.which("protoc")
35
-
36
- #"git clone https://github.com/googleapis/googleapis.git third_party".run unless File.directory?("third_party/google")
37
- puts " grpc_tools_path " + "#{Makit::Protoc::grpc_tools_path}".colorize(:green)
38
- puts " grpc_csharp_plugin_path " + "#{Makit::Protoc::grpc_csharp_plugin_path}".colorize(:green)
39
- end
40
- end
41
-
42
- # get the latest version of the grpc.tools package
43
- def self.get_latest_grpc_tools_version
44
- Makit::NuGet::get_latest_version("Grpc.Tools")
45
- end
46
-
47
- #GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
48
- def self.find_plugin_path(plugin_name)
49
- # search for a file matching the pattern *grpc_csharp_plugin* in the grpc.tools directory
50
- # should match on Windows and Linux
51
- if (Makit::Environment.is_windows?)
52
- plugin_name = plugin_name + ".exe"
53
- end
54
-
55
- plugin_path = Dir.glob("#{Makit::Directories::GRPC_TOOLS_PATH}/**/#{plugin_name}").first
56
-
57
- raise "Plugin path #{plugin_path} not found" if !File.exist?(plugin_path)
58
- plugin_path
59
- end
60
- end
61
- 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 Protoc
8
+ def self.grpc_tools_path
9
+ File.join(Makit::Directories::NUGET_PACKAGE_CACHE, "grpc.tools", Makit::Protoc::get_latest_grpc_tools_version)
10
+ end
11
+
12
+ def self.grpc_csharp_plugin_path
13
+ Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
14
+ end
15
+ def self.setup
16
+ if (!Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE))
17
+ puts " warning: Nuget package cache directory #{Makit::Directories::NUGET_PACKAGE_CACHE} not found".colorize(:red)
18
+ puts " warning: Unable to proceed with protoc setup".colorize(:red)
19
+ else
20
+ Makit::NuGet::cache("Grpc.Tools", "2.66.0")
21
+ raise "Nuget package path #{Makit::Directories::NUGET_PACKAGE_CACHE} not found" if !Dir.exist?(Makit::Directories::NUGET_PACKAGE_CACHE)
22
+
23
+ # test if protoc is installed by running >protoc --version
24
+ which_protoc = Makit::Environment.which("protoc")
25
+ if (Makit::Environment.which("protoc").nil?)
26
+ puts " protoc not found, installing...".colorize(:red)
27
+ "go version".run
28
+ "go install google.golang.org/protobuf/cmd/protoc-gen-go@latest".run
29
+ "go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest".run
30
+ "go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest".run
31
+ else
32
+ puts " protoc found at #{which_protoc}".colorize(:green)
33
+ end
34
+ raise "protoc not found" if !Makit::Environment.which("protoc")
35
+
36
+ #"git clone https://github.com/googleapis/googleapis.git third_party".run unless File.directory?("third_party/google")
37
+ puts " grpc_tools_path " + "#{Makit::Protoc::grpc_tools_path}".colorize(:green)
38
+ puts " grpc_csharp_plugin_path " + "#{Makit::Protoc::grpc_csharp_plugin_path}".colorize(:green)
39
+ end
40
+ end
41
+
42
+ # get the latest version of the grpc.tools package
43
+ def self.get_latest_grpc_tools_version
44
+ Makit::NuGet::get_latest_version("Grpc.Tools")
45
+ end
46
+
47
+ #GRPC_CSHARP_PLUGIN_PATH = Makit::Protoc::find_plugin_path("grpc_csharp_plugin")
48
+ def self.find_plugin_path(plugin_name)
49
+ # search for a file matching the pattern *grpc_csharp_plugin* in the grpc.tools directory
50
+ # should match on Windows and Linux
51
+ if (Makit::Environment.is_windows?)
52
+ plugin_name = plugin_name + ".exe"
53
+ end
54
+
55
+ plugin_path = Dir.glob("#{Makit::Directories::GRPC_TOOLS_PATH}/**/#{plugin_name}").first
56
+
57
+ raise "Plugin path #{plugin_path} not found" if !File.exist?(plugin_path)
58
+ plugin_path
59
+ end
60
+ end
61
+ end
@@ -1,70 +1,115 @@
1
- # frozen_string_literal: true
2
- require "google/protobuf"
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- module Proto3Formats
6
- JSON = 0,
7
- PRETTY_JSON = 1,
8
- BINARY = 3
9
- end
10
-
11
- # This class provide methods for serializing and deserializing objects.
12
- #
13
- class Serializer
14
- attr_accessor :format_map
15
-
16
- def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
17
- @format_maps = {
18
- ::Google::Protobuf::MessageExts => proto3_format,
19
- }
20
- end
21
-
22
- # Serialize an object to a byte[] or a string
23
- def serialize(object)
24
- raise "Object is nil" if object.nil?
25
- raise "object is not of type ::Google::Protobuf::MessageExts" if !object.is_a? ::Google::Protobuf::MessageExts
26
-
27
- case @format_maps[::Google::Protobuf::MessageExts]
28
- when Proto3Formats::JSON
29
- puts "Serializing to protobuf json format"
30
- object.to_json
31
- when Proto3Formats::PRETTY_JSON
32
- puts "Serializing to protobuf pretty json format"
33
- json = object.to_json
34
- pretty_json = JSON.pretty_generate(JSON.parse(json))
35
- pretty_json
36
- when Proto3Formats::BINARY
37
- puts "Serializing to protobuf binary format"
38
- serialized_object = object.to_proto
39
- else
40
- raise "Unknown serialization format"
41
- end
42
- end
43
-
44
- # Deserialize a byte[] or a string to an object
45
- def deserialize(type, data)
46
- raise "data is nil" if data.nil?
47
- case @format_maps[::Google::Protobuf::MessageExts]
48
- when Proto3Formats::JSON
49
- raise "data is not of type string" if !data.is_a? String
50
- json = data
51
- puts "Deserializing from protobuf json format into type #{type}"
52
- # use the from_json method to deserialize the object
53
- type.decode_json(json)
54
- when Proto3Formats::PRETTY_JSON
55
- raise "data is not of type string" if !data.is_a? String
56
- json = data
57
- puts "Deserializing from protobuf pretty json format into type #{type}"
58
- # use the from_json method to deserialize the object
59
- type.decode_json(json)
60
- when Proto3Formats::BINARY
61
- #raise "data is not of type byte[]" if !data.is_a? Array
62
- bytes = data
63
- puts "Deserializing from protobuf binary format into type #{type}"
64
- type.decode(bytes)
65
- else
66
- raise "Unknown serialization format"
67
- end
68
- end
69
- end # class Storage
70
- end # module Makit
1
+ # frozen_string_literal: true
2
+ require "google/protobuf"
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ module Proto3Formats
6
+ JSON = 0,
7
+ PRETTY_JSON = 1,
8
+ YAML = 2,
9
+ BINARY = 3
10
+ end
11
+
12
+ # This class provide methods for serializing and deserializing objects.
13
+ #
14
+ class Serializer
15
+ attr_accessor :format_map
16
+
17
+ def self.save_as(filename, object)
18
+ extension = File.extname(filename)
19
+ case extension
20
+ when ".json"
21
+ File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).serialize(object))
22
+ when ".yml"
23
+ File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::YAML).serialize(object))
24
+ when ".pb"
25
+ File.open(filename, "wb") do |file|
26
+ file.write(Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
27
+ end
28
+
29
+ #File.write(filename, Makit::Serializer.new(Makit::Proto3Formats::BINARY).serialize(object))
30
+ else
31
+ raise "unsupported file extension: #{extension}"
32
+ end
33
+ end
34
+
35
+ def self.open(filename, type)
36
+ extension = File.extname(filename)
37
+ case extension
38
+ when ".json"
39
+ Makit::Serializer.new(Makit::Proto3Formats::PRETTY_JSON).deserialize(type, File.read(filename))
40
+ when ".yml"
41
+ Makit::Serializer.new(Makit::Proto3Formats::YAML).deserialize(type, File.read(filename))
42
+ when ".pb"
43
+ data = File.open(filename, "rb") { |file| file.read }
44
+ Makit::Serializer.new(Makit::Proto3Formats::BINARY).deserialize(type, data)
45
+ else
46
+ raise "unsupported file extension: #{extension}"
47
+ end
48
+ end
49
+
50
+ def initialize(proto3_format = Proto3Formats::PRETTY_JSON)
51
+ @format_maps = {
52
+ ::Google::Protobuf::MessageExts => proto3_format,
53
+ }
54
+ end
55
+
56
+ # Serialize an object to a byte[] or a string
57
+ def serialize(object)
58
+ raise "Object is nil" if object.nil?
59
+ raise "object is not of type ::Google::Protobuf::MessageExts" if !object.is_a? ::Google::Protobuf::MessageExts
60
+
61
+ case @format_maps[::Google::Protobuf::MessageExts]
62
+ when Proto3Formats::JSON
63
+ #puts "Serializing to protobuf json format"
64
+ object.to_json
65
+ when Proto3Formats::PRETTY_JSON
66
+ #puts "Serializing to protobuf pretty json format"
67
+ json = object.to_json
68
+ pretty_json = JSON.pretty_generate(JSON.parse(json))
69
+ pretty_json
70
+ when Proto3Formats::YAML
71
+ #puts "Serializing to protobuf yaml format"
72
+ data = JSON.parse(object.to_json)
73
+ data.to_yaml.sub(/^---\n/, "")
74
+ when Proto3Formats::BINARY
75
+ #puts "Serializing to protobuf binary format"
76
+ serialized_object = object.to_proto
77
+ else
78
+ raise "Unknown serialization format"
79
+ end
80
+ end
81
+
82
+ # Deserialize a byte[] or a string to an object
83
+ def deserialize(type, data)
84
+ raise "data is nil" if data.nil?
85
+ case @format_maps[::Google::Protobuf::MessageExts]
86
+ when Proto3Formats::JSON
87
+ raise "data is not of type string" if !data.is_a? String
88
+ json = data
89
+ #puts "Deserializing from protobuf json format into type #{type}"
90
+ # use the from_json method to deserialize the object
91
+ type.decode_json(json)
92
+ when Proto3Formats::PRETTY_JSON
93
+ raise "data is not of type string" if !data.is_a? String
94
+ json = data
95
+ #puts "Deserializing from protobuf pretty json format into type #{type}"
96
+ # use the from_json method to deserialize the object
97
+ type.decode_json(json)
98
+ when Proto3Formats::YAML
99
+ raise "data is not of type string" if !data.is_a? String
100
+ yaml = data
101
+ # convert yaml to json
102
+ json = JSON.pretty_generate(YAML.safe_load(yaml))
103
+ #puts "Deserializing from protobuf yaml format into type #{type}"
104
+ type.decode_json(json)
105
+ when Proto3Formats::BINARY
106
+ #raise "data is not of type byte[]" if !data.is_a? Array
107
+ bytes = data
108
+ #puts "Deserializing from protobuf binary format into type #{type}"
109
+ type.decode(bytes)
110
+ else
111
+ raise "Unknown serialization format"
112
+ end
113
+ end
114
+ end # class Storage
115
+ end # module Makit
data/lib/makit/storage.rb CHANGED
@@ -1,131 +1,131 @@
1
- # frozen_string_literal: true
2
-
3
- # This module provides classes for the Makit gem.
4
- module Makit
5
- # This class provide methods for serializing and deserializing objects.
6
- #
7
- class Storage
8
- # declare a private class variable, connection_string
9
- attr_accessor :directory #= nil
10
- attr_accessor :protoc_json_serializer # = Makit::Serializer::new()
11
- attr_accessor :protoc_binary_serializer # = Makit::Serializer::new()
12
-
13
- def initialize(directory)
14
- @directory = directory
15
- @protoc_json_serializer = Makit::Serializer::new(Makit::Proto3Formats::JSON)
16
- @protoc_binary_serializer = Makit::Serializer::new(Makit::Proto3Formats::BINARY)
17
- end
18
-
19
- def save(object, key)
20
- puts "=" * 80
21
- puts "Saving object to storage"
22
- puts "=" * 80
23
- raise "directory is nil" if @directory.nil?
24
- raise "Object is nil" if object.nil?
25
- raise "Key is nil" if key.nil?
26
-
27
- # get the fully qualfied type name of the object
28
- type_name = object.class.to_s
29
- puts "Type name: #{type_name}"
30
-
31
- type_rel_dir = type_name.downcase.gsub("::", "/")
32
- puts "Type relative directory: #{type_rel_dir}"
33
-
34
- # extract the file extension from the key
35
- file_extension = File.extname(key)
36
- puts "File extension: #{file_extension}"
37
-
38
- serializer = nil
39
- if file_extension == ".json"
40
- serializer = @protoc_json_serializer
41
- elsif file_extension == ".pb"
42
- serializer = @protoc_binary_serializer
43
- else
44
- raise "Unknown file extension: #{file_extension}"
45
- end
46
- bytes = serializer.serialize(object)
47
- puts "Serialized object size: #{bytes.size} bytes"
48
-
49
- rel_filename = File.join(type_rel_dir, "#{key}")
50
- puts "Relative filename: #{rel_filename}"
51
-
52
- filename = File.join(@directory, rel_filename)
53
- puts "Saving object to file: #{filename}"
54
-
55
- # make sure the file directory has been created
56
- FileUtils.mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
57
- # write the bytes to the file
58
- File.open(filename, "wb") do |file|
59
- file.write(bytes)
60
- end
61
-
62
- puts "=" * 80
63
- end
64
-
65
- def load(type, key)
66
- raise "directory is nil" if @directory.nil?
67
- raise "Key is nil" if key.nil?
68
-
69
- # get the fully qualfied type name of the object
70
- type_name = type.to_s # object.class.to_s
71
- puts "Type name: #{type_name}"
72
-
73
- type_rel_dir = type_name.downcase.gsub("::", "/")
74
- puts "Type relative directory: #{type_rel_dir}"
75
-
76
- # extract the file extension from the key
77
- file_extension = File.extname(key)
78
- puts "File extension: #{file_extension}"
79
-
80
- rel_filename = File.join(type_rel_dir, "#{key}")
81
- puts "Relative filename: #{rel_filename}"
82
-
83
- filename = File.join(@directory, rel_filename)
84
- puts "Loading object from file: #{filename}"
85
-
86
- # make sure the file exists
87
- raise "File does not exist: #{filename}" unless File.exist?(filename)
88
-
89
- # read the bytes from the file
90
- bytes = File.read(filename, mode: "rb")
91
- puts "Read object from file: #{filename}"
92
-
93
- # extract the file extension from the key
94
- file_extension = File.extname(key)
95
- puts "File extension: #{file_extension}"
96
-
97
- serializer = nil
98
- if file_extension == ".json"
99
- serializer = @protoc_json_serializer
100
- elsif file_extension == ".pb"
101
- serializer = @protoc_binary_serializer
102
- else
103
- raise "Unknown file extension: #{file_extension}"
104
- end
105
-
106
- # deserialize the object
107
- object = serializer.deserialize(type, bytes)
108
- puts "Deserialized object size: #{bytes.size} bytes"
109
-
110
- # if the object type inherits from Google::Protobuf::AbstractMessage,
111
- # then serialize to protobuf json format
112
- #if object.is_a? Google::Protobuf::MessageExts
113
- # puts "Serializing to protobuf json format"
114
- # serialized_object = object.to_json
115
- # pretty_json = JSON.pretty_generate(JSON.parse(serialized_object))
116
- # puts pretty_json
117
- #else
118
- # puts "Serializing to Marshal format"
119
- # serialized_object = Marshal.dump(object)
120
- #end
121
- # serialize the object
122
- #serialized_object = Marshal.dump(object)
123
-
124
- # save the object to the storage
125
- # ...
126
- puts "=" * 80
127
-
128
- object
129
- end
130
- end # class Storage
131
- end # module Makit
1
+ # frozen_string_literal: true
2
+
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ # This class provide methods for serializing and deserializing objects.
6
+ #
7
+ class Storage
8
+ # declare a private class variable, connection_string
9
+ attr_accessor :directory #= nil
10
+ attr_accessor :protoc_json_serializer # = Makit::Serializer::new()
11
+ attr_accessor :protoc_binary_serializer # = Makit::Serializer::new()
12
+
13
+ def initialize(directory)
14
+ @directory = directory
15
+ @protoc_json_serializer = Makit::Serializer::new(Makit::Proto3Formats::JSON)
16
+ @protoc_binary_serializer = Makit::Serializer::new(Makit::Proto3Formats::BINARY)
17
+ end
18
+
19
+ def save(object, key)
20
+ #puts "=" * 80
21
+ #puts "Saving object to storage"
22
+ # puts "=" * 80
23
+ raise "directory is nil" if @directory.nil?
24
+ raise "Object is nil" if object.nil?
25
+ raise "Key is nil" if key.nil?
26
+
27
+ # get the fully qualfied type name of the object
28
+ type_name = object.class.to_s
29
+ #puts "Type name: #{type_name}"
30
+
31
+ type_rel_dir = type_name.downcase.gsub("::", "/")
32
+ #puts "Type relative directory: #{type_rel_dir}"
33
+
34
+ # extract the file extension from the key
35
+ file_extension = File.extname(key)
36
+ #puts "File extension: #{file_extension}"
37
+
38
+ serializer = nil
39
+ if file_extension == ".json"
40
+ serializer = @protoc_json_serializer
41
+ elsif file_extension == ".pb"
42
+ serializer = @protoc_binary_serializer
43
+ else
44
+ raise "Unknown file extension: #{file_extension}"
45
+ end
46
+ bytes = serializer.serialize(object)
47
+ #puts "Serialized object size: #{bytes.size} bytes"
48
+
49
+ rel_filename = File.join(type_rel_dir, "#{key}")
50
+ #puts "Relative filename: #{rel_filename}"
51
+
52
+ filename = File.join(@directory, rel_filename)
53
+ #puts "Saving object to file: #{filename}"
54
+
55
+ # make sure the file directory has been created
56
+ FileUtils.mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
57
+ # write the bytes to the file
58
+ File.open(filename, "wb") do |file|
59
+ file.write(bytes)
60
+ end
61
+
62
+ #puts "=" * 80
63
+ end
64
+
65
+ def load(type, key)
66
+ raise "directory is nil" if @directory.nil?
67
+ raise "Key is nil" if key.nil?
68
+
69
+ # get the fully qualfied type name of the object
70
+ type_name = type.to_s # object.class.to_s
71
+ #puts "Type name: #{type_name}"
72
+
73
+ type_rel_dir = type_name.downcase.gsub("::", "/")
74
+ #puts "Type relative directory: #{type_rel_dir}"
75
+
76
+ # extract the file extension from the key
77
+ file_extension = File.extname(key)
78
+ #puts "File extension: #{file_extension}"
79
+
80
+ rel_filename = File.join(type_rel_dir, "#{key}")
81
+ #puts "Relative filename: #{rel_filename}"
82
+
83
+ filename = File.join(@directory, rel_filename)
84
+ #puts "Loading object from file: #{filename}"
85
+
86
+ # make sure the file exists
87
+ raise "File does not exist: #{filename}" unless File.exist?(filename)
88
+
89
+ # read the bytes from the file
90
+ bytes = File.read(filename, mode: "rb")
91
+ #puts "Read object from file: #{filename}"
92
+
93
+ # extract the file extension from the key
94
+ file_extension = File.extname(key)
95
+ #puts "File extension: #{file_extension}"
96
+
97
+ serializer = nil
98
+ if file_extension == ".json"
99
+ serializer = @protoc_json_serializer
100
+ elsif file_extension == ".pb"
101
+ serializer = @protoc_binary_serializer
102
+ else
103
+ raise "Unknown file extension: #{file_extension}"
104
+ end
105
+
106
+ # deserialize the object
107
+ object = serializer.deserialize(type, bytes)
108
+ #puts "Deserialized object size: #{bytes.size} bytes"
109
+
110
+ # if the object type inherits from Google::Protobuf::AbstractMessage,
111
+ # then serialize to protobuf json format
112
+ #if object.is_a? Google::Protobuf::MessageExts
113
+ # puts "Serializing to protobuf json format"
114
+ # serialized_object = object.to_json
115
+ # pretty_json = JSON.pretty_generate(JSON.parse(serialized_object))
116
+ # puts pretty_json
117
+ #else
118
+ # puts "Serializing to Marshal format"
119
+ # serialized_object = Marshal.dump(object)
120
+ #end
121
+ # serialize the object
122
+ #serialized_object = Marshal.dump(object)
123
+
124
+ # save the object to the storage
125
+ # ...
126
+ #puts "=" * 80
127
+
128
+ object
129
+ end
130
+ end # class Storage
131
+ end # module Makit