makit 0.0.112 → 0.0.126

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/cli/build_commands.rb +500 -500
  6. data/lib/makit/cli/generators/base_generator.rb +74 -74
  7. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  8. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  9. data/lib/makit/cli/generators/node_generator.rb +50 -50
  10. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  11. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  12. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  13. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  14. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  15. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
  16. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  17. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  18. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  19. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  20. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  21. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  22. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  23. data/lib/makit/cli/main.rb +62 -62
  24. data/lib/makit/cli/project_commands.rb +868 -868
  25. data/lib/makit/cli/repository_commands.rb +661 -661
  26. data/lib/makit/cli/utility_commands.rb +521 -521
  27. data/lib/makit/commands/factory.rb +359 -359
  28. data/lib/makit/commands/middleware/base.rb +73 -73
  29. data/lib/makit/commands/middleware/cache.rb +248 -248
  30. data/lib/makit/commands/middleware/command_logger.rb +311 -320
  31. data/lib/makit/commands/middleware/validator.rb +269 -269
  32. data/lib/makit/commands/request.rb +316 -254
  33. data/lib/makit/commands/result.rb +323 -323
  34. data/lib/makit/commands/runner.rb +368 -337
  35. data/lib/makit/commands/strategies/base.rb +171 -160
  36. data/lib/makit/commands/strategies/synchronous.rb +139 -134
  37. data/lib/makit/commands.rb +50 -51
  38. data/lib/makit/configuration/gitlab_helper.rb +58 -60
  39. data/lib/makit/configuration/project.rb +167 -127
  40. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  41. data/lib/makit/configuration/step.rb +34 -34
  42. data/lib/makit/configuration.rb +14 -14
  43. data/lib/makit/content/default_gitignore.rb +7 -7
  44. data/lib/makit/content/default_gitignore.txt +226 -0
  45. data/lib/makit/content/default_rakefile.rb +13 -13
  46. data/lib/makit/content/gem_rakefile.rb +16 -16
  47. data/lib/makit/context.rb +1 -1
  48. data/lib/makit/data.rb +49 -49
  49. data/lib/makit/directories.rb +140 -141
  50. data/lib/makit/directory.rb +262 -262
  51. data/lib/makit/docs/files.rb +89 -89
  52. data/lib/makit/docs/rake.rb +102 -102
  53. data/lib/makit/dotnet/cli.rb +69 -65
  54. data/lib/makit/dotnet/project.rb +217 -153
  55. data/lib/makit/dotnet/solution.rb +38 -38
  56. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  57. data/lib/makit/dotnet/solution_console.rb +264 -264
  58. data/lib/makit/dotnet/solution_maui.rb +354 -354
  59. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  60. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  61. data/lib/makit/dotnet.rb +102 -102
  62. data/lib/makit/email.rb +90 -90
  63. data/lib/makit/environment.rb +142 -142
  64. data/lib/makit/examples/runner.rb +370 -370
  65. data/lib/makit/exceptions.rb +45 -45
  66. data/lib/makit/fileinfo.rb +24 -24
  67. data/lib/makit/files.rb +43 -43
  68. data/lib/makit/gems.rb +40 -40
  69. data/lib/makit/git/cli.rb +54 -54
  70. data/lib/makit/git/repository.rb +90 -90
  71. data/lib/makit/git.rb +98 -98
  72. data/lib/makit/gitlab_runner.rb +59 -59
  73. data/lib/makit/humanize.rb +137 -137
  74. data/lib/makit/indexer.rb +47 -47
  75. data/lib/makit/logging/configuration.rb +308 -305
  76. data/lib/makit/logging/format_registry.rb +84 -84
  77. data/lib/makit/logging/formatters/base.rb +39 -39
  78. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  79. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  80. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  81. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  82. data/lib/makit/logging/log_request.rb +119 -115
  83. data/lib/makit/logging/logger.rb +199 -163
  84. data/lib/makit/logging/sinks/base.rb +91 -91
  85. data/lib/makit/logging/sinks/console.rb +72 -72
  86. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  87. data/lib/makit/logging/sinks/structured.rb +123 -129
  88. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -303
  89. data/lib/makit/logging.rb +565 -530
  90. data/lib/makit/markdown.rb +75 -75
  91. data/lib/makit/mp/basic_object_mp.rb +17 -17
  92. data/lib/makit/mp/command_mp.rb +13 -13
  93. data/lib/makit/mp/command_request.mp.rb +17 -17
  94. data/lib/makit/mp/project_mp.rb +199 -199
  95. data/lib/makit/mp/string_mp.rb +191 -193
  96. data/lib/makit/nuget.rb +74 -74
  97. data/lib/makit/port.rb +32 -32
  98. data/lib/makit/process.rb +163 -163
  99. data/lib/makit/protoc.rb +107 -107
  100. data/lib/makit/rake/cli.rb +196 -196
  101. data/lib/makit/rake.rb +25 -25
  102. data/lib/makit/ruby/cli.rb +185 -185
  103. data/lib/makit/ruby.rb +25 -25
  104. data/lib/makit/secrets.rb +51 -51
  105. data/lib/makit/serializer.rb +130 -130
  106. data/lib/makit/services/builder.rb +186 -186
  107. data/lib/makit/services/error_handler.rb +226 -226
  108. data/lib/makit/services/repository_manager.rb +231 -229
  109. data/lib/makit/services/validator.rb +112 -112
  110. data/lib/makit/setup/classlib.rb +90 -53
  111. data/lib/makit/setup/gem.rb +268 -263
  112. data/lib/makit/setup/razorclasslib.rb +91 -0
  113. data/lib/makit/setup/runner.rb +54 -45
  114. data/lib/makit/setup.rb +5 -5
  115. data/lib/makit/show.rb +110 -110
  116. data/lib/makit/storage.rb +126 -126
  117. data/lib/makit/symbols.rb +170 -170
  118. data/lib/makit/task_info.rb +128 -128
  119. data/lib/makit/tasks/at_exit.rb +15 -13
  120. data/lib/makit/tasks/build.rb +22 -19
  121. data/lib/makit/tasks/clean.rb +13 -11
  122. data/lib/makit/tasks/configure.rb +10 -0
  123. data/lib/makit/tasks/format.rb +10 -0
  124. data/lib/makit/tasks/hook_manager.rb +391 -393
  125. data/lib/makit/tasks/init.rb +49 -47
  126. data/lib/makit/tasks/integrate.rb +29 -17
  127. data/lib/makit/tasks/pull_incoming.rb +13 -11
  128. data/lib/makit/tasks/setup.rb +13 -6
  129. data/lib/makit/tasks/sync.rb +17 -12
  130. data/lib/makit/tasks/tag.rb +16 -15
  131. data/lib/makit/tasks/task_monkey_patch.rb +81 -79
  132. data/lib/makit/tasks/test.rb +22 -0
  133. data/lib/makit/tasks/update.rb +18 -0
  134. data/lib/makit/tasks.rb +20 -15
  135. data/lib/makit/test_cache.rb +239 -239
  136. data/lib/makit/tree.rb +37 -37
  137. data/lib/makit/v1/makit.v1_pb.rb +35 -34
  138. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  139. data/lib/makit/version.rb +5 -5
  140. data/lib/makit/version_util.rb +21 -21
  141. data/lib/makit/wix.rb +95 -95
  142. data/lib/makit/yaml.rb +29 -29
  143. data/lib/makit/zip.rb +17 -17
  144. data/lib/makit copy.rb +44 -44
  145. data/lib/makit.rb +39 -40
  146. metadata +69 -7
  147. data/lib/makit/commands/middleware/unified_logger.rb +0 -243
