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, force: false) ⇒ Object
rename all files.
-
.files(recurse) ⇒ Object
return a list of files to examine.
-
.finish(transfer, force: false) ⇒ Object
finish up execution, highest level wrapper.
-
.parse(args) ⇒ Object
return appropriate args, repairing if undefined.
-
.rename(old, new, force) ⇒ Object
try to rename a given file.
-
.rename_base(file) ⇒ Object
apply a transformation to a file's basename only, preserving its directory.
-
.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
72 73 74 75 |
# File 'lib/modname/modder.rb', line 72 def confirm? print 'Are these changes ok? [yN] ' $stdin.gets.chomp.downcase[0] == 'y' end |
.execute(transfer, force: false) ⇒ Object
rename all files
109 110 111 |
# File 'lib/modname/modder.rb', line 109 def execute(transfer, force: false) transfer.each { |o, n| Modder.rename o, n, force } end |
.files(recurse) ⇒ Object
return a list of files to examine
78 79 80 81 82 83 84 |
# File 'lib/modname/modder.rb', line 78 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: false) ⇒ Object
finish up execution, highest level wrapper
114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/modname/modder.rb', line 114 def finish(transfer, force: false) # print changes, return if none Modder.status transfer return if transfer.empty? if force || Modder.confirm? Modder.execute transfer, force: force puts 'Modifications complete.' else puts 'No modifications done.' end end |
.parse(args) ⇒ Object
return appropriate args, repairing if undefined
63 64 65 66 67 68 69 |
# File 'lib/modname/modder.rb', line 63 def parse(args) match = args.shift trans = args.shift match = '' if match.nil? trans = '' if trans.nil? [match, trans] end |
.rename(old, new, force) ⇒ Object
try to rename a given file
128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/modname/modder.rb', line 128 def rename(old, new, force) exist = "#{'Error:'.red} target file |#{new.green}| already exists" # only overwrite when forced raise(exist) if (!force) && File.exist?(new) File.rename(old, new) rescue StandardError => e puts "#{'Error:'.red} could not move |#{old.red}| to |#{new.green}|" puts e. end |
.rename_base(file) ⇒ Object
apply a transformation to a file's basename only, preserving its directory. the block receives the basename and returns a new basename; returning it unchanged means no rename should happen, in which case nil is returned
89 90 91 92 93 94 95 96 |
# File 'lib/modname/modder.rb', line 89 def rename_base(file) dir, base = File.split(file) new_base = yield base return nil if new_base == base dir == '.' ? new_base : File.join(dir, new_base) end |
.status(transfer) ⇒ Object
show the status of current files
99 100 101 102 103 104 105 106 |
# File 'lib/modname/modder.rb', line 99 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
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/modname/modder.rb', line 141 def undercase_ext_get(ext, recurse) transfer = {} allexts = ext.empty? Modder.files(recurse).each do |file| new = Modder.rename_base(file) do |base| cur_ext = allexts ? base.split('.').last : ext next base if cur_ext == base # no extension to change base.sub(/#{cur_ext}$/i, cur_ext.downcase) end next if new.nil? 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
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/modname/modder.rb', line 164 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
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/modname/modder.rb', line 31 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(@options[:recurse]).each do |file| new = Modder.rename_base(file) { |base| base.sub(/#{match}$/, trans) } next if new.nil? @transfer[file] = new end Modder.finish @transfer, force: @options[:force] end end |
#regex(args = []) ⇒ Object
rename files based on regular expressions
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/modname/modder.rb', line 13 def regex(args = []) match, trans = Modder.parse args Modder.files(@options[:recurse]).each do |file| new = Modder.rename_base(file) do |base| result = base.sub Regexp.new(match), trans result.empty? ? base : result # no changes end next if new.nil? @transfer[file] = new end Modder.finish @transfer, force: @options[:force] end |
#undercase_ext(ext = '') ⇒ Object
top level wrapper for exts
54 55 56 57 |
# File 'lib/modname/modder.rb', line 54 def undercase_ext(ext = '') transfer = Modder.undercase_ext_get ext, @options[:recurse] Modder.undercase_ext_set ext, transfer, @options[:force] end |