fixnames 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames::Filters do
|
4
|
+
describe "#banners" do
|
5
|
+
context "when TRUE" do
|
6
|
+
before do
|
7
|
+
@testopt.banners = true
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "should remove banner blocks" do
|
11
|
+
subject { 'foobar' }
|
12
|
+
it_should_fix 'foo[xvid]bar', 'foo[divx]bar'
|
13
|
+
it_should_fix 'foo[ xvid ]bar', 'foo[_divx_]bar'
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "should recognize advers with various bracket styles" do
|
17
|
+
subject { 'foobar' }
|
18
|
+
it_should_fix 'foo[xvid]bar', 'foo(xvid)bar'
|
19
|
+
it_should_fix 'foo{xvid}bar', 'foo<xvid>bar'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when FALSE" do
|
24
|
+
before do
|
25
|
+
@testopt.banners = false
|
26
|
+
@testopt.charstrip_allow_brackets = true
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "should ALLOW banner blocks" do
|
30
|
+
it_should_not_change 'abc[XVID]xyz', 'foo[divx]bar'
|
31
|
+
it_should_not_change 'foo[xvid]bar', 'foo(xvid)bar'
|
32
|
+
it_should_not_change 'foo{xvid}bar', 'foo<xvid>bar'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:brackets] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.brackets = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should remove bracket expressions" do
|
10
|
+
subject { 'foobar' }
|
11
|
+
it_should_fix 'foo[x]bar', 'fo(foo)ob<bar>ar'
|
12
|
+
it_should_fix 'foo[ x ]bar', 'fo(-foo-)ob<_bar_>ar'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when option[:brackets] is FALSE" do
|
17
|
+
before do
|
18
|
+
@testopt.brackets = false
|
19
|
+
@testopt.charstrip_allow_brackets = true
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "should replace ALLOW bracket expressions" do
|
23
|
+
it_should_not_change 'foo[x]bar', 'fo(foo)ob<bar>ar'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:camelcase] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.camelcase = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should replace camelCase with underscore_case" do
|
10
|
+
subject { 'foo_bar' }
|
11
|
+
it_should_fix 'fooBar'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when option[:camelcase] is FALSE" do
|
16
|
+
before do
|
17
|
+
@testopt.camelcase = false
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "should allow aA style case patterns" do
|
21
|
+
it_should_not_change 'xYzZy', 'fooBarBaz'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:charstrip] is non-nil" do
|
5
|
+
describe "should allow common filename characters" do
|
6
|
+
it_should_not_change 'abc', 'a_b', 'a-b', 'a.b'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should strip most punctuation" do
|
10
|
+
subject { 'ab' }
|
11
|
+
it_should_fix 'a[b', 'a]b'
|
12
|
+
it_should_fix 'a{b', 'a}b'
|
13
|
+
it_should_fix 'a(b', 'a)b'
|
14
|
+
it_should_fix 'a\'b', 'a"b'
|
15
|
+
it_should_fix 'a,b', 'a+b'
|
16
|
+
it_should_fix 'a!b', 'a~b'
|
17
|
+
it_should_fix 'a#b', 'a@b'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:checksums] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.checksums = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should remove [1A2B3C4D] style checksum markers" do
|
10
|
+
subject { 'foobar' }
|
11
|
+
it_should_fix 'foo[1A2B3C4D]bar', 'foo[1a2b3c4d]bar'
|
12
|
+
it_should_fix 'foo(1A2B3C4D)bar', 'foo(1a2b3c4d)bar'
|
13
|
+
it_should_fix 'foo{1A2B3C4D}bar', 'foo{1a2b3c4d}bar'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when option[:checksums] is FALSE" do
|
18
|
+
before do
|
19
|
+
@testopt.checksums = false
|
20
|
+
@testopt.charstrip_allow_brackets = true
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "should allow checksum markers" do
|
24
|
+
it_should_not_change 'foo[1A2B3C4D]bar', 'foo[1a2b3c4d]bar'
|
25
|
+
it_should_not_change 'foo(1A2B3C4D)bar', 'foo(1a2b3c4d)bar'
|
26
|
+
it_should_not_change 'foo{1A2B3C4D}bar', 'foo{1a2b3c4d}bar'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:fix_dots] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.fix_dots = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should replace early dots with underbars" do
|
10
|
+
subject { 'file_name.txt' }
|
11
|
+
it_should_fix 'file.name.txt'
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "should replace ALL early dots, recursively" do
|
15
|
+
subject { 'it_should_replace_it_even_with_all_these.dots' }
|
16
|
+
it_should_fix 'it.should.replace.it.even.with.all.these.dots'
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "should compress neighboring dots to a single character" do
|
20
|
+
subject { 'file.txt' }
|
21
|
+
it_should_fix 'file..txt', 'file...txt', 'file....txt'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when option[:fix_dots] is FALSE" do
|
26
|
+
before do
|
27
|
+
@testopt.fix_dots = false
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "should allow multiple dots" do
|
31
|
+
it_should_not_change 'file.name.txt'
|
32
|
+
it_should_not_change 'file..txt', 'file...txt', 'file....txt'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:hack_and] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.hack_and = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should replace \"&\" with \"_and_\"" do
|
10
|
+
subject { 'a_and_b' }
|
11
|
+
it_should_fix 'a&b', 'a & b', 'a_&_b', 'a &_b', 'a_& b'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when option[:hack_and] is FALSE" do
|
16
|
+
before do
|
17
|
+
@testopt.hack_and = false
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "should replace ALLOW \"&\"" do
|
21
|
+
it_should_not_change 'a&b'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:lowercase] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.lowercase = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should allow lowercase" do
|
10
|
+
it_should_not_change 'ab_c', 'ab-c', 'ab.c'
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "should fix uppercase" do
|
14
|
+
subject { 'abc' }
|
15
|
+
it_should_fix 'ABC', 'Abc', 'aBc', 'abC'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when option[:lowercase] is FALSE" do
|
20
|
+
before do
|
21
|
+
@testopt.lowercase = false
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "should ALLOW uppercase" do
|
25
|
+
it_should_not_change 'ABC', 'Abc', 'aBc', 'abC'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:semicolon] is TRUE" do
|
5
|
+
before do
|
6
|
+
@testopt.semicolon = true
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should replace semicolons and surrounding whitespace with a single dash" do
|
10
|
+
subject { 'a-b' }
|
11
|
+
it_should_fix 'a;b', 'a; b', 'a ;b', 'a ; b', 'a-; b', 'a ;-b'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when option[:semicolon] is FALSE" do
|
16
|
+
before do
|
17
|
+
@testopt.semicolon = false
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "should ALLOW semicolons" do
|
21
|
+
it_should_not_change 'a;b'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Fixnames do
|
4
|
+
context "when option[:whitespace] is non-nil" do
|
5
|
+
describe "should preserve simple names" do
|
6
|
+
it_should_not_change 'abc', 'a-b', 'a.b'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "should convert all spaces to underscores" do
|
10
|
+
subject { 'ab_c' }
|
11
|
+
it_should_fix 'ab c'
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "should convert all tabs to underscores" do
|
15
|
+
subject { 'ab_c' }
|
16
|
+
it_should_fix "ab\tc"
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "should pass single underscores unchanged" do
|
20
|
+
it_should_not_change 'a_b'
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "should collapse multiple spaces" do
|
24
|
+
subject { 'a_b' }
|
25
|
+
it_should_fix 'a b', 'a b', 'a b'
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "should collapse multiple underscores to a single character" do
|
29
|
+
subject { 'a_b' }
|
30
|
+
it_should_fix 'a__b', 'a___b', 'a____b'
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "should collapse multiple mixed whitespaces characters to a single underscore" do
|
34
|
+
subject { 'a_b' }
|
35
|
+
it_should_fix 'a_ b', 'a _b', 'a _ b', 'a_ _b'
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "should erase trailing whitespace" do
|
39
|
+
subject { 'ab' }
|
40
|
+
it_should_fix 'ab ', 'ab_', 'ab_ ', 'ab _', 'ab__', 'ab '
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "should erase leading whitespace" do
|
44
|
+
subject { 'ab' }
|
45
|
+
it_should_fix ' ab', '_ab', '_ ab', ' _ab', '__ab', ' ab'
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "should pass a single dot unchanged" do
|
49
|
+
it_should_not_change 'abc.d', 'ab_c.d', 'a-bc.d'
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "should remove whitespace preceding a dot" do
|
53
|
+
subject { 'a.b' }
|
54
|
+
it_should_fix 'a .b', 'a_.b', 'a-.b'
|
55
|
+
it_should_fix 'a .b', 'a _.b', 'a_ .b'
|
56
|
+
it_should_fix 'a__.b', 'a _ .b', 'a- _.b'
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "should remove whitespace around a single dash" do
|
60
|
+
subject { 'a-b' }
|
61
|
+
it_should_fix 'a- b', 'a-_b', 'a -b', 'a_-b'
|
62
|
+
it_should_fix 'a_-_b', 'a - b', 'a_- b', 'a -_b'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
+
require 'rspec'
|
7
|
+
require 'fixnames'
|
8
|
+
|
9
|
+
# Requires supporting files with custom matchers and macros, etc,
|
10
|
+
# in ./support/ and its subdirectories.
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.before do
|
15
|
+
@testopt = Fixnames::Option.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
def fixed_for(x)
|
2
|
+
Fixnames::FixFile.fix_name x, @testopt
|
3
|
+
end
|
4
|
+
|
5
|
+
def it_should_not_change(*args)
|
6
|
+
args.each do |x|
|
7
|
+
specify "unchanged: #{x.inspect}" do
|
8
|
+
fixed_for(x).should eq(x)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def it_should_fix(*args)
|
14
|
+
args.each do |x|
|
15
|
+
specify "produces #{subject.call.inspect} when fixing: #{x.inspect}" do
|
16
|
+
fixed_for(x).should eq(subject)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
+
require 'fixnames'
|
7
|
+
|
8
|
+
class Test::Unit::TestCase
|
9
|
+
def fixopt_global
|
10
|
+
{ }
|
11
|
+
# { :verbose => 3 }
|
12
|
+
end
|
13
|
+
|
14
|
+
def obj(str)
|
15
|
+
FixFileNames.new str, FixFileNames::DEFAULT_OPTIONS.merge(fixopt_global).merge(testopt)
|
16
|
+
end
|
17
|
+
|
18
|
+
def fix(str)
|
19
|
+
obj(str).fixed
|
20
|
+
end
|
21
|
+
|
22
|
+
def assert_nofix(str)
|
23
|
+
assert_equal str, fix(str), "Expected NO FIXES to affect the filename."
|
24
|
+
end
|
25
|
+
|
26
|
+
def fixed_is(val=nil)
|
27
|
+
@fixed_is ||= val if val
|
28
|
+
@fixed_is
|
29
|
+
end
|
30
|
+
|
31
|
+
def assert_fix(orig, fixed=fixed_is)
|
32
|
+
assert_equal fixed, fix(orig)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestCharstrip < Test::Unit::TestCase
|
4
|
+
def testopt
|
5
|
+
{ }
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_nospace
|
9
|
+
assert_nofix 'abc'
|
10
|
+
assert_nofix 'a_b'
|
11
|
+
assert_nofix 'a-b'
|
12
|
+
assert_nofix 'a.b'
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_charstrip
|
16
|
+
fixed_is 'ab'
|
17
|
+
|
18
|
+
assert_fix 'a[b'
|
19
|
+
assert_fix 'a]b'
|
20
|
+
assert_fix 'a{b'
|
21
|
+
assert_fix 'a}b'
|
22
|
+
assert_fix 'a(b'
|
23
|
+
assert_fix 'a)b'
|
24
|
+
assert_fix 'a\'b'
|
25
|
+
assert_fix 'a"b'
|
26
|
+
assert_fix 'a,b'
|
27
|
+
assert_fix 'a+b'
|
28
|
+
assert_fix 'a!b'
|
29
|
+
assert_fix 'a~b'
|
30
|
+
assert_fix 'a/b'
|
31
|
+
assert_fix "a\\b"
|
32
|
+
assert_fix 'a#b'
|
33
|
+
assert_fix 'a@b'
|
34
|
+
end
|
35
|
+
end
|