class Metastore::Cabinet
Attributes
file[R]
separators[R]
storage_type[R]
Public Class Methods
new(file, separators: %w(. /), storage_type: :yaml)
click to toggle source
# File lib/metastore/cabinet.rb, line 7 def initialize(file, separators: %w(. /), storage_type: :yaml) @file = Pathname.new(file).expand_path @separators = separators.map { |x| "\\#{x}" }.join('|') @storage_type = storage_type end
Public Instance Methods
clear!()
click to toggle source
# File lib/metastore/cabinet.rb, line 25 def clear! save!({}) end
contents()
click to toggle source
# File lib/metastore/cabinet.rb, line 29 def contents storage.contents || {} end
get(key)
click to toggle source
# File lib/metastore/cabinet.rb, line 13 def get(key) split_key(key).inject(contents) do |c, k| c.is_a?(Hash) ? c[k] : nil end end
Also aliased as: []
set(key, value)
click to toggle source
# File lib/metastore/cabinet.rb, line 19 def set(key, value) current_contents = contents set_key_and_value(current_contents, split_key(key), value) save!(current_contents) end
Also aliased as: []=
Private Instance Methods
save!(new_values)
click to toggle source
# File lib/metastore/cabinet.rb, line 76 def save!(new_values) FileUtils.mkdir_p(file.dirname) unless file.exist? storage.save!(new_values) true rescue => e raise Errors::CabinetCannotSet, e.message end
set_key_and_value(input, key, value)
click to toggle source
# File lib/metastore/cabinet.rb, line 48 def set_key_and_value(input, key, value) current_key = key.shift.to_s input[current_key] = {} unless input[current_key] if key.empty? input[current_key] = stringify_keys(value) input else input[current_key] = {} unless input[current_key].is_a?(Hash) set_key_and_value(input[current_key], key, value) end end
split_key(key)
click to toggle source
# File lib/metastore/cabinet.rb, line 44 def split_key(key) key.to_s.split(Regexp.new(separators)) end
storage()
click to toggle source
# File lib/metastore/cabinet.rb, line 40 def storage @store || StorageFactory.from_sym(storage_type).new(file) end
stringify_keys(input)
click to toggle source
# File lib/metastore/cabinet.rb, line 61 def stringify_keys(input) case input when Hash Hash[ input.map do |k, v| [ k.respond_to?(:to_s) ? k.to_s : k, stringify_keys(v) ] end ] when Enumerable input.map { |v| stringify_keys(v) } else input.is_a?(Symbol) ? input.to_s : input end end