# File lib/bones/app/file_manager.rb, line 14 14: def initialize( opts = {} ) 15: self.source = opts[:source] 16: self.destination = opts[:destination] 17: self.verbose = opts[:verbose] 18: 19: @out = opts[:stdout] || $stdout 20: @err = opts[:stderr] || $stderr 21: end
# File lib/bones/app/file_manager.rb, line 78 78: def _checkout( repotype ) 79: case repotype 80: when :git 81: system('git', 'clone', source, destination) 82: FileUtils.rm_rf(File.join(destination, '.git')) 83: when :svn 84: system('svn', 'export', source, destination) 85: else 86: raise Error, "Unknown repository type '#{repotype}'." 87: end 88: end
Copy a file from the Bones prototype project location to the user specified project location. A message will be displayed to the screen indicating that the file is being created.
# File lib/bones/app/file_manager.rb, line 160 160: def _cp( file ) 161: dir = File.dirname(file) 162: dir = (dir == '.' ? destination : File.join(destination, dir)) 163: dst = File.join(dir, File.basename(file)) 164: src = File.join(source, file) 165: 166: @out.puts(test(ee, dst) ? "updating #{dst}" : "creating #{dst}") if verbose? 167: FileUtils.mkdir_p(dir) 168: FileUtils.cp src, dst 169: 170: FileUtils.chmod(File.stat(src).mode, dst) 171: end
# File lib/bones/app/file_manager.rb, line 108 108: def _erb( name ) 109: binding = _erb_binding(name) 110: 111: Dir.glob(File.join(destination, '**', '*')).each do |fn| 112: next unless test(ff, fn) and '.bns' == File.extname(fn) 113: 114: txt = ERB.new(File.read(fn), nil, '-').result(binding) 115: new_fn = fn.sub(/\.bns$/, '') 116: File.open(new_fn, 'w') {|fd| fd.write(txt)} 117: FileUtils.chmod(File.stat(fn).mode, new_fn) 118: FileUtils.rm_f(fn) 119: end 120: self 121: end
# File lib/bones/app/file_manager.rb, line 125 125: def _erb_binding( name ) 126: obj = Object.new 127: class << obj 128: alias :__binding__ :binding 129: instance_methods.each {|m| undef_method m unless m[/^(__|object_id)/]} 130: def binding(name) 131: classname = name.tr('-','_').split('_').map {|x| x.capitalize}.join 132: __binding__ 133: end 134: end 135: obj.binding name 136: end
Returns a list of the files to copy from the source directory to the destination directory.
# File lib/bones/app/file_manager.rb, line 141 141: def _files_to_copy 142: rgxp = /\A#{source}\/?/ 143: exclude = /tmp$|bak$|~$|CVS|\.svn/ 144: 145: ary = Dir.glob(File.join(source, '**', '*'), File::FNM_DOTMATCH).map do |filename| 146: next if exclude =~ filename 147: next if test(dd, filename) 148: filename.sub rgxp, '' 149: end 150: 151: ary.compact! 152: ary.sort! 153: ary 154: end
# File lib/bones/app/file_manager.rb, line 92 92: def _rename( filename, name ) 93: newname = filename.gsub(/NAME/, name) 94: 95: if filename != newname 96: raise "cannot rename '#{filename}' to '#{newname}' - file already exists" if test(ee, newname) 97: FileUtils.mv(filename, newname) 98: end 99: 100: if test(dd, newname) 101: Dir.glob(File.join(newname, '*')).each {|fn| _rename(fn, name)} 102: end 103: newname 104: end
# File lib/bones/app/file_manager.rb, line 45 45: def archive_destination 46: return false unless test(ee, destination) 47: 48: @out.puts "archiving #{destination}" if verbose? 49: FileUtils.rm_rf(archive) 50: FileUtils.mv(destination, archive) 51: true 52: end
# File lib/bones/app/file_manager.rb, line 56 56: def copy 57: if repository? 58: _checkout(repository) 59: else 60: _files_to_copy.each {|fn| _cp(fn)} 61: end 62: end
Sets the destination where files will be copied to. At the same time an archive directory is configured. This is simply the destination directory with a ’.archive’ extension.
# File lib/bones/app/file_manager.rb, line 27 27: def destination=( str ) 28: @destination = str 29: @archive = str + '.archive' if str 30: end
# File lib/bones/app/file_manager.rb, line 66 66: def finalize( name ) 67: name = name.to_s 68: return if name.empty? 69: 70: self.destination = _rename(destination, name) 71: _erb(name) 72: 73: self 74: end
If the source is a repository this method returns the type of repository. This will be :git for Git repositories and :svn for Subversion repositories. Otherwise, nil is returned.
# File lib/bones/app/file_manager.rb, line 36 36: def repository 37: return :git if source =~ /\.git\/?$/ 38: return :svn if source =~ /^(svn(\+ssh)?|https?|file):\/\// 39: nil 40: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.