fileman 0.1.30646 → 0.1.32104
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fileman/delete.rb +1 -2
- data/lib/fileman/rename.rb +50 -29
- data/lib/fileman/scripts/core.rb +8 -3
- data/lib/fileman/version.rb +1 -1
- data/test/unit/rename_recursively_test.rb +25 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc7e6ea25aa65085ca2533678d88e224b2e7645f
|
4
|
+
data.tar.gz: e3519620666ff6a33bf6ebcb3bc46169a054b1ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4653d4d441f9b0b751a6821b205aaa7b9f77e33ed74bd6b14feb2bf6a4c8179f1c9cda7664a5e4fcd5543be37f5d8f28b6d588e18acf53157fe272f70e05d58
|
7
|
+
data.tar.gz: 90a3e93d990cd04b519f1fdb6cb77a3cfde980fe23ee332cd4a7ed4d046a6e554f2a5a0f65ba7d2f17ac42699c9523df518d68cea5b60e0adecee23ae151b2b3
|
data/lib/fileman/delete.rb
CHANGED
@@ -5,8 +5,7 @@ module Fileman
|
|
5
5
|
module_function
|
6
6
|
|
7
7
|
def remove(folder_path)
|
8
|
-
|
9
|
-
new_path = File.expand_path("../#{new_name}", folder_path)
|
8
|
+
new_path = Fileman.rename(folder_path, 'a', {:include_files => true, :ignore_ext => true, :recursive => true})
|
10
9
|
FileUtils.remove_dir new_path, true
|
11
10
|
end
|
12
11
|
end
|
data/lib/fileman/rename.rb
CHANGED
@@ -3,53 +3,74 @@ require 'fileutils'
|
|
3
3
|
module Fileman
|
4
4
|
module_function
|
5
5
|
|
6
|
-
# Rename folder and
|
6
|
+
# Rename file or folder. If the item is a folder, subfolders and files can optionally
|
7
|
+
# be recursively renamed to.
|
7
8
|
#
|
8
9
|
# Arguments:
|
9
10
|
# ----------
|
10
|
-
# +
|
11
|
-
# +new_name+ New name that is used to rename the
|
12
|
-
#
|
11
|
+
# +item_path+ Item's path
|
12
|
+
# +new_name+ New name that is used to rename the item. If the item is a folder,
|
13
|
+
# subfolders and files can optionally be recursively renamed to.
|
14
|
+
# If there is multiple subfolders, then an incremetal number is appened
|
13
15
|
# straight after the 'new_name'(e.g. if new_name is 'a', and there are
|
14
16
|
# 2 subfolder 'subf_a' and 'subf_b', then the new names will respectively
|
15
17
|
# be 'a1' and 'a2')
|
16
18
|
# +options+ Optional parameters defined as follow:
|
17
|
-
# +:
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
19
|
+
# +:recursive+ Default is false. If true, and if the item is a folder, then all the
|
20
|
+
# folder's content is also renamed
|
21
|
+
# +:include_files+ Default is false. If true, all files will also be renamed. In that case
|
22
|
+
# the 'recursive' option is implicitly set to true
|
23
|
+
# +:ignore_ext+ Default is false. If true, and if 'include_files' is also true, then
|
24
|
+
# file's extensions are removed.
|
21
25
|
#
|
22
26
|
# Returns the new name of the root folder
|
23
|
-
def
|
27
|
+
def rename(item_path, new_name, options={})
|
24
28
|
include_files = !options[:include_files].nil? && options[:include_files]
|
29
|
+
recursive = include_files ? true : (!options[:recursive].nil? && options[:recursive])
|
25
30
|
ignore_ext = !options[:ignore_ext].nil? && options[:ignore_ext]
|
26
31
|
increment_name = lambda { |inc| inc == 0 ? new_name : "#{new_name}#{inc}" }
|
27
32
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
try_rename_item = lambda { |counter, file, parent_folder, file_ext|
|
34
|
+
final_name = nil
|
35
|
+
begin
|
36
|
+
while File.exists?(File.join(parent_folder, "#{increment_name.call(counter)}#{file_ext}")) do
|
37
|
+
counter+=1
|
38
|
+
end
|
39
|
+
final_name = increment_name.call(counter)
|
40
|
+
final_name = "#{final_name}#{file_ext}" unless ignore_ext
|
41
|
+
FileUtils.mv file, File.join(parent_folder, final_name)
|
42
|
+
rescue Errno::EACCES => eaccess # permission denied
|
43
|
+
final_name = nil
|
44
|
+
rescue Exception => e
|
45
|
+
raise e
|
34
46
|
end
|
35
|
-
final_name = increment_name.call(counter)
|
36
|
-
final_name = "#{final_name}#{file_ext}" unless ignore_ext
|
37
|
-
FileUtils.mv f, File.join(parent_folder, final_name)
|
38
47
|
final_name
|
39
48
|
}
|
40
49
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
rename_item = lambda { |i|
|
51
|
+
parent_folder = File.expand_path("../", i)
|
52
|
+
file_ext = ignore_ext ? '' : File.extname(i)
|
53
|
+
counter = 0
|
54
|
+
final_name = nil
|
55
|
+
while final_name == nil
|
56
|
+
final_name = try_rename_item.call(counter, i, parent_folder, file_ext)
|
57
|
+
counter += 1
|
58
|
+
end
|
59
|
+
File.join(parent_folder, final_name)
|
60
|
+
}
|
61
|
+
|
62
|
+
recursively_rename_item = lambda { |i|
|
63
|
+
item_is_dir = File.directory? i
|
64
|
+
new_item_path = rename_item.call(i) unless !item_is_dir && !include_files # rename current item
|
65
|
+
|
66
|
+
if item_is_dir && recursive # if current is a folder, rename all its children
|
67
|
+
all_folder_children = Dir.glob("#{new_item_path}/*", File::FNM_DOTMATCH) - ["#{new_item_path}/.", "#{new_item_path}/.."]
|
68
|
+
all_folder_children.each { |c| recursively_rename_item.call(c) }
|
51
69
|
end
|
70
|
+
|
71
|
+
new_item_path
|
52
72
|
}
|
53
|
-
|
73
|
+
|
74
|
+
return recursively_rename_item.call(item_path)
|
54
75
|
end
|
55
76
|
end
|
data/lib/fileman/scripts/core.rb
CHANGED
@@ -18,8 +18,9 @@ def rename_help(rename_command)
|
|
18
18
|
text = "usage: fileman #{rename_command} <path> <new-name> [<args>]\n" +
|
19
19
|
"\n" +
|
20
20
|
"Optional arguments are:\n" +
|
21
|
-
" -
|
22
|
-
" -
|
21
|
+
" -r\t Recursive rename. That means that if the path points to a folder, all its content will also be renamed\n" +
|
22
|
+
" -i\t Include files so they are also renamed. This option implicitly uses recursive rename(no need to use the -r option)\n" +
|
23
|
+
" -e\t Remove files extension. Only valid if the -i option is also specified"
|
23
24
|
puts text.colorize(:yellow)
|
24
25
|
end
|
25
26
|
|
@@ -55,6 +56,8 @@ def get_rename_options
|
|
55
56
|
options[:include_files] = true
|
56
57
|
when 'e'
|
57
58
|
options[:ignore_ext] = true
|
59
|
+
when 'r'
|
60
|
+
options[:recursive] = true
|
58
61
|
end
|
59
62
|
}
|
60
63
|
}
|
@@ -71,6 +74,7 @@ def get_rename_arguments
|
|
71
74
|
options = get_rename_options
|
72
75
|
arguments[:include_files] = options[:include_files]
|
73
76
|
arguments[:ignore_ext] = options[:ignore_ext]
|
77
|
+
arguments[:recursive] = options[:recursive]
|
74
78
|
|
75
79
|
return arguments
|
76
80
|
end
|
@@ -87,7 +91,8 @@ def rename
|
|
87
91
|
options = {}
|
88
92
|
options[:include_files] = true if args[:include_files]
|
89
93
|
options[:ignore_ext] = true if args[:ignore_ext]
|
90
|
-
|
94
|
+
options[:recursive] = true if args[:recursive]
|
95
|
+
Fileman.rename(args[:path], args[:name], options) unless args[:error]
|
91
96
|
end
|
92
97
|
end
|
93
98
|
|
data/lib/fileman/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
describe "#Fileman.
|
3
|
+
describe "#Fileman.rename" do
|
4
4
|
let(:folder_name) { "TestFolder" }
|
5
5
|
let(:new_folder_name) { "a" }
|
6
6
|
|
@@ -20,7 +20,7 @@ describe "#Fileman.rename_r" do
|
|
20
20
|
|
21
21
|
describe 'rename folder' do
|
22
22
|
|
23
|
-
it 'rename the folder
|
23
|
+
it 'rename the folder' do
|
24
24
|
File.directory?(folder_name).must_equal true
|
25
25
|
File.directory?("#{folder_name}/SubFolder_1").must_equal true
|
26
26
|
File.directory?("#{folder_name}/SubFolder_2").must_equal true
|
@@ -28,7 +28,25 @@ describe "#Fileman.rename_r" do
|
|
28
28
|
File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
|
29
29
|
File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
|
30
30
|
|
31
|
-
Fileman.
|
31
|
+
Fileman.rename folder_name, new_folder_name
|
32
|
+
|
33
|
+
File.directory?("a").must_equal true
|
34
|
+
File.directory?("a/SubFolder_1").must_equal true
|
35
|
+
File.directory?("a/SubFolder_2").must_equal true
|
36
|
+
File.file?("a/SubFolder_1/test_file.txt").must_equal true
|
37
|
+
File.file?("a/SubFolder_1/test_file_1.txt").must_equal true
|
38
|
+
File.file?("a/SubFolder_2/test_file.txt").must_equal true
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'rename the folder and all its subfolders recursively if the :recursive option is true' do
|
42
|
+
File.directory?(folder_name).must_equal true
|
43
|
+
File.directory?("#{folder_name}/SubFolder_1").must_equal true
|
44
|
+
File.directory?("#{folder_name}/SubFolder_2").must_equal true
|
45
|
+
File.file?("#{folder_name}/SubFolder_1/test_file.txt").must_equal true
|
46
|
+
File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
|
47
|
+
File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
|
48
|
+
|
49
|
+
Fileman.rename folder_name, new_folder_name, {:recursive => true}
|
32
50
|
|
33
51
|
File.directory?("a").must_equal true
|
34
52
|
File.directory?("a/a").must_equal true
|
@@ -38,7 +56,7 @@ describe "#Fileman.rename_r" do
|
|
38
56
|
File.file?("a/a1/test_file.txt").must_equal true
|
39
57
|
end
|
40
58
|
|
41
|
-
it 'rename the folder and all its subfolders recursively, including all files ' +
|
59
|
+
it 'rename the folder and all its subfolders recursively, including all files, if both the :include_files and :recursive options are true' +
|
42
60
|
'if option :include_files is true' do
|
43
61
|
File.directory?(folder_name).must_equal true
|
44
62
|
File.directory?("#{folder_name}/SubFolder_1").must_equal true
|
@@ -47,7 +65,7 @@ describe "#Fileman.rename_r" do
|
|
47
65
|
File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
|
48
66
|
File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
|
49
67
|
|
50
|
-
Fileman.
|
68
|
+
Fileman.rename folder_name, new_folder_name, {:include_files => true, :recursive => true}
|
51
69
|
|
52
70
|
File.directory?("a").must_equal true
|
53
71
|
File.directory?("a/a").must_equal true
|
@@ -58,7 +76,7 @@ describe "#Fileman.rename_r" do
|
|
58
76
|
end
|
59
77
|
|
60
78
|
it 'rename the folder and all its subfolders recursively, including all files ' +
|
61
|
-
'WITHOUT their extensions if
|
79
|
+
'WITHOUT their extensions if options :include_files, :ignore_ext, and :recursive are true' do
|
62
80
|
File.directory?(folder_name).must_equal true
|
63
81
|
File.directory?("#{folder_name}/SubFolder_1").must_equal true
|
64
82
|
File.directory?("#{folder_name}/SubFolder_2").must_equal true
|
@@ -66,7 +84,7 @@ describe "#Fileman.rename_r" do
|
|
66
84
|
File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
|
67
85
|
File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
|
68
86
|
|
69
|
-
Fileman.
|
87
|
+
Fileman.rename folder_name, new_folder_name, {:include_files => true, :ignore_ext => true, :recursive => true}
|
70
88
|
|
71
89
|
File.directory?("a").must_equal true
|
72
90
|
File.directory?("a/a").must_equal true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fileman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.32104
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nicolasdao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|