module StateMate::Adapters::YAML
Public Class Methods
cast_seg(key_seg)
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 22 def self.cast_seg key_seg if key_seg =~ /\A[0-9]+\z/ key_seg.to_i else key_seg end end
deep_write!(obj, key_segs, value)
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 73 def self.deep_write! obj, key_segs, value seg = cast_seg key_segs.first rest = key_segs[1..-1] if rest.empty? obj[seg] = value else deep_write! obj[seg], rest, value end end
parse_key(key)
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 17 def self.parse_key key # use the same key seperation as Defaults StateMate::Adapters::Defaults.parse_key key end
preorder=(keys)
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 13 def self.preorder= keys @preorder = keys end
read(key, options = {})
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 30 def self.read key, options = {} filepath, key_segs = parse_key key contents = File.read(File.expand_path(filepath)) value = ::YAML.load contents key_segs.each do |seg| seg = cast_seg seg value = case value when Hash, Array value = value[seg] else nil end end value end
write(key, value, options = {})
click to toggle source
# File lib/state_mate/adapters/yaml.rb, line 51 def self.write key, value, options = {} StateMate.debug key: key, value: value, options: options filepath, key_segs = parse_key key new_root = if key_segs.length > 1 root = read filepath deep_write! root, key_segs, value root else value end content = DiffableYAML.dump new_root, preorder: @preorder File.open(filepath, 'w') do |f| f.write content end end