Class: Ki::VersionMetadataFile
- Inherits:
-
KiJSONHashFile
- Object
- DirectoryBase
- KiJSONFile
- KiJSONHashFile
- Ki::VersionMetadataFile
- Defined in:
- lib/data_storage/version_metadata.rb
Overview
-
fileoperations
Constant Summary
Constants inherited from KiJSONHashFile
Class Method Summary collapse
Instance Method Summary collapse
-
#add_dependency(param_str, args = {}) ⇒ Object
Comma separated list of dependency arguments * dependency parameters can be given in the hash TODO: version_id should be resolved through Version.
- #add_file(root, full_path, parameters) ⇒ Object
- #add_file_info(name, size, *args) ⇒ Object
-
#add_files(source, patterns, default_parameters = {}) ⇒ Object
Processes all files from source that match patterns and for each file calculates hashes and stores tags based on default_parameters.
- #add_operation(args) ⇒ Object
Methods included from KiEnumerable
#any_matches?, #find_first, #size!, #to_h
Methods inherited from KiJSONFile
#edit_data, #load_data_from_file, load_json, #reset_cached_data, #save, #size
Methods inherited from DirectoryBase
#child, #empty?, #exists?, find!, #go, #init_from_path, #initialize, #ki_path, #mkdir, #name, #path, #root, #root?
Constructor Details
This class inherits a constructor from Ki::DirectoryBase
Class Method Details
.calculate_hashes(full_path, digester_ids) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/data_storage/version_metadata.rb', line 118 def VersionMetadataFile.calculate_hashes(full_path, digester_ids) digesters = {} digester_ids.each do |h| digesters[h] = KiCommand::KiExtensions.find!(File.join("/hashing", h)).digest end algos = digesters.values File.open(full_path, "r") do |io| while (!io.eof) buf = io.readpartial(1024) algos.each do |digester| digester.update(buf) end end end digesters.each_pair do |h, digester| digesters[h]=digester.hexdigest end digesters end |
Instance Method Details
#add_dependency(param_str, args = {}) ⇒ Object
Comma separated list of dependency arguments
-
dependency parameters can be given in the hash
TODO: version_id should be resolved through Version
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/data_storage/version_metadata.rb', line 35 def add_dependency(param_str, args={}) params = param_str.split(",") version_id = params.delete_at(0) dep_hash = {"version_id" => version_id}.merge(params.to_h("=")).merge(args) if dep_hash["internal"] dep_hash["internal"]=true end dep_hash.extend(DependencyMethods) dependencies << dep_hash dep_hash end |
#add_file(root, full_path, parameters) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/data_storage/version_metadata.rb', line 77 def add_file(root, full_path, parameters) stat = File.stat(full_path) size = stat.size extra = {} if stat.executable? extra["executable"]=true end if parameters["tags"] = Array(parameters["tags"]) if && .size > 0 extra["tags"]= end end if parameters["hashes"].nil? parameters["hashes"]=["sha1"] end if parameters["hashes"].size > 0 extra.merge!(VersionMetadataFile.calculate_hashes(full_path, parameters["hashes"])) end add_file_info(full_path[root.size+1..-1], size, extra) end |
#add_file_info(name, size, *args) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/data_storage/version_metadata.rb', line 99 def add_file_info(name, size, *args) extra = (args.select { |arg| arg.kind_of?(Hash) }.size!(0..1).first or {}) = (args - [extra]).flatten.uniq file_hash = {"path" => name, "size" => size}.merge(extra) if .size > 0 file_hash["tags"]= end files.each do |f| if f["path"] == name if f == file_hash return else raise "'#{name}' has already been added to version, but with different attributes:\n- old: #{f.inspect}\n- new: #{file_hash.inspect}" end end end files << file_hash end |
#add_files(source, patterns, default_parameters = {}) ⇒ Object
Processes all files from source that match patterns and for each file calculates hashes and stores tags based on default_parameters
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/data_storage/version_metadata.rb', line 52 def add_files(source, patterns, default_parameters={}) files_or_dirs = Array(patterns).map do |pattern| Dir.glob(File.join(source, pattern)) end.flatten files = [] files_or_dirs.each do |file_or_dir| if File.file?(file_or_dir) files << file_or_dir else Dir.glob(File.join(file_or_dir, "**/*")).each do |file| if File.file?(file) files << file end end end end files.sort.each do |file| add_file(source, file, default_parameters) end self end |
#add_operation(args) ⇒ Object
47 48 49 |
# File 'lib/data_storage/version_metadata.rb', line 47 def add_operation(args) operations << args end |