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