Class: Renamr::Renamer
- Inherits:
-
Object
- Object
- Renamr::Renamer
- Defined in:
- lib/renamr/renamer.rb
Overview
Renames file by certain rules.
Instance Method Summary collapse
- #do ⇒ Object
-
#do_dir(dir) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity.
-
#initialize ⇒ Renamer
constructor
A new instance of Renamer.
-
#move(dir, dat) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize.
- #unique(dat, nme) ⇒ Object
Constructor Details
#initialize ⇒ Renamer
Returns a new instance of Renamer.
14 15 16 17 |
# File 'lib/renamr/renamer.rb', line 14 def initialize @cfg = Configurator.new @fac = ActionsFactory.new(@cfg) end |
Instance Method Details
#do ⇒ Object
69 70 71 72 73 |
# File 'lib/renamr/renamer.rb', line 69 def do Reporter.init(@cfg.act?, @cfg.wid) do_dir(@cfg.dir) Reporter.final end |
#do_dir(dir) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/renamr/renamer.rb', line 50 def do_dir(dir) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity raise "No such directory: #{dir}." unless File.directory?(dir) dat = [] act = @fac.produce(dir) # Doesn't include hidden files. Dir.entries(dir).reject { |f| f.start_with?('.') }.sort.each do |nme| src = File.join(dir, nme) do_dir(src) if @cfg.rec? && File.directory?(src) act.each { |a| a.set(nme) } act.each { |a| break if (nme = a.do(nme)).nil? } # rubocop:disable Style/CombinableLoops next if nme.nil? nme = unique(dat, nme) dat << [src, File.join(dir, nme)] end move(dir, dat) if dat.any? end |
#move(dir, dat) ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/renamr/renamer.rb', line 19 def move(dir, dat) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize rep = Reporter.new(File.(dir)) dat.each do |src, dst| if src == dst rep.add(File.basename(src), '') next end begin File.rename(src, dst) if @cfg.act? rep.add(File.basename(src), File.basename(dst)) rescue StandardError => e rep.add(File.basename(src), e) puts e.backtrace.join("\n\t") .sub("\n\t", ": #{e}#{e.class ? " (#{e.class})" : ''}\n\t") end end rep.do end |
#unique(dat, nme) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/renamr/renamer.rb', line 38 def unique(dat, nme) dst = [] dat.each { |_, d| dst << File.basename(d) } return nme unless dst.include?(nme) ext = File.extname(nme) 0.step do |i| # Infinitive loop with index. n = ext.nil? ? "#{nme}-#{i}" : "#{File.basename(nme, ext)}-#{i}#{ext}" return n unless dst.include?(n) end end |