Class: Rambling::Trie::Serializers::Zip
- Inherits:
-
Serializer
- Object
- Serializer
- Rambling::Trie::Serializers::Zip
- Defined in:
- lib/rambling/trie/serializers/zip.rb
Overview
Zip file serializer. Dumps/loads contents from ‘.zip` files. Automatically detects if zip file contains a `.marshal` or `.yml` file, or any other registered `:format => serializer` combo.
Instance Method Summary collapse
-
#dump(contents, filepath) ⇒ Integer
Dumps contents and zips into a specified filepath.
-
#initialize(properties) ⇒ Zip
constructor
Creates a new Zip serializer.
-
#load(filepath) ⇒ Nodes::Node
Unzip contents from specified filepath and load in contents from unzipped files.
Constructor Details
#initialize(properties) ⇒ Zip
Creates a new Zip serializer.
13 14 15 16 |
# File 'lib/rambling/trie/serializers/zip.rb', line 13 def initialize properties super() @properties = properties end |
Instance Method Details
#dump(contents, filepath) ⇒ Integer
Dumps contents and zips into a specified filepath.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/rambling/trie/serializers/zip.rb', line 49 def dump contents, filepath require 'zip' clean_up_tmp_files do |tmp_paths| ::Zip::File.open filepath, create: true do |zip| filename = ::File.basename filepath, '.zip' entry_path = path_with_random_prefix filename tmp_paths << entry_path (serializers.resolve(filename) || raise).dump contents, entry_path zip.add filename, entry_path end end ::File.size filepath end |
#load(filepath) ⇒ Nodes::Node
Unzip contents from specified filepath and load in contents from unzipped files.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/rambling/trie/serializers/zip.rb', line 24 def load filepath require 'zip' clean_up_tmp_files do |tmp_paths| ::Zip::File.open filepath do |zip| entry = zip.entries.first raise unless entry entry_name = entry.name entry_path = path_with_random_prefix entry_name tmp_paths << entry_path entry.extract ::File.basename(entry_path), destination_directory: tmp_path (serializers.resolve(entry_name) || raise).load entry_path end end end |