class TreeDuplicator
Public Class Methods
duplicate(tree, dest_root)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 205 def self.duplicate(tree, dest_root) duplicator = new duplicator.setup(tree, dest_root) tree.accept(duplicator, nil) end
Public Instance Methods
setup(tree, dest_root)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 211 def setup(tree, dest_root) orig_root = File.join(tree.directory, tree.name) @dest_root, @orig_root = [dest_root, orig_root].map do |root| root.sub(/\/\Z/, '') end @orig_root_re = /\A#{Regexp.escape(@orig_root)}/ end
visit_dir_node(node, memo)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 219 def visit_dir_node(node, memo) dest_dir = replace_root(File.join(node.directory, node.name)) check_entry_existence(dest_dir) FileUtils.mkdir(File.expand_path(dest_dir)) visit_sub_nodes(node, memo) end
visit_file_node(node, memo)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 226 def visit_file_node(node, memo) orig_file = File.join(node.directory, node.name) dest_file = replace_root(orig_file) check_entry_existence(dest_file) FileUtils.cp(File.expand_path(orig_file), File.expand_path(dest_file)) end
Private Instance Methods
check_entry_existence(entry)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 240 def check_entry_existence(entry) if File.exist?(File.expand_path(entry)) raise DuplicationError, "#{entry} already exists: #{@orig_root} is not copied." end end
replace_root(path)
click to toggle source
# File lib/dumb_down_viewer/visitor.rb, line 236 def replace_root(path) path.sub(@orig_root_re, @dest_root) end