@@ -1,45 +1,54 @@
1
- # frozen_string_literal: true
2
- require_relative "classlib"
3
- require_relative "gem"
4
-
5
- module Makit
6
- module Setup
7
- class Runner
8
- def self.run
9
-
10
- # open .makit.json and get project type, to determine which setup to run
11
- if File.exist?(".makit.json")
12
- begin
13
- project = Makit::Serializer.open(".makit.json", Makit::Configuration::Project)
14
-
15
- # Update version to match VERSION constant if it exists
16
- if defined?(Makit::VERSION)
17
- project.version = Makit::VERSION
18
- end
19
-
20
- # Check if the file contains compact JSON and resave as pretty JSON
21
- current_content = File.read(".makit.json")
22
- pretty_content = project.to_json_pretty
23
-
24
- # Only rewrite if the content is different (i.e., if it was compact or version changed)
25
- if current_content.strip != pretty_content.strip
26
- File.write(".makit.json", pretty_content)
27
- end
28
- rescue
29
- raise "Error opening .makit.json"
30
- end
31
- project_type = project.project_type
32
- case project_type
33
- when "classlib"
34
- Makit::Setup::ClassLib.run
35
- when "gem"
36
- Makit::Setup::Gem.run
37
- else
38
- Makit::Logging.default_logger.warn("Unsupported project type: #{project_type}")
39
- #puts "Unsupported project type: #{project_type}"
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "classlib"
4
+ require_relative "gem"
5
+ require_relative "razorclasslib"
6
+ require_relative "../content/default_gitignore"
7
+
8
+ module Makit
9
+ module Setup
10
+ class Runner
11
+ def self.run
12
+
13
+ # if a .git directory exists, then make sure we have a .gitignore
14
+ if File.exist?(".git")
15
+ if !File.exist?(".gitignore")
16
+ File.write(".gitignore", Makit::Content::GITIGNORE)
17
+ end
18
+ end
19
+ # open .makit.json and get project type, to determine which setup to run
20
+ return unless File.exist?(".makit.json")
21
+
22
+ begin
23
+ project = Makit::Serializer.open(".makit.json", Makit::Configuration::Project)
24
+
25
+ # Update version to match VERSION constant only if project version is truly empty
26
+ if defined?(Makit::VERSION) && (project.version.nil? || project.version.empty?)
27
+ project.version = Makit::VERSION
28
+ end
29
+
30
+ # Check if the file contains compact JSON and resave as pretty JSON
31
+ current_content = File.read(".makit.json")
32
+ pretty_content = project.to_json_pretty
33
+
34
+ # Only rewrite if the content is different (i.e., if it was compact or version changed)
35
+ File.write(".makit.json", pretty_content) if current_content.strip != pretty_content.strip
36
+ rescue StandardError
37
+ raise "Error opening .makit.json"
38
+ end
39
+ project_type = project.project_type
40
+ case project_type
41
+ when "classlib"
42
+ Makit::Setup::ClassLib.run
43
+ when "razorclasslib"
44
+ Makit::Setup::RazorClassLib.run
45
+ when "gem"
46
+ Makit::Setup::Gem.run
47
+ else
48
+ Makit::Logging.default_logger.warn("Unsupported project type: #{project_type}")
49
+ # puts "Unsupported project type: #{project_type}"
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
data/lib/makit/setup.rb CHANGED
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "setup/runner"
4
- require_relative "setup/classlib"
5
- require_relative "setup/gem"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "setup/runner"
4
+ require_relative "setup/classlib"
5
+ require_relative "setup/gem"
data/lib/makit/show.rb CHANGED
@@ -1,110 +1,110 @@
1
- # frozen_string_literal: true
2
-
3
- require "find"
4
- require "pathname"
5
-
6
- # This module provides classes for the Makit gem.
7
- module Makit
8
- class Show
9
- def modified(path)
10
- if File.file?(path)
11
- puts "#{path} modified ".colorize(:grey) + Makit::Humanize.get_humanized_timestamp(File.mtime(path)).to_s.colorize(:cyan)
12
- elsif File.directory?(path)
13
- puts "#{path} modified ".colorize(:grey) + Makit::Humanize.get_humanized_timestamp(Makit::Directory.modified(path)).to_s.colorize(:cyan)
14
- else
15
- puts "#{path} does not exist"
16
- end
17
- end
18
-
19
- def age(path)
20
- if File.file?(path)
21
- modified = File.mtime(path)
22
- age = (Time.now - modified).to_f
23
- puts "#{path} age is ".colorize(:grey) + Makit::Humanize.get_humanized_duration(age).to_s.colorize(:cyan)
24
- elsif File.directory?(path)
25
- modified = Makit::Directory.modified(path)
26
- age = Time.now(-modified).to_f
27
- puts "#{path} age is ".colorize(:grey) + Makit::Humanize.get_humanized_duration(age).to_s.colorize(:cyan)
28
- else
29
- puts "#{path} does not exist"
30
- end
31
- end
32
-
33
- def file(path)
34
- if File.file?(path)
35
- modified = File.mtime(path)
36
- (Time.now - modified).to_f
37
- humanized_size = Makit::Humanize.get_humanized_size(File.size(path))
38
- # puts "#{file_symbol} ".colorize(:grey) + "#{humanized_size.rjust(10)} ".colorize(:cyan) + " #{path} ".colorize(:grey)
39
- puts "#{file_symbol} ".colorize(:grey) + "#{File.basename(path)} ".colorize(:green) + "#{humanized_size.rjust(10)} ".colorize(:cyan) + " #{path} ".colorize(:grey) # + "modified #{Makit::Humanize.get_humanized_timestamp(modified)}".colorize(:grey) + " age #{Makit::Humanize.get_humanized_duration(age)}".colorize(:grey)
40
- else
41
- puts "#{path} does not exist"
42
- end
43
- end
44
-
45
- def files(path_array)
46
- path_array.each do |path|
47
- file(path)
48
- end
49
- end
50
-
51
- def file_symbol
52
- # 📄 (U+1F4C4) – "Page with Curl"
53
- # "\u{1F4C4}"
54
- "@"
55
- end
56
-
57
- def directory_symbol
58
- # 📁 (U+1F4C1) – "File Folder"
59
- "\u{1F4C1}"
60
- end
61
-
62
- def task_symbol
63
- # 🛠️ (U+1F6E0) Hammer and Wrench – Represents tools, suitable for tasks and automation.
64
- "\u{1F6E0}"
65
- end
66
-
67
- def git_branch_symbol
68
- # 🌱 (U+1F331) – "Seedling"
69
- "\u{1F331}"
70
- end
71
-
72
- def size(path)
73
- if File.file?(path)
74
- puts "#{path} size is ".colorize(:grey) + Makit::Humanize.get_humanized_size(File.size(path)).to_s.colorize(:cyan)
75
- elsif File.directory?(path)
76
- puts "#{path} size is ".colorize(:grey) + Makit::Humanize.get_humanized_size(Makit::Directory.get_size(path)).to_s.colorize(:cyan)
77
- else
78
- puts "#{path} does not exist"
79
- end
80
- end
81
-
82
- def task(task)
83
- puts ("=" * 80).colorize(:grey)
84
- puts " ".colorize(:grey) + task.to_s.colorize(:green)
85
- # puts ("=" * 100).colorize(:grey)
86
- end
87
-
88
- def info(text)
89
- puts " ".colorize(:grey) + text.to_s.colorize(:cyan)
90
- end
91
-
92
- def success(text)
93
- puts " ".colorize(:grey) + text.to_s.colorize(:green)
94
- end
95
-
96
- def version(path)
97
- puts " #{Makit::Version.get_version_from_file(path)}".colorize(:green) + " found in #{path}".colorize(:grey)
98
- end
99
-
100
- def versions(glob_pattern)
101
- Dir.glob(glob_pattern).each do |filename|
102
- puts " #{Makit::Version.get_version_from_file(filename)}".colorize(:green) + " found in #{filename}".colorize(:grey)
103
- end
104
- end
105
-
106
- def git_branch
107
- puts "#{git_branch_symbol} ".colorize(:grey) + Makit::Git::Repository.branch.to_s.colorize(:green) + " branch".colorize(:grey)
108
- end
109
- end
110
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "find"
4
+ require "pathname"
5
+
6
+ # This module provides classes for the Makit gem.
7
+ module Makit
8
+ class Show
9
+ def modified(path)
10
+ if File.file?(path)
11
+ puts "#{path} modified ".colorize(:grey) + Makit::Humanize.get_humanized_timestamp(File.mtime(path)).to_s.colorize(:cyan)
12
+ elsif File.directory?(path)
13
+ puts "#{path} modified ".colorize(:grey) + Makit::Humanize.get_humanized_timestamp(Makit::Directory.modified(path)).to_s.colorize(:cyan)
14
+ else
15
+ puts "#{path} does not exist"
16
+ end
17
+ end
18
+
19
+ def age(path)
20
+ if File.file?(path)
21
+ modified = File.mtime(path)
22
+ age = (Time.now - modified).to_f
23
+ puts "#{path} age is ".colorize(:grey) + Makit::Humanize.get_humanized_duration(age).to_s.colorize(:cyan)
24
+ elsif File.directory?(path)
25
+ modified = Makit::Directory.modified(path)
26
+ age = Time.now(-modified).to_f
27
+ puts "#{path} age is ".colorize(:grey) + Makit::Humanize.get_humanized_duration(age).to_s.colorize(:cyan)
28
+ else
29
+ puts "#{path} does not exist"
30
+ end
31
+ end
32
+
33
+ def file(path)
34
+ if File.file?(path)
35
+ modified = File.mtime(path)
36
+ (Time.now - modified).to_f
37
+ humanized_size = Makit::Humanize.get_humanized_size(File.size(path))
38
+ # puts "#{file_symbol} ".colorize(:grey) + "#{humanized_size.rjust(10)} ".colorize(:cyan) + " #{path} ".colorize(:grey)
39
+ puts "#{file_symbol} ".colorize(:grey) + "#{File.basename(path)} ".colorize(:green) + "#{humanized_size.rjust(10)} ".colorize(:cyan) + " #{path} ".colorize(:grey) # + "modified #{Makit::Humanize.get_humanized_timestamp(modified)}".colorize(:grey) + " age #{Makit::Humanize.get_humanized_duration(age)}".colorize(:grey)
40
+ else
41
+ puts "#{path} does not exist"
42
+ end
43
+ end
44
+
45
+ def files(path_array)
46
+ path_array.each do |path|
47
+ file(path)
48
+ end
49
+ end
50
+
51
+ def file_symbol
52
+ # 📄 (U+1F4C4) – "Page with Curl"
53
+ # "\u{1F4C4}"
54
+ "@"
55
+ end
56
+
57
+ def directory_symbol
58
+ # 📁 (U+1F4C1) – "File Folder"
59
+ "\u{1F4C1}"
60
+ end
61
+
62
+ def task_symbol
63
+ # 🛠️ (U+1F6E0) Hammer and Wrench – Represents tools, suitable for tasks and automation.
64
+ "\u{1F6E0}"
65
+ end
66
+
67
+ def git_branch_symbol
68
+ # 🌱 (U+1F331) – "Seedling"
69
+ "\u{1F331}"
70
+ end
71
+
72
+ def size(path)
73
+ if File.file?(path)
74
+ puts "#{path} size is ".colorize(:grey) + Makit::Humanize.get_humanized_size(File.size(path)).to_s.colorize(:cyan)
75
+ elsif File.directory?(path)
76
+ puts "#{path} size is ".colorize(:grey) + Makit::Humanize.get_humanized_size(Makit::Directory.get_size(path)).to_s.colorize(:cyan)
77
+ else
78
+ puts "#{path} does not exist"
79
+ end
80
+ end
81
+
82
+ def task(task)
83
+ puts ("=" * 80).colorize(:grey)
84
+ puts " ".colorize(:grey) + task.to_s.colorize(:green)
85
+ # puts ("=" * 100).colorize(:grey)
86
+ end
87
+
88
+ def info(text)
89
+ puts " ".colorize(:grey) + text.to_s.colorize(:cyan)
90
+ end
91
+
92
+ def success(text)
93
+ puts " ".colorize(:grey) + text.to_s.colorize(:green)
94
+ end
95
+
96
+ def version(path)
97
+ puts " #{Makit::Version.get_version_from_file(path)}".colorize(:green) + " found in #{path}".colorize(:grey)
98
+ end
99
+
100
+ def versions(glob_pattern)
101
+ Dir.glob(glob_pattern).each do |filename|
102
+ puts " #{Makit::Version.get_version_from_file(filename)}".colorize(:green) + " found in #{filename}".colorize(:grey)
103
+ end
104
+ end
105
+
106
+ def git_branch
107
+ puts "#{git_branch_symbol} ".colorize(:grey) + Makit::Git::Repository.branch.to_s.colorize(:green) + " branch".colorize(:grey)
108
+ end
109
+ end
110
+ end
data/lib/makit/storage.rb CHANGED
@@ -1,126 +1,126 @@
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, :protoc_binary_serializer # = Makit::Serializer::new() # = Makit::Serializer::new()
11
-
12
- def initialize(directory)
13
- @directory = directory
14
- @protoc_json_serializer = Makit::Serializer.new(Makit::Proto3Formats::JSON)
15
- @protoc_binary_serializer = Makit::Serializer.new(Makit::Proto3Formats::BINARY)
16
- end
17
-
18
- def save(object, key)
19
- # puts "=" * 80
20
- # puts "Saving object to storage"
21
- # puts "=" * 80
22
- raise "directory is nil" if @directory.nil?
23
- raise "Object is nil" if object.nil?
24
- raise "Key is nil" if key.nil?
25
-
26
- # get the fully qualfied type name of the object
27
- type_name = object.class.to_s
28
- # puts "Type name: #{type_name}"
29
-
30
- type_rel_dir = type_name.downcase.gsub("::", "/")
31
- # puts "Type relative directory: #{type_rel_dir}"
32
-
33
- # extract the file extension from the key
34
- file_extension = File.extname(key)
35
- # puts "File extension: #{file_extension}"
36
-
37
- serializer = nil
38
- if file_extension == ".json"
39
- serializer = @protoc_json_serializer
40
- elsif file_extension == ".pb"
41
- serializer = @protoc_binary_serializer
42
- else
43
- raise "Unknown file extension: #{file_extension}"
44
- end
45
- bytes = serializer.serialize(object)
46
- # puts "Serialized object size: #{bytes.size} bytes"
47
-
48
- rel_filename = File.join(type_rel_dir, key.to_s)
49
- # puts "Relative filename: #{rel_filename}"
50
-
51
- filename = File.join(@directory, rel_filename)
52
- # puts "Saving object to file: #{filename}"
53
-
54
- # make sure the file directory has been created
55
- FileUtils.mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
56
- # write the bytes to the file
57
- File.binwrite(filename, bytes)
58
-
59
- # puts "=" * 80
60
- end
61
-
62
- def load(type, key)
63
- raise "directory is nil" if @directory.nil?
64
- raise "Key is nil" if key.nil?
65
-
66
- # get the fully qualfied type name of the object
67
- type_name = type.to_s # object.class.to_s
68
- # puts "Type name: #{type_name}"
69
-
70
- type_rel_dir = type_name.downcase.gsub("::", "/")
71
- # puts "Type relative directory: #{type_rel_dir}"
72
-
73
- # extract the file extension from the key
74
- File.extname(key)
75
- # puts "File extension: #{file_extension}"
76
-
77
- rel_filename = File.join(type_rel_dir, key.to_s)
78
- # puts "Relative filename: #{rel_filename}"
79
-
80
- filename = File.join(@directory, rel_filename)
81
- # puts "Loading object from file: #{filename}"
82
-
83
- # make sure the file exists
84
- raise "File does not exist: #{filename}" unless File.exist?(filename)
85
-
86
- # read the bytes from the file
87
- bytes = File.read(filename, mode: "rb")
88
- # puts "Read object from file: #{filename}"
89
-
90
- # extract the file extension from the key
91
- file_extension = File.extname(key)
92
- # puts "File extension: #{file_extension}"
93
-
94
- serializer = nil
95
- if file_extension == ".json"
96
- serializer = @protoc_json_serializer
97
- elsif file_extension == ".pb"
98
- serializer = @protoc_binary_serializer
99
- else
100
- raise "Unknown file extension: #{file_extension}"
101
- end
102
-
103
- # deserialize the object
104
- serializer.deserialize(type, bytes)
105
- # puts "Deserialized object size: #{bytes.size} bytes"
106
-
107
- # if the object type inherits from Google::Protobuf::AbstractMessage,
108
- # then serialize to protobuf json format
109
- # if object.is_a? Google::Protobuf::MessageExts
110
- # puts "Serializing to protobuf json format"
111
- # serialized_object = object.to_json
112
- # pretty_json = JSON.pretty_generate(JSON.parse(serialized_object))
113
- # puts pretty_json
114
- # else
115
- # puts "Serializing to Marshal format"
116
- # serialized_object = Marshal.dump(object)
117
- # end
118
- # serialize the object
119
- # serialized_object = Marshal.dump(object)
120
-
121
- # save the object to the storage
122
- # ...
123
- # puts "=" * 80
124
- end
125
- end
126
- 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 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, :protoc_binary_serializer # = Makit::Serializer::new() # = Makit::Serializer::new()
11
+
12
+ def initialize(directory)
13
+ @directory = directory
14
+ @protoc_json_serializer = Makit::Serializer.new(Makit::Proto3Formats::JSON)
15
+ @protoc_binary_serializer = Makit::Serializer.new(Makit::Proto3Formats::BINARY)
16
+ end
17
+
18
+ def save(object, key)
19
+ # puts "=" * 80
20
+ # puts "Saving object to storage"
21
+ # puts "=" * 80
22
+ raise "directory is nil" if @directory.nil?
23
+ raise "Object is nil" if object.nil?
24
+ raise "Key is nil" if key.nil?
25
+
26
+ # get the fully qualfied type name of the object
27
+ type_name = object.class.to_s
28
+ # puts "Type name: #{type_name}"
29
+
30
+ type_rel_dir = type_name.downcase.gsub("::", "/")
31
+ # puts "Type relative directory: #{type_rel_dir}"
32
+
33
+ # extract the file extension from the key
34
+ file_extension = File.extname(key)
35
+ # puts "File extension: #{file_extension}"
36
+
37
+ serializer = nil
38
+ if file_extension == ".json"
39
+ serializer = @protoc_json_serializer
40
+ elsif file_extension == ".pb"
41
+ serializer = @protoc_binary_serializer
42
+ else
43
+ raise "Unknown file extension: #{file_extension}"
44
+ end
45
+ bytes = serializer.serialize(object)
46
+ # puts "Serialized object size: #{bytes.size} bytes"
47
+
48
+ rel_filename = File.join(type_rel_dir, key.to_s)
49
+ # puts "Relative filename: #{rel_filename}"
50
+
51
+ filename = File.join(@directory, rel_filename)
52
+ # puts "Saving object to file: #{filename}"
53
+
54
+ # make sure the file directory has been created
55
+ FileUtils.mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
56
+ # write the bytes to the file
57
+ File.binwrite(filename, bytes)
58
+
59
+ # puts "=" * 80
60
+ end
61
+
62
+ def load(type, key)
63
+ raise "directory is nil" if @directory.nil?
64
+ raise "Key is nil" if key.nil?
65
+
66
+ # get the fully qualfied type name of the object
67
+ type_name = type.to_s # object.class.to_s
68
+ # puts "Type name: #{type_name}"
69
+
70
+ type_rel_dir = type_name.downcase.gsub("::", "/")
71
+ # puts "Type relative directory: #{type_rel_dir}"
72
+
73
+ # extract the file extension from the key
74
+ File.extname(key)
75
+ # puts "File extension: #{file_extension}"
76
+
77
+ rel_filename = File.join(type_rel_dir, key.to_s)
78
+ # puts "Relative filename: #{rel_filename}"
79
+
80
+ filename = File.join(@directory, rel_filename)
81
+ # puts "Loading object from file: #{filename}"
82
+
83
+ # make sure the file exists
84
+ raise "File does not exist: #{filename}" unless File.exist?(filename)
85
+
86
+ # read the bytes from the file
87
+ bytes = File.read(filename, mode: "rb")
88
+ # puts "Read object from file: #{filename}"
89
+
90
+ # extract the file extension from the key
91
+ file_extension = File.extname(key)
92
+ # puts "File extension: #{file_extension}"
93
+
94
+ serializer = nil
95
+ if file_extension == ".json"
96
+ serializer = @protoc_json_serializer
97
+ elsif file_extension == ".pb"
98
+ serializer = @protoc_binary_serializer
99
+ else
100
+ raise "Unknown file extension: #{file_extension}"
101
+ end
102
+
103
+ # deserialize the object
104
+ serializer.deserialize(type, bytes)
105
+ # puts "Deserialized object size: #{bytes.size} bytes"
106
+
107
+ # if the object type inherits from Google::Protobuf::AbstractMessage,
108
+ # then serialize to protobuf json format
109
+ # if object.is_a? Google::Protobuf::MessageExts
110
+ # puts "Serializing to protobuf json format"
111
+ # serialized_object = object.to_json
112
+ # pretty_json = JSON.pretty_generate(JSON.parse(serialized_object))
113
+ # puts pretty_json
114
+ # else
115
+ # puts "Serializing to Marshal format"
116
+ # serialized_object = Marshal.dump(object)
117
+ # end
118
+ # serialize the object
119
+ # serialized_object = Marshal.dump(object)
120
+
121
+ # save the object to the storage
122
+ # ...
123
+ # puts "=" * 80
124
+ end
125
+ end
126
+ end