Module: Modder
- Included in:
- Modname::Driver
- Defined in:
- lib/modname/modder.rb
Overview
extensions
Class Method Summary collapse
-
.confirm? ⇒ Boolean
double check transformations.
-
.execute(transfer) ⇒ Object
rename all files.
-
.files(recurse) ⇒ Object
return a list of files to examine.
-
.finish(transfer, force) ⇒ Object
finish up execution, highest level wrapper.
-
.parse(args) ⇒ Object
return appropriate args, repairing if undefined.
-
.rename(o, n) ⇒ Object
try to rename a given file.
-
.status(transfer) ⇒ Object
show the status of current files.
-
.undercase_ext_get(ext, recurse) ⇒ Object
get all extensions to change.
-
.undercase_ext_set(ext, transfer, force) ⇒ Object
set all extensions to change this involves moving it to a tmp file first, since most file systems are not case sensitive and therefore wont distiniguish between HI and hi.
Instance Method Summary collapse
-
#exts(args = []) ⇒ Object
change one file extension to another’s type.
-
#regex(args = []) ⇒ Object
rename files based on regular expressions.
-
#undercase_ext(ext = "") ⇒ Object
top level wrapper for exts.
Class Method Details
.confirm? ⇒ Boolean
double check transformations
73 74 75 76 |
# File 'lib/modname/modder.rb', line 73 def confirm? print "Are these changes ok? [yN] " ($stdin.gets.chomp!).downcase[0] == "y" end |
.execute(transfer) ⇒ Object
rename all files
99 100 101 |
# File 'lib/modname/modder.rb', line 99 def execute(transfer) transfer.each { |o, n| Modder.rename o, n } end |
.files(recurse) ⇒ Object
return a list of files to examine
79 80 81 82 83 84 85 |
# File 'lib/modname/modder.rb', line 79 def files(recurse) if recurse Dir['**/*'].select { |f| File.file?(f) } else Dir.entries(Dir.pwd).select { |f| File.file? f } end end |
.finish(transfer, force) ⇒ Object
finish up execution, highest level wrapper
105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/modname/modder.rb', line 105 def finish(transfer, force) # print changes, return if none Modder.status transfer return if transfer.empty? if force || Modder.confirm? Modder.execute transfer puts "Modifications complete." else puts "No modifications done." end end |
.parse(args) ⇒ Object
return appropriate args, repairing if undefined
64 65 66 67 68 69 70 |
# File 'lib/modname/modder.rb', line 64 def parse(args) match = args.shift trans = args.shift match = "" if match.nil? trans = "" if trans.nil? return match, trans end |
.rename(o, n) ⇒ Object
try to rename a given file
120 121 122 123 124 125 126 127 128 129 |
# File 'lib/modname/modder.rb', line 120 def rename(o, n) begin exist = "#{'Error:'.red} target file |#{n.green}| already exists" (File.exist? n) ? raise(exist) : File.rename(o, n) rescue => e puts "#{'Error:'.red} could not move |#{o.red}| to |#{n.green}|" puts e. end end |
.status(transfer) ⇒ Object
show the status of current files
89 90 91 92 93 94 95 96 |
# File 'lib/modname/modder.rb', line 89 def status(transfer) if transfer.empty? puts "No matches found.".yellow else puts "Planned file actions:".green transfer.each { |o, n| puts "\t#{o} -> #{n.green}" } end end |
.undercase_ext_get(ext, recurse) ⇒ Object
get all extensions to change
133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/modname/modder.rb', line 133 def undercase_ext_get(ext, recurse) transfer = Hash.new allexts = ext.empty? Modder.files(recurse).each do |file| ext = file.split(".").last if allexts new = file.sub /#{ext}$/i, ext.downcase next if new == file || ext == file # no changes or extension transfer[file] = new end transfer end |
.undercase_ext_set(ext, transfer, force) ⇒ Object
set all extensions to change this involves moving it to a tmp file first, since most file systems are not case sensitive and therefore wont distiniguish between HI and hi. to get around this, we can set HI to HI.hash, then set HI.hash to hi
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/modname/modder.rb', line 152 def undercase_ext_set(ext, transfer, force) puts "Lowering extension: ".green + (ext.empty?? "*" : ext) Modder.status transfer return if transfer.empty? # confirm current changes if force || Modder.confirm? final = {} temp = {} # create hash temp map transfer.each do |k, v| tempfile = (v.hash * v.object_id).abs.to_s final[tempfile] = v temp[k] = tempfile end Modder.execute temp Modder.execute final puts "Modifications complete." else puts "No modifications done." end end |
Instance Method Details
#exts(args = []) ⇒ Object
change one file extension to another’s type
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/modname/modder.rb', line 30 def exts(args = []) match, trans = Modder.parse args if match.empty? && trans.empty? # do all undercase_ext elsif trans.empty? # undercase one ext undercase_ext match else # move match extension to targeted Modder.files([:recurse]).each do |file| new = file.sub /#{match}$/, trans next if new == file # no changes @transfer[file] = new end Modder.finish @transfer, [:force] end end |
#regex(args = []) ⇒ Object
rename files based on regular expressions
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/modname/modder.rb', line 14 def regex(args = []) match, trans = Modder.parse args Modder.files([:recurse]).each do |file| new = file.sub Regexp.new(match), trans next if (new == file || new == "") # no changes @transfer[file] = new end Modder.finish @transfer, [:force] end |
#undercase_ext(ext = "") ⇒ Object
top level wrapper for exts
53 54 55 56 |
# File 'lib/modname/modder.rb', line 53 def undercase_ext(ext = "") transfer = Modder.undercase_ext_get ext, [:recurse] Modder.undercase_ext_set ext, transfer, [:force] end |