AbsoluteRenamer 0.9.2 → 0.10.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/AbsoluteRenamer.gemspec +13 -2
- data/README.rdoc +16 -17
- data/VERSION +1 -1
- data/bin/absrenamer +9 -2
- data/lib/absolute_renamer/config.rb +5 -1
- data/lib/absolute_renamer/libs/hash.rb +28 -0
- data/lib/absolute_renamer/libs/string.rb +3 -3
- data/lib/absolute_renamer.rb +1 -0
- data/test/hash_test.rb +30 -0
- data/test/imodule_test.rb +45 -0
- data/test/iplugin_test.rb +11 -0
- data/test/parser_test.rb +21 -0
- data/test/string_test.rb +44 -0
- data/test/test_helper.rb +2 -0
- metadata +13 -2
data/AbsoluteRenamer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{AbsoluteRenamer}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.10.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Simon COURTOIS"]
|
12
|
-
s.date = %q{2009-09-
|
12
|
+
s.date = %q{2009-09-29}
|
13
13
|
s.default_executable = %q{absrenamer}
|
14
14
|
s.description = %q{Unlike many batch renaming tools, AbsoluteRenamer is able to rename folders.
|
15
15
|
AbsoluteRenamer is modular and can be extended to adapt itself to any kind of file
|
@@ -45,6 +45,7 @@ Gem::Specification.new do |s|
|
|
45
45
|
"lib/absolute_renamer/iparser.rb",
|
46
46
|
"lib/absolute_renamer/iplugin.rb",
|
47
47
|
"lib/absolute_renamer/libs/file.rb",
|
48
|
+
"lib/absolute_renamer/libs/hash.rb",
|
48
49
|
"lib/absolute_renamer/libs/string.rb",
|
49
50
|
"lib/absolute_renamer/parser.rb",
|
50
51
|
"lib/absolute_renamer/use_config.rb",
|
@@ -53,6 +54,11 @@ Gem::Specification.new do |s|
|
|
53
54
|
"test/config_test.rb",
|
54
55
|
"test/file_info_test.rb",
|
55
56
|
"test/file_test.rb",
|
57
|
+
"test/hash_test.rb",
|
58
|
+
"test/imodule_test.rb",
|
59
|
+
"test/iplugin_test.rb",
|
60
|
+
"test/parser_test.rb",
|
61
|
+
"test/string_test.rb",
|
56
62
|
"test/test_helper.rb"
|
57
63
|
]
|
58
64
|
s.homepage = %q{http://github.com/simonc/AbsoluteRenamer}
|
@@ -65,6 +71,11 @@ Gem::Specification.new do |s|
|
|
65
71
|
"test/config_test.rb",
|
66
72
|
"test/file_info_test.rb",
|
67
73
|
"test/file_test.rb",
|
74
|
+
"test/hash_test.rb",
|
75
|
+
"test/imodule_test.rb",
|
76
|
+
"test/iplugin_test.rb",
|
77
|
+
"test/parser_test.rb",
|
78
|
+
"test/string_test.rb",
|
68
79
|
"test/test_helper.rb"
|
69
80
|
]
|
70
81
|
|
data/README.rdoc
CHANGED
@@ -2,32 +2,31 @@
|
|
2
2
|
|
3
3
|
AbsoluteRenamer is a very powerful tool that helps files and directories renaming using the Krename syntax.
|
4
4
|
|
5
|
-
|
5
|
+
== Synopsis
|
6
6
|
|
7
|
-
absrenamer[OPTION]... [FILE]...
|
7
|
+
absrenamer [OPTION]... [FILE]...
|
8
8
|
|
9
|
-
|
9
|
+
For instance, the following line will rename all IMG*.JPG files in photo_01.jpg, photo_02.jpg, ...
|
10
10
|
|
11
|
-
|
11
|
+
absrenamer -f 'photo_##' -x '%' IMG*.JPG
|
12
|
+
|
13
|
+
== Requirements
|
12
14
|
|
13
15
|
* Ruby >= 1.8.7 (earlier releases will not work)
|
14
16
|
|
15
|
-
|
17
|
+
== Installing
|
16
18
|
|
17
19
|
You can simply install AbsoluteRenamer with gem :
|
18
20
|
|
19
|
-
sudo gem install simonc-AbsoluteRenamer
|
20
|
-
|
21
|
-
==
|
22
|
-
|
23
|
-
*
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
*
|
28
|
-
(if you want to have your own version, that is fine but
|
29
|
-
bump version in a commit by itself I can ignore when I pull)
|
30
|
-
* Send me a pull request. Bonus points for topic branches.
|
21
|
+
sudo gem install simonc-AbsoluteRenamer
|
22
|
+
|
23
|
+
== Documentation
|
24
|
+
|
25
|
+
* http://wiki.github.com/simonc/AbsoluteRenamer
|
26
|
+
|
27
|
+
== Contributors
|
28
|
+
|
29
|
+
* Simon COURTOIS
|
31
30
|
|
32
31
|
== Copyright
|
33
32
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.10.0
|
data/bin/absrenamer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env ruby187
|
2
2
|
|
3
3
|
#
|
4
4
|
# = Synopsis
|
@@ -30,6 +30,12 @@
|
|
30
30
|
# = Copyright (c) 2009 Simon COURTOIS
|
31
31
|
# Licensed under the GNU Public License
|
32
32
|
|
33
|
+
# Checking the ruby version.
|
34
|
+
unless RUBY_VERSION >= "1.8.7"
|
35
|
+
$stderr.puts "AbsoluteRenamer must be used with Ruby >= 1.8.7"
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
|
33
39
|
$:.unshift File.dirname(__FILE__) << '/../lib'
|
34
40
|
|
35
41
|
require 'absolute_renamer'
|
@@ -38,10 +44,11 @@ require 'absolute_renamer/parser'
|
|
38
44
|
require 'absolute_renamer/external'
|
39
45
|
|
40
46
|
config_path = File.dirname(__FILE__)+'/../conf/absrenamer/absrenamer.conf'
|
41
|
-
|
47
|
+
global_conf = '/etc/absrenamer/absrenamer.conf'
|
42
48
|
custom_conf = '~/.absrenamerrc'
|
43
49
|
|
44
50
|
AbsoluteRenamer::Config.load(config_path)
|
51
|
+
AbsoluteRenamer::Config.load(global_conf) if File.exists? global_conf
|
45
52
|
AbsoluteRenamer::Config.load(custom_conf) if File.exists? custom_conf
|
46
53
|
|
47
54
|
AbsoluteRenamer::Parser.parse_cmd_line
|
@@ -7,7 +7,11 @@ module AbsoluteRenamer
|
|
7
7
|
# Open and load a Yaml file into the +@conf+ variable.
|
8
8
|
# config_path: path of the file to load.
|
9
9
|
def load(config_path)
|
10
|
-
@conf
|
10
|
+
@conf ||= {}
|
11
|
+
|
12
|
+
if tmp_conf = YAML::load_file(config_path)
|
13
|
+
@conf.deep_merge! tmp_conf
|
14
|
+
end
|
11
15
|
|
12
16
|
@conf[:options] ||= {}
|
13
17
|
@conf[:options][:format] ||= '$'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Extension of existing Hash class
|
2
|
+
class Hash
|
3
|
+
# Returns a new hash containing resulting of a recursive merge between two hashes
|
4
|
+
# new_hash: the hash to merge
|
5
|
+
# h1 = { :key1 => :val1, :key2 => { :key21 => :val21 } }
|
6
|
+
# h2 = { :key2 => { :key22 => :val22 }, :key3 => val3 }
|
7
|
+
# h1.deep_marge! h2 #=> { :key1 => val1, :key2 => { :key21 => :val21. :key22 => :val22 }, test3 => val3 }
|
8
|
+
# h1 #=> { :key1 => :val1, :key2 => { :key21 => :val21 } }
|
9
|
+
def deep_merge(new_hash)
|
10
|
+
self.clone.deep_merge! new_hash
|
11
|
+
end
|
12
|
+
|
13
|
+
# Adds the contents of new_hash to another hash recusively
|
14
|
+
# new_hash: the hash to merge
|
15
|
+
# h1 = { :key1 => :val1, :key2 => { :key21 => :val21 } }
|
16
|
+
# h2 = { :key2 => { :key22 => :val22 }, :key3 => val3 }
|
17
|
+
# h1.deep_marge! h2
|
18
|
+
# h1 #=> { :key1 => val1, :key2 => { :key21 => :val21. :key22 => :val22 }, test3 => val3 }
|
19
|
+
def deep_merge!(new_hash)
|
20
|
+
merge! new_hash do |key, v1, v2|
|
21
|
+
if v1.is_a? Hash
|
22
|
+
v1.deep_merge! v2
|
23
|
+
else
|
24
|
+
self[key] = v2
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -12,9 +12,9 @@ class String
|
|
12
12
|
|
13
13
|
# Camelizes a string and returns it.
|
14
14
|
# str = "Hello.THE World"
|
15
|
-
# str.camelize!
|
16
|
-
# str.camelize!(/[\.]/)
|
17
|
-
# str
|
15
|
+
# str.camelize! # => "Hello.The World"
|
16
|
+
# str.camelize!(/[\.]/) # => "Hello.The World"
|
17
|
+
# str # => "Hello.The World"
|
18
18
|
def camelize!(word_separators = /[\W_]/)
|
19
19
|
self.downcase!
|
20
20
|
self.each_char.each_with_index do |c,i|
|
data/lib/absolute_renamer.rb
CHANGED
@@ -8,6 +8,7 @@ require 'absolute_renamer/parser'
|
|
8
8
|
require 'absolute_renamer/file_info'
|
9
9
|
require 'absolute_renamer/libs/file'
|
10
10
|
require 'absolute_renamer/libs/string'
|
11
|
+
require 'absolute_renamer/libs/hash'
|
11
12
|
require 'absolute_renamer/use_config'
|
12
13
|
|
13
14
|
# top level module of AbsoluteRenamer.
|
data/test/hash_test.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class LibHashTest < Test::Unit::TestCase
|
4
|
+
context "A Hash instance" do
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@hash1 = { :key1 => :val1, :key2 => { :key21 => :val21 } }
|
8
|
+
@hash2 = { :key2 => { :key22 => :val22 }, :key3 => :val3 }
|
9
|
+
@hash3 = { :key1 => :val12 }
|
10
|
+
|
11
|
+
@result1 = { :key1 => :val1, :key2 => { :key21 => :val21, :key22 => :val22 }, :key3 => :val3 }
|
12
|
+
@result2 = { :key1 => :val12, :key2 => { :key21 => :val21 } }
|
13
|
+
end
|
14
|
+
|
15
|
+
should "be able to merge recursively with another without changing" do
|
16
|
+
assert_equal @hash1.deep_merge(@hash2), @result1
|
17
|
+
assert_not_equal @hash1, @result
|
18
|
+
end
|
19
|
+
|
20
|
+
should "be able to merge recursively with another" do
|
21
|
+
@hash1.deep_merge! @hash2
|
22
|
+
assert_equal @hash1, @result1
|
23
|
+
end
|
24
|
+
|
25
|
+
should "be able to simply merge with another" do
|
26
|
+
@hash1.deep_merge! @hash3
|
27
|
+
assert_equal @hash1, @result2
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class IModuleTest < Test::Unit::TestCase
|
4
|
+
context "The IModule class" do
|
5
|
+
|
6
|
+
should "be able to return its symbol" do
|
7
|
+
assert_equal(:"AbsoluteRenamer::IModule", AbsoluteRenamer::IModule.symbol)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
context "An IModule instance" do
|
13
|
+
|
14
|
+
setup do
|
15
|
+
@imodule = AbsoluteRenamer::IModule.new
|
16
|
+
@fileinfo = AbsoluteRenamer::FileInfo.new('/some/path/to/a_file.txt')
|
17
|
+
end
|
18
|
+
|
19
|
+
should "set the right filename format when calling process" do
|
20
|
+
assert_equal('format', @imodule.process(@fileinfo, 'format', :name))
|
21
|
+
end
|
22
|
+
|
23
|
+
should "set the right extension format when calling process" do
|
24
|
+
assert_equal('format', @imodule.process(@fileinfo, 'format', :ext))
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with config file loaded" do
|
28
|
+
|
29
|
+
setup do
|
30
|
+
AbsoluteRenamer::Config.load('conf/absrenamer/absrenamer.conf')
|
31
|
+
@default_string = AbsoluteRenamer::Config[:options][:default_string]
|
32
|
+
@infos = [nil, nil, '', 'matched']
|
33
|
+
end
|
34
|
+
|
35
|
+
should "be able to interpret a matching result for filename" do
|
36
|
+
assert_equal(@default_string, @imodule.interpret(@fileinfo, @infos, :name))
|
37
|
+
end
|
38
|
+
|
39
|
+
should "be able to interpret a matching result for extension" do
|
40
|
+
assert_equal(@default_string, @imodule.interpret(@fileinfo, @infos, :ext))
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/test/parser_test.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ParserTest < Test::Unit::TestCase
|
4
|
+
context "A Parser instance" do
|
5
|
+
|
6
|
+
context "with config file loaded and the -f'format' option set" do
|
7
|
+
|
8
|
+
setup do
|
9
|
+
AbsoluteRenamer::Config.load('conf/absrenamer/absrenamer.conf')
|
10
|
+
ARGV << '-f'
|
11
|
+
ARGV << 'format'
|
12
|
+
end
|
13
|
+
|
14
|
+
should "be able to parse the format from the command line options" do
|
15
|
+
AbsoluteRenamer::Parser.parse_cmd_line
|
16
|
+
assert_equal('format', AbsoluteRenamer::Config[:options][:format])
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/test/string_test.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class LibStringTest < Test::Unit::TestCase
|
4
|
+
context "A String instance" do
|
5
|
+
|
6
|
+
should "return Hello World when camelizing hello world" do
|
7
|
+
assert_equal("Hello World", "hello world".camelize)
|
8
|
+
end
|
9
|
+
|
10
|
+
should "return Hello.World when camelizing hello.world" do
|
11
|
+
assert_equal("Hello.World", "hello.world".camelize)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "return Hello The.World when camelizing hello THE.world" do
|
15
|
+
assert_equal("Hello The.World", "hello THE.world".camelize)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "return Hello..World when camelizing hello..world" do
|
19
|
+
assert_equal("Hello..World", "hello..world".camelize)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "return Hello.World when camelizing hello.world with the /\./ separation pattern" do
|
23
|
+
assert_equal("Hello.World", "hello.world".camelize(/\./))
|
24
|
+
end
|
25
|
+
|
26
|
+
should "return Hello The.world when camelizing hello THE.world with the / / separation pattern" do
|
27
|
+
assert_equal("Hello The.world", "hello THE.world".camelize(/ /))
|
28
|
+
end
|
29
|
+
|
30
|
+
context "set to hello world" do
|
31
|
+
|
32
|
+
setup do
|
33
|
+
@string = 'hello world'
|
34
|
+
end
|
35
|
+
|
36
|
+
should "return and be equal to Hello World when calling camelize!" do
|
37
|
+
assert_equal("Hello World", @string.camelize!)
|
38
|
+
assert_equal("Hello World", @string)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -5,6 +5,8 @@ require 'shoulda'
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
7
|
require 'absolute_renamer'
|
8
|
+
require 'absolute_renamer/libs/string'
|
9
|
+
require 'absolute_renamer/libs/file'
|
8
10
|
|
9
11
|
class Test::Unit::TestCase
|
10
12
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: AbsoluteRenamer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon COURTOIS
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-29 00:00:00 +02:00
|
13
13
|
default_executable: absrenamer
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/absolute_renamer/iparser.rb
|
60
60
|
- lib/absolute_renamer/iplugin.rb
|
61
61
|
- lib/absolute_renamer/libs/file.rb
|
62
|
+
- lib/absolute_renamer/libs/hash.rb
|
62
63
|
- lib/absolute_renamer/libs/string.rb
|
63
64
|
- lib/absolute_renamer/parser.rb
|
64
65
|
- lib/absolute_renamer/use_config.rb
|
@@ -67,6 +68,11 @@ files:
|
|
67
68
|
- test/config_test.rb
|
68
69
|
- test/file_info_test.rb
|
69
70
|
- test/file_test.rb
|
71
|
+
- test/hash_test.rb
|
72
|
+
- test/imodule_test.rb
|
73
|
+
- test/iplugin_test.rb
|
74
|
+
- test/parser_test.rb
|
75
|
+
- test/string_test.rb
|
70
76
|
- test/test_helper.rb
|
71
77
|
has_rdoc: true
|
72
78
|
homepage: http://github.com/simonc/AbsoluteRenamer
|
@@ -101,4 +107,9 @@ test_files:
|
|
101
107
|
- test/config_test.rb
|
102
108
|
- test/file_info_test.rb
|
103
109
|
- test/file_test.rb
|
110
|
+
- test/hash_test.rb
|
111
|
+
- test/imodule_test.rb
|
112
|
+
- test/iplugin_test.rb
|
113
|
+
- test/parser_test.rb
|
114
|
+
- test/string_test.rb
|
104
115
|
- test/test_helper.rb
|