Class: Makit::Storage
- Inherits:
-
Object
- Object
- Makit::Storage
- Defined in:
- lib/makit/storage.rb
Overview
This class provide methods for serializing and deserializing objects.
Instance Attribute Summary collapse
-
#directory ⇒ Object
declare a private class variable, connection_string.
-
#protoc_binary_serializer ⇒ Object
Makit::Serializer::new() # = Makit::Serializer::new().
-
#protoc_json_serializer ⇒ Object
Makit::Serializer::new() # = Makit::Serializer::new().
Instance Method Summary collapse
-
#initialize(directory) ⇒ Storage
constructor
A new instance of Storage.
- #load(type, key) ⇒ Object
- #save(object, key) ⇒ Object
Constructor Details
#initialize(directory) ⇒ Storage
Returns a new instance of Storage.
12 13 14 15 16 |
# File 'lib/makit/storage.rb', line 12 def initialize(directory) @directory = directory @protoc_json_serializer = Makit::Serializer.new(Makit::Proto3Formats::JSON) @protoc_binary_serializer = Makit::Serializer.new(Makit::Proto3Formats::BINARY) end |
Instance Attribute Details
#directory ⇒ Object
declare a private class variable, connection_string
9 10 11 |
# File 'lib/makit/storage.rb', line 9 def directory @directory end |
#protoc_binary_serializer ⇒ Object
Makit::Serializer::new() # = Makit::Serializer::new()
10 11 12 |
# File 'lib/makit/storage.rb', line 10 def protoc_binary_serializer @protoc_binary_serializer end |
#protoc_json_serializer ⇒ Object
Makit::Serializer::new() # = Makit::Serializer::new()
10 11 12 |
# File 'lib/makit/storage.rb', line 10 def protoc_json_serializer @protoc_json_serializer end |
Instance Method Details
#load(type, key) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/makit/storage.rb', line 62 def load(type, key) raise "directory is nil" if @directory.nil? raise "Key is nil" if key.nil? # get the fully qualfied type name of the object type_name = type.to_s # object.class.to_s # puts "Type name: #{type_name}" type_rel_dir = type_name.downcase.gsub("::", "/") # puts "Type relative directory: #{type_rel_dir}" # extract the file extension from the key File.extname(key) # puts "File extension: #{file_extension}" rel_filename = File.join(type_rel_dir, key.to_s) # puts "Relative filename: #{rel_filename}" filename = File.join(@directory, rel_filename) # puts "Loading object from file: #{filename}" # make sure the file exists raise "File does not exist: #{filename}" unless File.exist?(filename) # read the bytes from the file bytes = File.read(filename, mode: "rb") # puts "Read object from file: #{filename}" # extract the file extension from the key file_extension = File.extname(key) # puts "File extension: #{file_extension}" serializer = nil if file_extension == ".json" serializer = @protoc_json_serializer elsif file_extension == ".pb" serializer = @protoc_binary_serializer else raise "Unknown file extension: #{file_extension}" end # deserialize the object serializer.deserialize(type, bytes) # puts "Deserialized object size: #{bytes.size} bytes" # if the object type inherits from Google::Protobuf::AbstractMessage, # then serialize to protobuf json format # if object.is_a? Google::Protobuf::MessageExts # puts "Serializing to protobuf json format" # serialized_object = object.to_json # pretty_json = JSON.pretty_generate(JSON.parse(serialized_object)) # puts pretty_json # else # puts "Serializing to Marshal format" # serialized_object = Marshal.dump(object) # end # serialize the object # serialized_object = Marshal.dump(object) # save the object to the storage # ... # puts "=" * 80 end |
#save(object, key) ⇒ Object
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/makit/storage.rb', line 18 def save(object, key) # puts "=" * 80 # puts "Saving object to storage" # puts "=" * 80 raise "directory is nil" if @directory.nil? raise "Object is nil" if object.nil? raise "Key is nil" if key.nil? # get the fully qualfied type name of the object type_name = object.class.to_s # puts "Type name: #{type_name}" type_rel_dir = type_name.downcase.gsub("::", "/") # puts "Type relative directory: #{type_rel_dir}" # extract the file extension from the key file_extension = File.extname(key) # puts "File extension: #{file_extension}" serializer = nil if file_extension == ".json" serializer = @protoc_json_serializer elsif file_extension == ".pb" serializer = @protoc_binary_serializer else raise "Unknown file extension: #{file_extension}" end bytes = serializer.serialize(object) # puts "Serialized object size: #{bytes.size} bytes" rel_filename = File.join(type_rel_dir, key.to_s) # puts "Relative filename: #{rel_filename}" filename = File.join(@directory, rel_filename) # puts "Saving object to file: #{filename}" # make sure the file directory has been created FileUtils.mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename)) # write the bytes to the file File.binwrite(filename, bytes) # puts "=" * 80 end |