fixnames 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.rspec +2 -0
- data/COPYING +18 -0
- data/LICENSE.txt +20 -0
- data/README.md +28 -0
- data/README.rdoc +17 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/bin/fixdirs +148 -0
- data/bin/fixnames +148 -0
- data/fixnames.gemspec +92 -0
- data/lib/fixnames.rb +12 -0
- data/lib/fixnames/debug.rb +43 -0
- data/lib/fixnames/engine.rb +86 -0
- data/lib/fixnames/engine/scan_dir.rb +34 -0
- data/lib/fixnames/filters.rb +79 -0
- data/lib/fixnames/helpers.rb +41 -0
- data/lib/fixnames/interface.rb +41 -0
- data/lib/fixnames/option.rb +163 -0
- data/lib/fixnames/version.rb +10 -0
- data/spec/fixnames/banners_spec.rb +36 -0
- data/spec/fixnames/brackets_spec.rb +26 -0
- data/spec/fixnames/camelcase_spec.rb +24 -0
- data/spec/fixnames/charstrip_spec.rb +20 -0
- data/spec/fixnames/checksums_spec.rb +29 -0
- data/spec/fixnames/fixdots_spec.rb +35 -0
- data/spec/fixnames/hack_and_spec.rb +24 -0
- data/spec/fixnames/lowercase_spec.rb +28 -0
- data/spec/fixnames/semicolon_spec.rb +24 -0
- data/spec/fixnames/whitespace_spec.rb +65 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/support/should_fix_helpers.rb +19 -0
- data/test/helper.rb +34 -0
- data/test/test_charstrip.rb +35 -0
- data/test/test_hack_and.rb +17 -0
- data/test/test_lowercase.rb +20 -0
- data/test/test_semicolon.rb +18 -0
- data/test/test_whitespace.rb +110 -0
- metadata +145 -0
data/fixnames.gemspec
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{fixnames}
|
8
|
+
s.version = "0.3.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = [%q{Brent Sanders}]
|
12
|
+
s.date = %q{2011-10-04}
|
13
|
+
s.description = %q{Cleans up filenames so they can easily be used
|
14
|
+
in scripts, without annoyances such as spaces or other bad characters}
|
15
|
+
s.email = %q{git@thoughtnoise.net}
|
16
|
+
s.executables = [%q{fixnames}, %q{fixdirs}]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE.txt",
|
19
|
+
"README.md",
|
20
|
+
"README.rdoc"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".document",
|
24
|
+
".rspec",
|
25
|
+
"COPYING",
|
26
|
+
"LICENSE.txt",
|
27
|
+
"README.md",
|
28
|
+
"README.rdoc",
|
29
|
+
"Rakefile",
|
30
|
+
"VERSION",
|
31
|
+
"bin/fixdirs",
|
32
|
+
"bin/fixnames",
|
33
|
+
"fixnames.gemspec",
|
34
|
+
"lib/fixnames.rb",
|
35
|
+
"lib/fixnames/debug.rb",
|
36
|
+
"lib/fixnames/engine.rb",
|
37
|
+
"lib/fixnames/engine/scan_dir.rb",
|
38
|
+
"lib/fixnames/filters.rb",
|
39
|
+
"lib/fixnames/helpers.rb",
|
40
|
+
"lib/fixnames/interface.rb",
|
41
|
+
"lib/fixnames/option.rb",
|
42
|
+
"lib/fixnames/version.rb",
|
43
|
+
"spec/fixnames/banners_spec.rb",
|
44
|
+
"spec/fixnames/brackets_spec.rb",
|
45
|
+
"spec/fixnames/camelcase_spec.rb",
|
46
|
+
"spec/fixnames/charstrip_spec.rb",
|
47
|
+
"spec/fixnames/checksums_spec.rb",
|
48
|
+
"spec/fixnames/fixdots_spec.rb",
|
49
|
+
"spec/fixnames/hack_and_spec.rb",
|
50
|
+
"spec/fixnames/lowercase_spec.rb",
|
51
|
+
"spec/fixnames/semicolon_spec.rb",
|
52
|
+
"spec/fixnames/whitespace_spec.rb",
|
53
|
+
"spec/spec_helper.rb",
|
54
|
+
"spec/support/should_fix_helpers.rb",
|
55
|
+
"test/helper.rb",
|
56
|
+
"test/test_charstrip.rb",
|
57
|
+
"test/test_hack_and.rb",
|
58
|
+
"test/test_lowercase.rb",
|
59
|
+
"test/test_semicolon.rb",
|
60
|
+
"test/test_whitespace.rb"
|
61
|
+
]
|
62
|
+
s.homepage = %q{http://github.com/pdkl95/fixnames}
|
63
|
+
s.licenses = [%q{MIT}]
|
64
|
+
s.require_paths = [%q{lib}]
|
65
|
+
s.rubygems_version = %q{1.8.5}
|
66
|
+
s.summary = %q{Filename cleanup for script compatability}
|
67
|
+
|
68
|
+
if s.respond_to? :specification_version then
|
69
|
+
s.specification_version = 3
|
70
|
+
|
71
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
72
|
+
s.add_runtime_dependency(%q<term-ansicolor>, [">= 1.0.6"])
|
73
|
+
s.add_development_dependency(%q<yard>, [">= 0.6.0"])
|
74
|
+
s.add_development_dependency(%q<rspec>, [">= 2.3.0"])
|
75
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
|
76
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
77
|
+
else
|
78
|
+
s.add_dependency(%q<term-ansicolor>, [">= 1.0.6"])
|
79
|
+
s.add_dependency(%q<yard>, [">= 0.6.0"])
|
80
|
+
s.add_dependency(%q<rspec>, [">= 2.3.0"])
|
81
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
82
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
83
|
+
end
|
84
|
+
else
|
85
|
+
s.add_dependency(%q<term-ansicolor>, [">= 1.0.6"])
|
86
|
+
s.add_dependency(%q<yard>, [">= 0.6.0"])
|
87
|
+
s.add_dependency(%q<rspec>, [">= 2.3.0"])
|
88
|
+
s.add_dependency(%q<jeweler>, [">= 1.6.4"])
|
89
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
data/lib/fixnames.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'term/ansicolor'
|
2
|
+
|
3
|
+
module Fixnames
|
4
|
+
module Debug
|
5
|
+
class Color
|
6
|
+
extend Term::ANSIColor
|
7
|
+
|
8
|
+
def self.prefix(chr, cname)
|
9
|
+
#raise "#{cname.inspect}, #{send(cname).inspect}"
|
10
|
+
[Color.send(cname), Color.bold, "#{chr}#{chr}>", Color.clear].join
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.puts_msg(str, chr, cname)
|
14
|
+
puts "#{prefix(chr, cname)} #{str}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def bold(str)
|
19
|
+
[ Color.bold,
|
20
|
+
Color.yellow,
|
21
|
+
Color.on_blue,
|
22
|
+
str,
|
23
|
+
Color.clear
|
24
|
+
].join
|
25
|
+
end
|
26
|
+
|
27
|
+
def warn(msg)
|
28
|
+
Color.puts_msg(msg, '*', :red) if @option.verbose > 0
|
29
|
+
end
|
30
|
+
|
31
|
+
def note(msg)
|
32
|
+
Color.puts_msg(msg, '!', :yellow) if @option.verbose > 0
|
33
|
+
end
|
34
|
+
|
35
|
+
def info(msg)
|
36
|
+
Color.puts_msg(msg, '-', :green) if @option.verbose > 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def debug(msg)
|
40
|
+
Color.puts_msg(msg, '>', :cyan) if @option.verbose > 2
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'fixnames/debug'
|
2
|
+
require 'fixnames/helpers'
|
3
|
+
require 'fixnames/filters'
|
4
|
+
require 'fixnames/engine/scan_dir'
|
5
|
+
|
6
|
+
module Fixnames
|
7
|
+
# the main filtering-engine that fixes
|
8
|
+
# a single filename
|
9
|
+
class Engine
|
10
|
+
include Debug
|
11
|
+
include Helpers
|
12
|
+
include Filters
|
13
|
+
|
14
|
+
attr_reader :orig, :fixed, :dir, :option
|
15
|
+
alias_method :to_s, :fixed
|
16
|
+
|
17
|
+
# Creates an engine to fix a single filename.
|
18
|
+
#
|
19
|
+
# @param name [String] The filename to be fixed
|
20
|
+
# @param options [{Symbol => Object}] An options hash
|
21
|
+
def initialize(name, opts=Option.new)
|
22
|
+
@option = opts
|
23
|
+
|
24
|
+
@dir = File.dirname(name)
|
25
|
+
@orig = File.basename(name)
|
26
|
+
|
27
|
+
if option.recursive && File.directory?(@orig)
|
28
|
+
@scandir = ScanDir.new(@orig, option)
|
29
|
+
end
|
30
|
+
|
31
|
+
@fixed = @orig.dup
|
32
|
+
|
33
|
+
option.filter_order.each do |optname|
|
34
|
+
if option.send(optname) and respond_to?(optname)
|
35
|
+
debug "FILTER[:#{optname}]"
|
36
|
+
old = fixed.dup
|
37
|
+
case method(optname).arity
|
38
|
+
when 1 then send optname, option.send(optname)
|
39
|
+
when 0 then send optname
|
40
|
+
else raise "Unsupported arity in ##{optname}"
|
41
|
+
end
|
42
|
+
if old != fixed
|
43
|
+
debug "\t old -- #{old.inspect}"
|
44
|
+
debug "\t new -- #{fixed.inspect}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def orig_path
|
51
|
+
"#{dir}/#{orig}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def fixed_path
|
55
|
+
"#{dir}/#{fixed}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def scandir_changed?
|
59
|
+
@scandir ? @scandir.changed? : false
|
60
|
+
end
|
61
|
+
|
62
|
+
def changed?
|
63
|
+
fixed != orig
|
64
|
+
end
|
65
|
+
|
66
|
+
def collision?
|
67
|
+
File.exists? fixed_path
|
68
|
+
end
|
69
|
+
|
70
|
+
def fix!
|
71
|
+
@scandir.fix! if @scandir
|
72
|
+
|
73
|
+
if changed?
|
74
|
+
if collision?
|
75
|
+
warn "NAME COLLISION: #{fixed_path.inspect}"
|
76
|
+
else
|
77
|
+
note "mv #{orig_path.inspect} #{fixed_path.inspect}"
|
78
|
+
File.rename orig_path, fixed_path unless option.pretend
|
79
|
+
end
|
80
|
+
else
|
81
|
+
info "no change: #{orig_path.inspect}"
|
82
|
+
end
|
83
|
+
self
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Fixnames
|
2
|
+
class Engine
|
3
|
+
class ScanDir
|
4
|
+
attr_reader :option, :name, :base, :prefix
|
5
|
+
def initialize(dirname, opts)
|
6
|
+
raise "Not a directory: #{dirname}" unless File.directory?(dirname)
|
7
|
+
@name = File.realpath(dirname)
|
8
|
+
raise "Not a directory: #{name}" unless File.directory?(name)
|
9
|
+
|
10
|
+
@option = opts
|
11
|
+
end
|
12
|
+
|
13
|
+
def glob_str
|
14
|
+
"#{name}/#{option.dir_glob}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def files
|
18
|
+
@files ||= Dir.glob(glob_str)
|
19
|
+
end
|
20
|
+
|
21
|
+
def engines
|
22
|
+
@engies ||= files.map do |name|
|
23
|
+
Engine.new(name, option)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def fix!
|
28
|
+
engines.map do |en|
|
29
|
+
en.fix!
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Fixnames
|
2
|
+
module Filters
|
3
|
+
def expunge(re)
|
4
|
+
replace re, option.mendstr
|
5
|
+
end
|
6
|
+
|
7
|
+
def hack_and
|
8
|
+
replace '&', '_and_'
|
9
|
+
end
|
10
|
+
|
11
|
+
def semicolon
|
12
|
+
translate ';', '-'
|
13
|
+
fixed.squeeze! '-'
|
14
|
+
end
|
15
|
+
|
16
|
+
def banners
|
17
|
+
option.banner_types.each do |x|
|
18
|
+
remove_bracket_ranges(x)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def brackets
|
23
|
+
remove wrap_brackets('.+?')
|
24
|
+
end
|
25
|
+
|
26
|
+
def checksums
|
27
|
+
remove wrap_brackets('[0-9a-fA-F]{8}')
|
28
|
+
end
|
29
|
+
|
30
|
+
def lowercase
|
31
|
+
translate 'A-Z', 'a-z'
|
32
|
+
end
|
33
|
+
|
34
|
+
def fix_dots
|
35
|
+
last = fixed.rindex('.')
|
36
|
+
translate '.', '_'
|
37
|
+
replace '(.*)\.(.*\.)', '\1_\2'
|
38
|
+
fixed[last] = '.' if last
|
39
|
+
end
|
40
|
+
|
41
|
+
def fix_dashes
|
42
|
+
fixed.squeeze! '-'
|
43
|
+
remove '^-' while fixed =~ /^-/
|
44
|
+
remove '-$' while fixed =~ /-$/
|
45
|
+
end
|
46
|
+
|
47
|
+
def camelcase
|
48
|
+
replace '([a-z])([A-Z])', '\1_\2'
|
49
|
+
fixed.downcase!
|
50
|
+
end
|
51
|
+
|
52
|
+
def junkwords(wordlist)
|
53
|
+
wordlist.each do |word|
|
54
|
+
replace "[_-]#{word}[_-]", '_'
|
55
|
+
remove "[_-]#{word}$"
|
56
|
+
remove "^#{word}[_-]"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def whitespace(chrlist)
|
61
|
+
replace "[#{Regexp.escape chrlist}]", '_'
|
62
|
+
replace '[_-]\.', '.' while fixed =~ /[_-]\./
|
63
|
+
replace '_-', '-' while fixed =~ /_-/
|
64
|
+
replace '-_', '-' while fixed =~ /-_/
|
65
|
+
remove '^_' while fixed =~ /^_/
|
66
|
+
remove '_$' while fixed =~ /_$/
|
67
|
+
fixed.squeeze! '_'
|
68
|
+
end
|
69
|
+
|
70
|
+
def charstrip(chrlist)
|
71
|
+
re = Regexp.escape( if option.charstrip_allow_brackets
|
72
|
+
remove_bracket_characters_from(chrlist)
|
73
|
+
else
|
74
|
+
chrlist
|
75
|
+
end )
|
76
|
+
remove "[#{re}]"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Fixnames
|
2
|
+
module Helpers
|
3
|
+
def replace(re, replacement)
|
4
|
+
re_str = bold "/#{re}/"
|
5
|
+
replacement_str = bold "\"#{replacement}\""
|
6
|
+
debug "\t<replace> #{re_str} -> #{replacement_str}"
|
7
|
+
fixed.gsub! Regexp.new(re), replacement
|
8
|
+
end
|
9
|
+
|
10
|
+
def remove(re)
|
11
|
+
re_str = bold "/#{re}/"
|
12
|
+
debug "\t<expunge> #{re_str}"
|
13
|
+
fixed.gsub! Regexp.new(re), ''
|
14
|
+
end
|
15
|
+
|
16
|
+
def translate(src, dst)
|
17
|
+
debug "\t<translate> #{bold src.inspect} -> #{bold dst.inspect}"
|
18
|
+
fixed.tr! src, dst
|
19
|
+
end
|
20
|
+
|
21
|
+
def match_bracket_open
|
22
|
+
"[#{Regexp.escape(option.bracket_characters_open)}]"
|
23
|
+
end
|
24
|
+
|
25
|
+
def match_bracket_close
|
26
|
+
"[#{Regexp.escape(option.bracket_characters_close)}]"
|
27
|
+
end
|
28
|
+
|
29
|
+
def wrap_brackets(re)
|
30
|
+
"#{match_bracket_open}#{re}#{match_bracket_close}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def remove_bracket_ranges(re)
|
34
|
+
remove wrap_brackets(".*?#{re}.*?")
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_bracket_characters_from(str)
|
38
|
+
str.gsub /(#{match_bracket_open}|#{match_bracket_close})/, ''
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'fixnames/engine'
|
2
|
+
|
3
|
+
module Fixnames
|
4
|
+
module FixFile
|
5
|
+
def self.parse(name, opts)
|
6
|
+
Engine.new(name, opts)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns the fixed version of a filename, without
|
10
|
+
# actually changing anything on the filesystem.
|
11
|
+
def self.fix_name(*args)
|
12
|
+
parse(*args).fixed
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.fix!(*args)
|
16
|
+
parse(*args).fix!
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.fix_list!(list, *args)
|
20
|
+
list.map do |x|
|
21
|
+
fix! x, *args
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module FixDir
|
27
|
+
def self.parse(name, optsw)
|
28
|
+
Engine::ScanDir.new(name, opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.fix!(*args)
|
32
|
+
parse(*args).fix!
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.fix_list!(list, *args)
|
36
|
+
list.map do |x|
|
37
|
+
fix! x, *args
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
module Fixnames
|
2
|
+
class Option
|
3
|
+
# filters that MUST run early
|
4
|
+
SETUP_FILTERS = [ :expunge ]
|
5
|
+
|
6
|
+
# filters that only accept a simple boolean on/off
|
7
|
+
FLAG_FILTERS = [ :hack_and, :checksums, :banners,
|
8
|
+
:brackets, :semicolon,
|
9
|
+
:camelcase, :lowercase,
|
10
|
+
:fix_dots, :fix_dashes ]
|
11
|
+
|
12
|
+
# filters that accept character ranges
|
13
|
+
CHAR_FILTERS = [ :junkwords, :charstrip, :whitespace]
|
14
|
+
|
15
|
+
# standard order to apply the filters
|
16
|
+
DEFAULT_FILTER_ORDER = [ SETUP_FILTERS,
|
17
|
+
FLAG_FILTERS,
|
18
|
+
CHAR_FILTERS
|
19
|
+
].flatten
|
20
|
+
|
21
|
+
DEFAULT_DIR_GLOB = '*'
|
22
|
+
DEFAULT_MENDSTR = ''
|
23
|
+
DEFAULT_WHITESPACE = " \t_"
|
24
|
+
DEFAULT_BRACKET_CHARACTERS_OPEN = '[({<'
|
25
|
+
DEFAULT_BRACKET_CHARACTERS_CLOSE = '])}>'
|
26
|
+
DEFAULT_CHARSTRIP = "[]{}'\",()+!~@#/\\"
|
27
|
+
DEFAULT_JUNKWORDS = [ 'x264', 'hdtv', '2hd', '720p', 'dvdrip']
|
28
|
+
DEFAULT_BANNER_TYPES = [ 'xxx', 'dvdrip', 'dual_audio',
|
29
|
+
'xvid', 'h264', 'divx' ]
|
30
|
+
|
31
|
+
# Creates an option
|
32
|
+
#
|
33
|
+
# @param [String] name the name of the option to create
|
34
|
+
# @param [Array] types a list of classes that are valid
|
35
|
+
# @param [Object] default_val the value to set initially
|
36
|
+
def self.mkopt(name, types, default_val)
|
37
|
+
types = [types] unless types.is_a?(Array)
|
38
|
+
var = "@#{name}"
|
39
|
+
|
40
|
+
define_method "valid_for_#{name}?" do |value|
|
41
|
+
types.map do |type|
|
42
|
+
value.is_a?(type)
|
43
|
+
end.reduce(false) do |t,x|
|
44
|
+
t || x
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
define_method name do |*args|
|
49
|
+
unless instance_variable_defined?(var)
|
50
|
+
instance_variable_set(var, default_val)
|
51
|
+
end
|
52
|
+
if args.length == 1
|
53
|
+
unless send("valid_for_#{name}?", args[0])
|
54
|
+
raise "bad type for option"
|
55
|
+
end
|
56
|
+
instance_variable_set(var, args[0])
|
57
|
+
end
|
58
|
+
instance_variable_get(var)
|
59
|
+
end
|
60
|
+
|
61
|
+
define_method "#{name}=" do |value|
|
62
|
+
unless send("valid_for_#{name}?", value)
|
63
|
+
raise "bad type for option"
|
64
|
+
end
|
65
|
+
instance_variable_set(var, value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# set to turn of the ANSI-color output
|
70
|
+
# @macro [attach] mkopt
|
71
|
+
# default: `$3`
|
72
|
+
#
|
73
|
+
# @overload $1()
|
74
|
+
# @overload $1(new_value)
|
75
|
+
# @overload $1=(new_value)
|
76
|
+
# @param [$2] new_value
|
77
|
+
# @return [$2]
|
78
|
+
mkopt :nocolor, [TrueClass, FalseClass], false
|
79
|
+
|
80
|
+
# Verbosity levels
|
81
|
+
#
|
82
|
+
# * `verbose=0` ; no output
|
83
|
+
# * `verbose=1` ; only names that change are output
|
84
|
+
# * `verbose=2` ; all names are output with their change-status
|
85
|
+
# * `verbose=3` ; all *filters* are output as they run for debugging. Very noisy.
|
86
|
+
mkopt :verbose, Integer, 0
|
87
|
+
|
88
|
+
# When {#recursive} is set, use this pattern to glob each
|
89
|
+
# directory for files.
|
90
|
+
mkopt :dir_glob, String, DEFAULT_DIR_GLOB
|
91
|
+
|
92
|
+
# Recursively descend into directories if true.
|
93
|
+
mkopt :recursive, [TrueClass, FalseClass], false
|
94
|
+
|
95
|
+
# A generic pattern to remove from all filenames.
|
96
|
+
# @note Enables {Fixnames::Filters#expunge}
|
97
|
+
mkopt :expunge, String, nil
|
98
|
+
|
99
|
+
# After we {#expunge} a pattern, it is replaced with this string.
|
100
|
+
mkopt :mendstr, String, DEFAULT_MENDSTR
|
101
|
+
|
102
|
+
# @note Enables {Fixnames::Filters#hack_and}
|
103
|
+
mkopt :hack_and, [TrueClass, FalseClass], false
|
104
|
+
|
105
|
+
# @note Enables {Fixnames::Filters#checksums}
|
106
|
+
mkopt :checksums, [TrueClass, FalseClass], false
|
107
|
+
|
108
|
+
# @note Enables {Fixnames::Filters#banners}
|
109
|
+
mkopt :banners, [TrueClass, FalseClass], false
|
110
|
+
|
111
|
+
# @note Enables {Fixnames::Filters#brackets}
|
112
|
+
mkopt :brackets, [TrueClass, FalseClass], false
|
113
|
+
|
114
|
+
# @note Enables {Fixnames::Filters#semicolon}
|
115
|
+
mkopt :semicolon, [TrueClass, FalseClass], false
|
116
|
+
|
117
|
+
# @note Enables {Fixnames::Filters#fix_dots}
|
118
|
+
mkopt :fix_dots, [TrueClass, FalseClass], false
|
119
|
+
|
120
|
+
# @note Enables {Fixnames::Filters#fix_dashes}
|
121
|
+
mkopt :fix_dashes, [TrueClass, FalseClass], false
|
122
|
+
|
123
|
+
# @note Enables {Fixnames::Filters#camelcase}
|
124
|
+
mkopt :camelcase, [TrueClass, FalseClass], false
|
125
|
+
|
126
|
+
# @note Enables {Fixnames::Filters#lowercase}
|
127
|
+
mkopt :lowercase, [TrueClass, FalseClass], false
|
128
|
+
|
129
|
+
# @note Enables {Fixnames::Filters#junkwords} if non-nil
|
130
|
+
mkopt :junkwords, Array, DEFAULT_JUNKWORDS
|
131
|
+
|
132
|
+
# @note Enables {Fixnames::Filters#charstrip} if non-nil
|
133
|
+
mkopt :charstrip, String, DEFAULT_CHARSTRIP
|
134
|
+
|
135
|
+
# @note Enables {Fixnames::Filters#whitespace} if non-nil
|
136
|
+
mkopt :whitespace, String, DEFAULT_WHITESPACE
|
137
|
+
|
138
|
+
# The list of strings to find for removal in {Fixnames::Filters#banners}
|
139
|
+
mkopt :banner_types, Array, DEFAULT_BANNER_TYPES
|
140
|
+
|
141
|
+
# Set to true to have {Fixnames::Filters#charstrip} ignore its
|
142
|
+
# default behavior and allow the brackets through. This is
|
143
|
+
# potentially ignored if you change {#charstrip}.
|
144
|
+
mkopt :charstrip_allow_brackets, [TrueClass, FalseClass], false
|
145
|
+
|
146
|
+
# What is considered an *open* bracket in things
|
147
|
+
# like {#checksums} or {#brackets}
|
148
|
+
mkopt :bracket_characters_open, String, DEFAULT_BRACKET_CHARACTERS_OPEN
|
149
|
+
|
150
|
+
# What is considered a *close* bracket in things
|
151
|
+
# like {#checksums} or {#brackets}
|
152
|
+
mkopt :bracket_characters_close, String, DEFAULT_BRACKET_CHARACTERS_CLOSE
|
153
|
+
|
154
|
+
# The order we should apply the filter to the filename.
|
155
|
+
# This order is significant, and can dramatically affect
|
156
|
+
# the output.
|
157
|
+
mkopt :filter_order, Array, DEFAULT_FILTER_ORDER
|
158
|
+
|
159
|
+
# if set, we just pretend to work, and skip the final
|
160
|
+
# move command, so the filesystem is never altered
|
161
|
+
mkopt :pretend, [TrueClass, FalseClass], false
|
162
|
+
end
|
163
|
+
end
|