fileman 0.1.10208

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a2f1e3a813fbfcfff9d7ae4545870201f57226b7
4
+ data.tar.gz: e3f9ef0ddb09fbaf0715a94b68d6cb60bc1b6fac
5
+ SHA512:
6
+ metadata.gz: 21d0a2b488f2f618eda7915c9f02e30b6435ff0893c459e587908ef9e533a3b2f1379cef010c2e1ec1e0e1c3e6175a4bd5290e839039f7c8891b74f672d51c82
7
+ data.tar.gz: 97db3896dfdadb4c0792ac378e6f5ed2506e090d8d9b7c1b25dbb7d1e6b6044fee7de8a94884f2fe88c79c59796ce25f42a3d429d1b7fe1e972bc05a3e4b4e8d
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fileman.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 ndao
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Fileman
2
+
3
+ Fileman was originally designed to solve the Windows delete issue when a folder contains files whose path is greater than 260 characters. Over time, it got extended to support other features like renaming files inside folders following patterns.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'fileman'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install fileman
18
+
19
+ ## Usage
20
+ ### Overview
21
+ Once installed, fileman is immediately available in the terminal through the 'fileman' or 'fm' command. For more details, simply type:
22
+ ```sh
23
+ fm
24
+ ```
25
+ ### Examples
26
+ #### Delete a folder
27
+ ```sh
28
+ fm rm your_folder
29
+ ```
30
+ #### Rename a folder as well as all its subfolders
31
+ ```sh
32
+ fm rn "your_folder" "new_name"
33
+ ```
34
+ #### Rename a folder as well as all its subfolder, including files
35
+ ```sh
36
+ fm rn "your_folder" "new_name" -i
37
+ ```
38
+ #### Rename a folder as well as all its subfolder, including files without the files extension
39
+ ```sh
40
+ fm rn "your_folder" "new_name" -ie
41
+ ```
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it ( https://github.com/[my-github-username]/fileman/fork )
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "lib"
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/**/*test.rb']
8
+ t.verbose = true
9
+ end
data/bin/fileman ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileman'
4
+ require "fileman/scripts/core"
data/bin/fm ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileman'
4
+ require "fileman/scripts/core"
data/fileman.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ version = "0.1.%s" % ((Time.now.utc - Time.utc(2014, 7, 8))/60).round
5
+ version_file_path = File.join(lib, "fileman", "version.rb")
6
+ updated_content = nil
7
+
8
+ # update content
9
+ File.open(version_file_path, "rb") do |f|
10
+ content = f.read
11
+ updated_content = content.gsub(/(?<=").*?(?=")/, "%s" % version)
12
+ end
13
+
14
+ # overwrite version.rb with new content
15
+ File.open(version_file_path, "w") do |f|
16
+ f.write(updated_content)
17
+ end
18
+
19
+ Gem::Specification.new do |spec|
20
+ spec.name = "fileman"
21
+ spec.version = version
22
+ spec.authors = ["nicolasdao"]
23
+ spec.email = ["nicolas.dao@gmail.com"]
24
+ spec.summary = %q{Files and directories management in windows with super powers}
25
+ spec.description = %q{Enhance files and directories management in windows(e.g. deleting files and folders whose path is longer than 260 charatcers)}
26
+ spec.homepage = ""
27
+ spec.license = "MIT"
28
+
29
+ spec.files = `git ls-files -z`.split("\x0")
30
+ spec.executables = ['fileman', 'fm']
31
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
32
+ spec.require_paths = ["lib"]
33
+
34
+ spec.add_development_dependency "bundler", "~> 1.6"
35
+ spec.add_development_dependency "rake"
36
+ spec.add_development_dependency "turn", "~> 0.9"
37
+ end
data/lib/fileman.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "fileman/version"
2
+ require "fileman/rename"
3
+ require "fileman/delete"
@@ -0,0 +1,12 @@
1
+ require 'fileutils'
2
+ require 'fileman/rename'
3
+
4
+ module Fileman
5
+ module_function
6
+
7
+ def remove(folder_path)
8
+ new_name = Fileman.rename_r(folder_path, 'a', {:include_files => true, :ignore_ext => true})
9
+ new_path = File.expand_path("../#{new_name}", folder_path)
10
+ FileUtils.remove_dir new_path, true
11
+ end
12
+ end
@@ -0,0 +1,56 @@
1
+ require 'fileutils'
2
+
3
+ module Fileman
4
+ module_function
5
+
6
+ # Rename folder and all its subfolders
7
+ #
8
+ # Arguments:
9
+ # ----------
10
+ # +folder_path+ Folder's path
11
+ # +new_name+ New name that is used to rename the folder and all its subfolder.
12
+ # If there is multiple subfolders, then a incremetal number is appened
13
+ # straight after the 'new_name'(e.g. if new_name is 'a', and there are
14
+ # 2 subfolder 'subf_a' and 'subf_b', then the new names will respectively
15
+ # be 'a1' and 'a2')
16
+ # +options+ Optional parameters defined as follow:
17
+ # +:include_files+ If true, all files will also be renamed. Extensions will be removed
18
+ # +:ignore_ext+ If true, and if 'include_files' is also true, then file's extensions
19
+ # are ignored
20
+ #
21
+ # Returns the new name of the root folder
22
+ def rename_r(folder_path, new_name, options={})
23
+ include_files = !options[:include_files].nil? && options[:include_files]
24
+ increment_name = lambda { |inc| inc == 0 ? new_name : "#{new_name}#{inc}" }
25
+
26
+ rename_item = lambda { |f, is_item_func|
27
+ parent_folder = File.expand_path("../", f)
28
+ file_ext = options[:ignore_ext] ? '' : File.extname(f)
29
+ counter = 0
30
+ while is_item_func.call(File.join(parent_folder, "#{increment_name.call(counter)}#{file_ext}")) do
31
+ counter+=1
32
+ end
33
+ final_name = increment_name.call(counter)
34
+ final_name = "#{final_name}#{file_ext}" unless options[:ignore_ext]
35
+ FileUtils.mv f, File.join(parent_folder, final_name)
36
+ final_name
37
+ }
38
+
39
+ is_dir = lambda { |x| File.directory? x}
40
+ is_file = lambda { |x| File.file? x}
41
+
42
+ final_new_name = new_name
43
+ all_items = Dir["#{folder_path}/**/*"]
44
+ items_per_folder = all_items.group_by { |x| File.expand_path('../',x)}
45
+
46
+ sorted_items = items_per_folder.map { |k,v| v.sort_by{|y| y}.reverse }.flatten.reverse
47
+ (sorted_items << folder_path).each { |f|
48
+ if File.directory?(f)
49
+ final_new_name = rename_item.call(f, is_dir)
50
+ elsif include_files && File.file?(f)
51
+ rename_item.call(f, is_file)
52
+ end
53
+ }
54
+ return final_new_name
55
+ end
56
+ end
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileman'
4
+ require 'colorize'
5
+
6
+ def help
7
+ text = "usage: fileman <command> [<args>]\n" +
8
+ "\n" +
9
+ "The fileman commands are:\n" +
10
+ " rename, or rn\t Rename a folder as well as all its content with the same name\n" +
11
+ " remove, or rm\t Delete a folder\n" +
12
+ "\n" +
13
+ "For more details about each command, use fileman <command> -h"
14
+ puts text.colorize(:yellow)
15
+ end
16
+
17
+ def rename_help(rename_command)
18
+ text = "usage: fileman #{rename_command} <path> <new-name> [<args>]\n" +
19
+ "\n" +
20
+ "Optional arguments are:\n" +
21
+ " -i\t Include files so they are also renamed\n" +
22
+ " -e\t Remove files extension. Only valid if -i option is also specified"
23
+ puts text.colorize(:yellow)
24
+ end
25
+
26
+ def remove_help(rename_command)
27
+ text = "usage: fileman #{rename_command} <folder path>"
28
+ puts text.colorize(:yellow)
29
+ end
30
+
31
+ def command_help(command)
32
+ case command
33
+ when "rename"
34
+ rename_help("rename")
35
+ when "rn"
36
+ rename_help("rn")
37
+ when "remove"
38
+ remove_help("remove")
39
+ when "rm"
40
+ remove_help("rm")
41
+ else
42
+ puts "Command #{command} does not exist. Use 'fileman help' to find out about the usage".colorize(:red)
43
+ end
44
+ end
45
+
46
+ def get_rename_options
47
+ args = ARGV.clone
48
+ args.shift(3) # ignore the first 2 arguments by removing them from the array
49
+ options = {}
50
+ if (args.size > 0)
51
+ args.each { |x|
52
+ x.gsub('-', '').split('').each { |y|
53
+ case y
54
+ when 'i'
55
+ options[:include_files] = true
56
+ when 'e'
57
+ options[:ignore_ext] = true
58
+ end
59
+ }
60
+ }
61
+ end
62
+ return options
63
+ end
64
+
65
+ def get_rename_arguments
66
+ arguments = {}
67
+ args = ARGV.clone
68
+ args.shift(1) # ignore the first argument by removing them from the array
69
+ arguments[:path] = args[0]
70
+ arguments[:name] = args[1]
71
+ options = get_rename_options
72
+ arguments[:include_files] = options[:include_files]
73
+ arguments[:ignore_ext] = options[:ignore_ext]
74
+
75
+ return arguments
76
+ end
77
+
78
+ # Usage: fileman rn "your_folder_path" "new_name" -ie
79
+ def rename
80
+ argsize = ARGV.size
81
+ if argsize == 1
82
+ puts "Missing argument(0 for 2..3). Use 'fileman help' to find out about the usage".colorize(:red)
83
+ elsif argsize == 2
84
+ puts "Missing argument(1 for 2..3). Use 'fileman help' to find out about the usage".colorize(:red)
85
+ else
86
+ args = get_rename_arguments
87
+ options = {}
88
+ options[:include_files] = true if args[:include_files]
89
+ options[:ignore_ext] = true if args[:ignore_ext]
90
+ Fileman.rename_r(args[:path], args[:name], options) unless args[:error]
91
+ end
92
+ end
93
+
94
+ def remove
95
+ argsize = ARGV.size
96
+ if argsize == 1
97
+ puts "Missing argument(0 for 1). Use 'fileman help' to find out about the usage".colorize(:red)
98
+ else
99
+ folder_path = ARGV[1].downcase
100
+ Fileman.remove folder_path
101
+ end
102
+ end
103
+
104
+ argsize = ARGV.size
105
+
106
+ if argsize > 0
107
+ main_command = ARGV[0].downcase
108
+
109
+ if argsize > 1 && ARGV[1] == "-h"
110
+ command_help main_command
111
+ else
112
+ case main_command
113
+ when "rn"
114
+ rename
115
+ when "rename"
116
+ rename
117
+ when "rm"
118
+ remove
119
+ when "remove"
120
+ remove
121
+ when "help"
122
+ help
123
+ when "h"
124
+ help
125
+ else
126
+ help
127
+ end
128
+ end
129
+ else
130
+ help
131
+ end
@@ -0,0 +1 @@
1
+ module Fileman
2
  VERSION ="0.1.10208"
@@ -0,0 +1,14 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
3
+ require 'fileman'
4
+ require 'toolbelt/fixture'
5
+ require 'pathname'
6
+ require 'fileutils'
7
+
8
+ # Attempt to load turn to show formatted test results
9
+ begin
10
+ require "turn"
11
+ Turn.config.format = :pretty
12
+ Turn.config.natural = true
13
+ rescue LoadError
14
+ end
@@ -0,0 +1,12 @@
1
+ require "yaml"
2
+ require "erb"
3
+ require "pathname"
4
+
5
+ fixture_root = Pathname("../../fixtures").expand_path(__FILE__)
6
+
7
+ Fixtures = Hash.new do |hash, f_name|
8
+ filepath = fixture_root.join("#{f_name}.yml")
9
+ file_contents = open(filepath).read
10
+ YAML.load(ERB.new(file_contents).result).to_hash
11
+ hash[f_name] = YAML.load(ERB.new(file_contents).result).to_hash
12
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ describe "#Fileman.remove" do
4
+ let(:folder_name) { "TestFolder" }
5
+ let(:new_folder_name) { "a" }
6
+
7
+ before do
8
+ FileUtils.remove_dir(folder_name) if File.directory?(folder_name)
9
+ FileUtils.mkdir folder_name
10
+ FileUtils.mkdir "#{folder_name}/SubFolder_1"
11
+ FileUtils.mkdir "#{folder_name}/SubFolder_2"
12
+ FileUtils.touch "#{folder_name}/SubFolder_1/test_file.txt"
13
+ FileUtils.touch "#{folder_name}/SubFolder_2/test_file.txt"
14
+ end
15
+
16
+ after do
17
+ FileUtils.remove_dir(new_folder_name) if File.directory?(new_folder_name)
18
+ end
19
+
20
+ describe '#delete folder' do
21
+
22
+ it 'delete the folder and all its content recursively' do
23
+ File.directory?(folder_name).must_equal true
24
+ Fileman.remove folder_name
25
+ File.directory?(folder_name).must_equal false
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,79 @@
1
+ require 'test_helper'
2
+
3
+ describe "#Fileman.rename_r" do
4
+ let(:folder_name) { "TestFolder" }
5
+ let(:new_folder_name) { "a" }
6
+
7
+ before do
8
+ FileUtils.remove_dir(folder_name) if File.directory?(folder_name)
9
+ FileUtils.mkdir folder_name
10
+ FileUtils.mkdir "#{folder_name}/SubFolder_1"
11
+ FileUtils.mkdir "#{folder_name}/SubFolder_2"
12
+ FileUtils.touch "#{folder_name}/SubFolder_1/test_file.txt"
13
+ FileUtils.touch "#{folder_name}/SubFolder_1/test_file_1.txt"
14
+ FileUtils.touch "#{folder_name}/SubFolder_2/test_file.txt"
15
+ end
16
+
17
+ after do
18
+ FileUtils.remove_dir(new_folder_name) if File.directory?(new_folder_name)
19
+ end
20
+
21
+ describe 'rename folder' do
22
+
23
+ it 'rename the folder and all its subfolders recursively' do
24
+ File.directory?(folder_name).must_equal true
25
+ File.directory?("#{folder_name}/SubFolder_1").must_equal true
26
+ File.directory?("#{folder_name}/SubFolder_2").must_equal true
27
+ File.file?("#{folder_name}/SubFolder_1/test_file.txt").must_equal true
28
+ File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
29
+ File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
30
+
31
+ Fileman.rename_r folder_name, new_folder_name
32
+
33
+ File.directory?("a").must_equal true
34
+ File.directory?("a/a").must_equal true
35
+ File.directory?("a/a1").must_equal true
36
+ File.file?("a/a/test_file.txt").must_equal true
37
+ File.file?("a/a/test_file_1.txt").must_equal true
38
+ File.file?("a/a1/test_file.txt").must_equal true
39
+ end
40
+
41
+ it 'rename the folder and all its subfolders recursively, including all files ' +
42
+ 'if option :include_files is true' do
43
+ File.directory?(folder_name).must_equal true
44
+ File.directory?("#{folder_name}/SubFolder_1").must_equal true
45
+ File.directory?("#{folder_name}/SubFolder_2").must_equal true
46
+ File.file?("#{folder_name}/SubFolder_1/test_file.txt").must_equal true
47
+ File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
48
+ File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
49
+
50
+ Fileman.rename_r folder_name, new_folder_name, {:include_files => true}
51
+
52
+ File.directory?("a").must_equal true
53
+ File.directory?("a/a").must_equal true
54
+ File.directory?("a/a1").must_equal true
55
+ File.file?("a/a/a.txt").must_equal true
56
+ File.file?("a/a/a1.txt").must_equal true
57
+ File.file?("a/a1/a.txt").must_equal true
58
+ end
59
+
60
+ it 'rename the folder and all its subfolders recursively, including all files ' +
61
+ 'WITHOUT their extensions if both options :include_files and :ignore_ext are true' do
62
+ File.directory?(folder_name).must_equal true
63
+ File.directory?("#{folder_name}/SubFolder_1").must_equal true
64
+ File.directory?("#{folder_name}/SubFolder_2").must_equal true
65
+ File.file?("#{folder_name}/SubFolder_1/test_file.txt").must_equal true
66
+ File.file?("#{folder_name}/SubFolder_1/test_file_1.txt").must_equal true
67
+ File.file?("#{folder_name}/SubFolder_2/test_file.txt").must_equal true
68
+
69
+ Fileman.rename_r folder_name, new_folder_name, {:include_files => true, :ignore_ext => true}
70
+
71
+ File.directory?("a").must_equal true
72
+ File.directory?("a/a").must_equal true
73
+ File.directory?("a/a1").must_equal true
74
+ File.file?("a/a/a").must_equal true
75
+ File.file?("a/a/a1").must_equal true
76
+ File.file?("a/a1/a").must_equal true
77
+ end
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fileman
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.10208
5
+ platform: ruby
6
+ authors:
7
+ - nicolasdao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: turn
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ description: Enhance files and directories management in windows(e.g. deleting files
56
+ and folders whose path is longer than 260 charatcers)
57
+ email:
58
+ - nicolas.dao@gmail.com
59
+ executables:
60
+ - fileman
61
+ - fm
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/fileman
71
+ - bin/fm
72
+ - fileman.gemspec
73
+ - lib/fileman.rb
74
+ - lib/fileman/delete.rb
75
+ - lib/fileman/rename.rb
76
+ - lib/fileman/scripts/core.rb
77
+ - lib/fileman/version.rb
78
+ - test/test_helper.rb
79
+ - test/toolbelt/fixture.rb
80
+ - test/unit/delete_file_and_folder_test.rb
81
+ - test/unit/rename_recursively_test.rb
82
+ homepage: ''
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.0.14
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Files and directories management in windows with super powers
106
+ test_files:
107
+ - test/test_helper.rb
108
+ - test/toolbelt/fixture.rb
109
+ - test/unit/delete_file_and_folder_test.rb
110
+ - test/unit/rename_recursively_test.rb