# encoding: UTF-8 class Treet::Repo attr_reader :root def initialize(path, opts = {}) raise Errno::ENOENT, "Missing or invalid source path #{path}" unless File.directory?(path) @root = path end def to_hash expand(root) end def compare(target) Treet::Hash.diff(to_hash, target.to_hash) end # patch keys can look like # name.first # emails[] # (address[1] syntax has been eliminated, we recognize array elements by matching the entire content) def self.filefor(keyname) if keyname =~ /\[/ keyname = keyname.match(/^(.*)\[\]$/).captures.first [keyname, '', nil] elsif keyname =~ /\./ # subelement # negative lookbehind; don't split on a dot at beginning of string filename,field = keyname.split(/(?