mmve 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Gemfile +5 -0
- data/Guardfile +11 -0
- data/LICENSE +30 -0
- data/Rakefile +11 -0
- data/bin/mmve +5 -0
- data/features/rename.feature +17 -0
- data/features/step_definitions/editor_steps.rb +3 -0
- data/features/step_definitions/filesystem_steps.rb +3 -0
- data/features/support/env_aruba.rb +16 -0
- data/features/support/env_cucumber-doc_string.rb +23 -0
- data/features/usage.feature +9 -0
- data/lib/mmve.rb +4 -0
- data/lib/mmve/cli.rb +31 -0
- data/lib/mmve/editor.rb +29 -0
- data/lib/mmve/renamer.rb +17 -0
- data/lib/mmve/version.rb +3 -0
- data/mmve.gemspec +26 -0
- data/spec/mmve/cli_spec.rb +92 -0
- data/spec/mmve/editor_spec.rb +71 -0
- data/spec/mmve/renamer_spec.rb +57 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/exit_helpers.rb +6 -0
- metadata +160 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
guard :cucumber, cli: '--format pretty --quiet' do
|
2
|
+
watch(%r{\Afeatures/.+\.feature\z})
|
3
|
+
watch(%r{\Afeatures/support/.+\.rb\z}) { 'features' }
|
4
|
+
watch(%r{\Afeatures/step_definitions/.+_steps\.rb\z}) { 'features' }
|
5
|
+
end
|
6
|
+
|
7
|
+
guard :rspec do
|
8
|
+
watch(%r{\Aspec/.+_spec\.rb\z})
|
9
|
+
watch(%r{\Alib/(.+)\.rb\z}) { |m| "spec/#{m[1]}_spec.rb" }
|
10
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
11
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Copyright 2013 Thibault Jouan. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions are
|
5
|
+
met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright
|
8
|
+
notice, this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer in
|
12
|
+
the documentation and/or other materials provided with the
|
13
|
+
distribution.
|
14
|
+
|
15
|
+
* Neither the name of the software nor the names of its contributors
|
16
|
+
may be used to endorse or promote products derived from this
|
17
|
+
software without specific prior written permission.
|
18
|
+
|
19
|
+
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS "AS IS" AND
|
21
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
23
|
+
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS
|
24
|
+
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
25
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
26
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
27
|
+
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
28
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
29
|
+
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
30
|
+
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
ADDED
data/bin/mmve
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Rename files
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given the following files exists:
|
5
|
+
| some_file |
|
6
|
+
| another_file |
|
7
|
+
|
8
|
+
Scenario: renames files given as arguments when the editor modify file paths
|
9
|
+
Given my editor is "ed"
|
10
|
+
When I run `mmve some_file another_file` interactively
|
11
|
+
And I type "%s/some/renamed/"
|
12
|
+
And I type "wq"
|
13
|
+
Then the exit status must be 0
|
14
|
+
Then the following files must exist:
|
15
|
+
| renamed_file |
|
16
|
+
| another_file |
|
17
|
+
And the file "some_file" must not exist
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cucumber
|
2
|
+
class Runtime
|
3
|
+
alias :old_step_match :step_match
|
4
|
+
|
5
|
+
def step_match(step_name, name_to_report = nil)
|
6
|
+
if step_name.include? ' must '
|
7
|
+
name_to_report = step_name.dup
|
8
|
+
step_name.gsub! ' must ', ' should '
|
9
|
+
end
|
10
|
+
|
11
|
+
old_step_match(step_name, name_to_report)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'aruba/cucumber'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'cucumber/formatter/pretty'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Ast
|
5
|
+
class DocString
|
6
|
+
alias :old_initialize :initialize
|
7
|
+
|
8
|
+
def initialize(string, content_type)
|
9
|
+
old_initialize(string + "\n", content_type)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Formatter
|
15
|
+
class Pretty
|
16
|
+
alias :old_doc_string :doc_string
|
17
|
+
|
18
|
+
def doc_string(string)
|
19
|
+
old_doc_string(string.chomp)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/mmve.rb
ADDED
data/lib/mmve/cli.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module MMVE
|
2
|
+
class CLI
|
3
|
+
USAGE = "Usage: #{File.basename $0} [ path ... ]"
|
4
|
+
|
5
|
+
def initialize(arguments, stdout = $stdout)
|
6
|
+
@arguments = arguments
|
7
|
+
@stdout = stdout
|
8
|
+
end
|
9
|
+
|
10
|
+
def run!
|
11
|
+
print_usage_and_exit if @arguments.include? '-h'
|
12
|
+
renamer.destinations = editor.edit renamer.sources
|
13
|
+
renamer.execute!
|
14
|
+
end
|
15
|
+
|
16
|
+
def editor
|
17
|
+
@editor ||= Editor.new(ENV['EDITOR'])
|
18
|
+
end
|
19
|
+
|
20
|
+
def renamer
|
21
|
+
@renamer ||= Renamer.new(@arguments)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def print_usage_and_exit
|
27
|
+
@stdout.puts USAGE
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/mmve/editor.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module MMVE
|
2
|
+
class Editor
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
def initialize(editor_command)
|
6
|
+
@editor_command = editor_command
|
7
|
+
end
|
8
|
+
|
9
|
+
def edit(paths)
|
10
|
+
edited_content = with_temp_file(paths * "\n" + "\n") { |f| edit_file f }
|
11
|
+
edited_content.split "\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_temp_file(content)
|
15
|
+
content_after = ''
|
16
|
+
Tempfile.open(File.basename($0 + '_')) do |f|
|
17
|
+
f.write content
|
18
|
+
f.rewind
|
19
|
+
yield f
|
20
|
+
content_after = f.read
|
21
|
+
end
|
22
|
+
content_after
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit_file(file)
|
26
|
+
system(*@editor_command.split, file.path)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/mmve/renamer.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module MMVE
|
2
|
+
class Renamer
|
3
|
+
attr_reader :sources
|
4
|
+
attr_writer :destinations
|
5
|
+
|
6
|
+
def initialize(paths)
|
7
|
+
@sources = paths
|
8
|
+
@destinations = @sources.dup
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute!
|
12
|
+
[@sources, @destinations].transpose.each do |e|
|
13
|
+
File.rename(*e) if e.uniq.count == 2
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/mmve/version.rb
ADDED
data/mmve.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH << lib unless $LOAD_PATH.include? lib
|
3
|
+
require 'mmve/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'mmve'
|
7
|
+
s.version = MMVE::VERSION
|
8
|
+
s.summary = "mmve-#{MMVE::VERSION}"
|
9
|
+
s.description = 'Mass MV Editor: move files with your favourite $EDITOR'
|
10
|
+
s.homepage = 'https://rubygems.org/gems/mmve'
|
11
|
+
|
12
|
+
s.authors = 'Thibault Jouan'
|
13
|
+
s.email = 'tj@a13.fr'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split $/
|
16
|
+
s.test_files = s.files.grep /\A(spec|features)\//
|
17
|
+
s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) }
|
18
|
+
|
19
|
+
|
20
|
+
s.add_dependency 'net-ssh'
|
21
|
+
|
22
|
+
s.add_development_dependency 'rspec'
|
23
|
+
s.add_development_dependency 'cucumber'
|
24
|
+
s.add_development_dependency 'aruba'
|
25
|
+
s.add_development_dependency 'rake'
|
26
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MMVE::CLI do
|
4
|
+
include ExitHelpers
|
5
|
+
|
6
|
+
let(:arguments) { [:some, :arguments] }
|
7
|
+
let(:stdout) { StringIO.new }
|
8
|
+
subject(:cli) { MMVE::CLI.new(arguments, stdout) }
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
it 'assigns the arguments' do
|
12
|
+
expect(cli.instance_eval { @arguments }).to eq arguments
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'assigns the standard output' do
|
16
|
+
expect(cli.instance_eval { @stdout }).to eq stdout
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when no stdout is specified' do
|
20
|
+
subject(:cli) { MMVE::CLI.new(arguments) }
|
21
|
+
|
22
|
+
it 'assigns $stdout as a default standard output' do
|
23
|
+
expect(cli.instance_eval { @stdout }).to be $stdout
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#run!' do
|
29
|
+
it 'edits the renamer source paths' do
|
30
|
+
renamer = double('renamer').as_null_object
|
31
|
+
allow(cli).to receive(:renamer) { renamer }
|
32
|
+
expect(cli.editor).to receive(:edit).with(cli.renamer.sources)
|
33
|
+
cli.run!
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'assigns the edited source paths as the renamer destination paths' do
|
37
|
+
editor = double('editor')
|
38
|
+
allow(cli).to receive(:editor) { editor }
|
39
|
+
allow(editor).to receive(:edit) { arguments }
|
40
|
+
expect(cli.renamer).to receive(:destinations=).with(arguments)
|
41
|
+
cli.run!
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'executes the renamer' do
|
45
|
+
editor = double('editor').as_null_object
|
46
|
+
allow(cli).to receive(:editor) { editor }
|
47
|
+
expect(cli.renamer).to receive(:execute!)
|
48
|
+
cli.run!
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when one of the arguments is -h' do
|
52
|
+
let(:arguments) { %w[-h] }
|
53
|
+
|
54
|
+
it 'prints the usage' do
|
55
|
+
trap_exit { cli.run! }
|
56
|
+
expect(stdout.string).to eq MMVE::CLI::USAGE + "\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'exits successfully' do
|
60
|
+
expect { cli.run! }.to raise_error(SystemExit) do |e|
|
61
|
+
expect(e.code).to be 0
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#editor' do
|
68
|
+
it 'builds an editor with current $EDITOR' do
|
69
|
+
expect(MMVE::Editor).to receive(:new).with(ENV['EDITOR'])
|
70
|
+
cli.editor
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'returns the editor' do
|
74
|
+
editor = double('editor')
|
75
|
+
allow(MMVE::Editor).to receive(:new) { editor }
|
76
|
+
expect(cli.editor).to be editor
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#renamer' do
|
81
|
+
it 'builds a renamer with the paths given as argument' do
|
82
|
+
expect(MMVE::Renamer).to receive(:new).with(arguments)
|
83
|
+
cli.renamer
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns the renamer' do
|
87
|
+
renamer = double('renamer')
|
88
|
+
allow(MMVE::Renamer).to receive(:new) { renamer }
|
89
|
+
expect(cli.renamer).to be renamer
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MMVE::Editor do
|
4
|
+
let(:editor_command) { 'some editor command' }
|
5
|
+
subject(:editor) { MMVE::Editor.new(editor_command) }
|
6
|
+
|
7
|
+
describe '#initialize' do
|
8
|
+
it 'assigns the editor command' do
|
9
|
+
expect(editor.instance_eval { @editor_command }).to eq editor_command
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#edit' do
|
14
|
+
let(:paths) { %w[some_path other_path] }
|
15
|
+
let(:paths_str) { paths * "\n" + "\n" }
|
16
|
+
|
17
|
+
it 'creates a temporary file with the paths as content' do
|
18
|
+
expect(editor)
|
19
|
+
.to receive(:with_temp_file).with(paths_str).and_return(paths_str)
|
20
|
+
editor.edit(paths)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'sends the edit_file message with the temporary file' do
|
24
|
+
expect(editor).to receive(:edit_file).with(any_args())
|
25
|
+
editor.edit(paths)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns the edited file paths as a list' do
|
29
|
+
allow(editor).to receive(:with_temp_file) { paths_str }
|
30
|
+
expect(editor.edit(paths)).to eq paths
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#with_temp_file' do
|
35
|
+
let(:content) { "some_content\n" }
|
36
|
+
|
37
|
+
it 'opens a temporary file' do
|
38
|
+
expect(Tempfile).to receive(:open).with('rspec_')
|
39
|
+
editor.with_temp_file(content) { }
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'it writes the content to the file' do
|
43
|
+
file = double('file').as_null_object
|
44
|
+
allow(Tempfile).to receive(:open).and_yield(file)
|
45
|
+
expect(file).to receive(:write).with(content)
|
46
|
+
editor.with_temp_file(content) { }
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'yields the block with the file as argument' do
|
50
|
+
file = double('file').as_null_object
|
51
|
+
allow(Tempfile).to receive(:open).and_yield(file)
|
52
|
+
expect { |b| editor.with_temp_file(content, &b) }.to yield_with_args(file)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'returns the temporary file content after yielding the block' do
|
56
|
+
new_content = "new_content\n"
|
57
|
+
expect(
|
58
|
+
editor.with_temp_file(content) { |f| File.write f.path, new_content }
|
59
|
+
).to eq new_content
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#edit_file' do
|
64
|
+
let(:file) { double('file', path: 'some_path') }
|
65
|
+
|
66
|
+
it 'executes the editor command with the file path as argument' do
|
67
|
+
expect(editor).to receive(:system).with(*editor_command.split, file.path)
|
68
|
+
editor.edit_file(file)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MMVE::Renamer do
|
4
|
+
let(:sources) { %w[some_path other_path] }
|
5
|
+
let(:destinations) { %w[renamed_path other_path] }
|
6
|
+
subject(:renamer) { MMVE::Renamer.new(sources) }
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
it 'assigns the source paths' do
|
10
|
+
expect(renamer.instance_eval { @sources }).to eq sources
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'assigns destination paths equivalent to source paths' do
|
14
|
+
expect(renamer.instance_eval { @destinations }).to eq sources
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'copies the assignated destinations paths' do
|
18
|
+
expect(renamer.instance_eval { @destinations }).to_not be sources
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#sources' do
|
23
|
+
it 'returns the source paths' do
|
24
|
+
expect(renamer.sources).to eq sources
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#destinations=' do
|
29
|
+
it 'assigns the destination paths' do
|
30
|
+
renamer.destinations = destinations
|
31
|
+
expect(renamer.instance_eval { @destinations }).to eq destinations
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#execute!' do
|
36
|
+
context 'when destinations differs from sources' do
|
37
|
+
before do
|
38
|
+
renamer.destinations = destinations
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'renames the sources to the destinations' do
|
42
|
+
expect(File)
|
43
|
+
.to receive(:rename).with(sources.first, destinations.first)
|
44
|
+
renamer.execute!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when destinations are the same as sources' do
|
49
|
+
let(:destinations) { sources }
|
50
|
+
|
51
|
+
it 'renames nothing' do
|
52
|
+
expect(File).not_to receive(:rename)
|
53
|
+
renamer.execute!
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mmve
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thibault Jouan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-08-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: net-ssh
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: cucumber
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: aruba
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: ! 'Mass MV Editor: move files with your favourite $EDITOR'
|
95
|
+
email: tj@a13.fr
|
96
|
+
executables:
|
97
|
+
- mmve
|
98
|
+
extensions: []
|
99
|
+
extra_rdoc_files: []
|
100
|
+
files:
|
101
|
+
- .gitignore
|
102
|
+
- Gemfile
|
103
|
+
- Guardfile
|
104
|
+
- LICENSE
|
105
|
+
- Rakefile
|
106
|
+
- bin/mmve
|
107
|
+
- features/rename.feature
|
108
|
+
- features/step_definitions/editor_steps.rb
|
109
|
+
- features/step_definitions/filesystem_steps.rb
|
110
|
+
- features/support/env_aruba.rb
|
111
|
+
- features/support/env_cucumber-doc_string.rb
|
112
|
+
- features/usage.feature
|
113
|
+
- lib/mmve.rb
|
114
|
+
- lib/mmve/cli.rb
|
115
|
+
- lib/mmve/editor.rb
|
116
|
+
- lib/mmve/renamer.rb
|
117
|
+
- lib/mmve/version.rb
|
118
|
+
- mmve.gemspec
|
119
|
+
- spec/mmve/cli_spec.rb
|
120
|
+
- spec/mmve/editor_spec.rb
|
121
|
+
- spec/mmve/renamer_spec.rb
|
122
|
+
- spec/spec_helper.rb
|
123
|
+
- spec/support/exit_helpers.rb
|
124
|
+
homepage: https://rubygems.org/gems/mmve
|
125
|
+
licenses: []
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 1.8.23
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: mmve-0.1.0
|
148
|
+
test_files:
|
149
|
+
- features/rename.feature
|
150
|
+
- features/step_definitions/editor_steps.rb
|
151
|
+
- features/step_definitions/filesystem_steps.rb
|
152
|
+
- features/support/env_aruba.rb
|
153
|
+
- features/support/env_cucumber-doc_string.rb
|
154
|
+
- features/usage.feature
|
155
|
+
- spec/mmve/cli_spec.rb
|
156
|
+
- spec/mmve/editor_spec.rb
|
157
|
+
- spec/mmve/renamer_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
- spec/support/exit_helpers.rb
|
160
|
+
has_rdoc:
|