modname 0.2.3 → 1.0.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.
- checksums.yaml +5 -5
- data/bin/modname +2 -2
- data/lib/modname/banner.rb +29 -29
- data/lib/modname/modder.rb +55 -50
- data/lib/modname/version.rb +3 -1
- data/lib/modname.rb +56 -55
- data/readme.md +9 -6
- metadata +12 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a75ac155dd3255d8cebd50ec9e01e629a9f64aa0b17090e482db22978baf8832
|
|
4
|
+
data.tar.gz: 29414f4677355f27ddda53fbfd857241adf1550c28709c955da4e2165b71d1c6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2ea30c66c31f07b5b5f928cb49c0fd8cbddd6d765042b7b3f1cdd7c08e746d0085f7dd916e32488424b3c9a594a46a9c7ccd1fe769d663b0217b49b60216e6f6
|
|
7
|
+
data.tar.gz: 39b3a3d68f4462308713223c71b6fc7a7b307f333f452e1b1c4cf7e9509698e075c7ab2023dd6adcc25581e87dbecceb1dde56cf62b7022b29f1c5abbdb2eed8
|
data/bin/modname
CHANGED
data/lib/modname/banner.rb
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Modname is a versatile file naming tool for renaming groups of files
|
|
4
|
+
module Modname end
|
|
3
5
|
|
|
4
|
-
Modname::
|
|
5
|
-
#{'Usage:'.cyan} modname [options] <match> [transform]
|
|
6
|
+
Modname::HELP_BANNER = <<~HELP.freeze
|
|
7
|
+
#{'Usage:'.cyan} modname [options] <match> [transform]
|
|
6
8
|
|
|
7
|
-
#{'modname | rename files, fast'.cyan}
|
|
8
|
-
#{'--------┼----------------------------'.cyan}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
#{'modname | rename files, fast'.cyan}
|
|
10
|
+
#{'--------┼----------------------------'.cyan}
|
|
11
|
+
-e #{'|'.cyan} change file extensions
|
|
12
|
+
-f #{'|'.cyan} force run; don't pre-check
|
|
13
|
+
-r #{'|'.cyan} run modname recursively
|
|
14
|
+
-h #{'|'.cyan} show more help, examples
|
|
13
15
|
HELP
|
|
14
16
|
|
|
17
|
+
Modname::V_HELP_BANNER = <<~VHELP.freeze
|
|
18
|
+
#{Modname::HELP_BANNER}
|
|
19
|
+
#{'commands'.cyan}
|
|
20
|
+
file names
|
|
21
|
+
[match] [trans] => modify a pattern in filenames
|
|
22
|
+
[match] => delete a pattern from filenames
|
|
15
23
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
[match] [trans] => modify a pattern in filenames
|
|
21
|
-
[match] => delete a pattern from filenames
|
|
24
|
+
extensions (-e)
|
|
25
|
+
[old] [new] => move file extensions, <old> to <new>
|
|
26
|
+
[ext] => lowercase one extension type (EXT => ext)
|
|
27
|
+
nil => move all extensions to lower case
|
|
22
28
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
#{'examples'.cyan}
|
|
30
|
+
file names
|
|
31
|
+
modname hello => deletes 'hello' from all filenames
|
|
32
|
+
modname hello byebye => replace 'hello' with byebye
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
modname hello byebye => replace 'hello' with byebye
|
|
34
|
+
extensions (-e)
|
|
35
|
+
modname -e txt md => move all txt files to markdown
|
|
36
|
+
modname -e mov mp4 => move all mov files to mp4
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
modname -e txt md => move all txt files to markdown
|
|
35
|
-
modname -e mov mp4 => move all mov files to mp4
|
|
36
|
-
|
|
37
|
-
#{'Note:'.cyan} <required> [optional]
|
|
38
|
+
#{'Note:'.cyan} <required> [optional]
|
|
38
39
|
VHELP
|
|
39
|
-
|
data/lib/modname/modder.rb
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# modder, the modname helper
|
|
2
4
|
# generally: o-old, n-new
|
|
3
5
|
|
|
4
|
-
|
|
5
6
|
# any module including modder should implement:
|
|
6
7
|
# @transfer => hash of file transfers to occur
|
|
7
8
|
# @options => hash with :recurse and :force
|
|
8
9
|
|
|
9
|
-
|
|
10
10
|
# extensions
|
|
11
11
|
module Modder
|
|
12
|
-
|
|
13
12
|
# rename files based on regular expressions
|
|
14
13
|
def regex(args = [])
|
|
15
14
|
match, trans = Modder.parse args
|
|
16
15
|
|
|
17
16
|
Modder.files(@options[:recurse]).each do |file|
|
|
18
|
-
new =
|
|
17
|
+
new = Modder.rename_base(file) do |base|
|
|
18
|
+
result = base.sub Regexp.new(match), trans
|
|
19
|
+
result.empty? ? base : result # no changes
|
|
20
|
+
end
|
|
19
21
|
|
|
20
|
-
next if
|
|
22
|
+
next if new.nil?
|
|
21
23
|
|
|
22
24
|
@transfer[file] = new
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
Modder.finish @transfer, @options[:force]
|
|
27
|
+
Modder.finish @transfer, force: @options[:force]
|
|
26
28
|
end
|
|
27
29
|
|
|
28
|
-
|
|
29
30
|
# change one file extension to another's type
|
|
30
31
|
def exts(args = [])
|
|
31
32
|
match, trans = Modder.parse args
|
|
@@ -38,41 +39,39 @@ module Modder
|
|
|
38
39
|
|
|
39
40
|
else # move match extension to targeted
|
|
40
41
|
Modder.files(@options[:recurse]).each do |file|
|
|
41
|
-
new = file.sub(/#{match}$/, trans)
|
|
42
|
+
new = Modder.rename_base(file) { |base| base.sub(/#{match}$/, trans) }
|
|
42
43
|
|
|
43
|
-
next if new
|
|
44
|
+
next if new.nil?
|
|
44
45
|
|
|
45
46
|
@transfer[file] = new
|
|
46
47
|
end
|
|
47
48
|
|
|
48
|
-
Modder.finish @transfer, @options[:force]
|
|
49
|
+
Modder.finish @transfer, force: @options[:force]
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
# top level wrapper for exts
|
|
53
|
-
def undercase_ext(ext =
|
|
54
|
+
def undercase_ext(ext = '')
|
|
54
55
|
transfer = Modder.undercase_ext_get ext, @options[:recurse]
|
|
55
56
|
Modder.undercase_ext_set ext, transfer, @options[:force]
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
|
|
59
|
-
|
|
60
60
|
# module methods
|
|
61
61
|
class << Modder
|
|
62
|
-
|
|
63
62
|
# return appropriate args, repairing if undefined
|
|
64
63
|
def parse(args)
|
|
65
64
|
match = args.shift
|
|
66
65
|
trans = args.shift
|
|
67
|
-
match =
|
|
68
|
-
trans =
|
|
69
|
-
|
|
66
|
+
match = '' if match.nil?
|
|
67
|
+
trans = '' if trans.nil?
|
|
68
|
+
[match, trans]
|
|
70
69
|
end
|
|
71
70
|
|
|
72
71
|
# double check transformations
|
|
73
72
|
def confirm?
|
|
74
|
-
print
|
|
75
|
-
|
|
73
|
+
print 'Are these changes ok? [yN] '
|
|
74
|
+
$stdin.gets.chomp.downcase[0] == 'y'
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
# return a list of files to examine
|
|
@@ -84,66 +83,73 @@ class << Modder
|
|
|
84
83
|
end
|
|
85
84
|
end
|
|
86
85
|
|
|
86
|
+
# apply a transformation to a file's basename only, preserving its directory.
|
|
87
|
+
# the block receives the basename and returns a new basename; returning it
|
|
88
|
+
# unchanged means no rename should happen, in which case nil is returned
|
|
89
|
+
def rename_base(file)
|
|
90
|
+
dir, base = File.split(file)
|
|
91
|
+
new_base = yield base
|
|
92
|
+
|
|
93
|
+
return nil if new_base == base
|
|
94
|
+
|
|
95
|
+
dir == '.' ? new_base : File.join(dir, new_base)
|
|
96
|
+
end
|
|
87
97
|
|
|
88
98
|
# show the status of current files
|
|
89
99
|
def status(transfer)
|
|
90
100
|
if transfer.empty?
|
|
91
|
-
puts
|
|
101
|
+
puts 'No matches found.'.yellow
|
|
92
102
|
else
|
|
93
|
-
puts
|
|
103
|
+
puts 'Planned file actions:'.green
|
|
94
104
|
transfer.each { |o, n| puts "\t#{o} -> #{n.green}" }
|
|
95
105
|
end
|
|
96
106
|
end
|
|
97
107
|
|
|
98
108
|
# rename all files
|
|
99
|
-
def execute(transfer, force
|
|
109
|
+
def execute(transfer, force: false)
|
|
100
110
|
transfer.each { |o, n| Modder.rename o, n, force }
|
|
101
111
|
end
|
|
102
112
|
|
|
103
|
-
|
|
104
113
|
# finish up execution, highest level wrapper
|
|
105
|
-
def finish(transfer, force
|
|
106
|
-
|
|
114
|
+
def finish(transfer, force: false)
|
|
107
115
|
# print changes, return if none
|
|
108
116
|
Modder.status transfer
|
|
109
117
|
return if transfer.empty?
|
|
110
118
|
|
|
111
119
|
if force || Modder.confirm?
|
|
112
|
-
Modder.execute transfer, force
|
|
113
|
-
puts
|
|
120
|
+
Modder.execute transfer, force: force
|
|
121
|
+
puts 'Modifications complete.'
|
|
114
122
|
else
|
|
115
|
-
puts
|
|
123
|
+
puts 'No modifications done.'
|
|
116
124
|
end
|
|
117
125
|
end
|
|
118
126
|
|
|
119
127
|
# try to rename a given file
|
|
120
|
-
def rename(
|
|
121
|
-
|
|
122
|
-
exist = "#{'Error:'.red} target file |#{n.green}| already exists"
|
|
123
|
-
|
|
124
|
-
# only overwrite when forced
|
|
125
|
-
if (!force) && File.exist?(n)
|
|
126
|
-
raise(exist)
|
|
127
|
-
else
|
|
128
|
-
File.rename(o, n)
|
|
129
|
-
end
|
|
128
|
+
def rename(old, new, force)
|
|
129
|
+
exist = "#{'Error:'.red} target file |#{new.green}| already exists"
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
puts e.message
|
|
134
|
-
end
|
|
135
|
-
end
|
|
131
|
+
# only overwrite when forced
|
|
132
|
+
raise(exist) if (!force) && File.exist?(new)
|
|
136
133
|
|
|
134
|
+
File.rename(old, new)
|
|
135
|
+
rescue StandardError => e
|
|
136
|
+
puts "#{'Error:'.red} could not move |#{old.red}| to |#{new.green}|"
|
|
137
|
+
puts e.message
|
|
138
|
+
end
|
|
137
139
|
|
|
138
140
|
# get all extensions to change
|
|
139
141
|
def undercase_ext_get(ext, recurse)
|
|
140
|
-
transfer =
|
|
142
|
+
transfer = {}
|
|
141
143
|
allexts = ext.empty?
|
|
142
144
|
Modder.files(recurse).each do |file|
|
|
143
|
-
|
|
145
|
+
new = Modder.rename_base(file) do |base|
|
|
146
|
+
cur_ext = allexts ? base.split('.').last : ext
|
|
147
|
+
next base if cur_ext == base # no extension to change
|
|
144
148
|
|
|
145
|
-
|
|
146
|
-
|
|
149
|
+
base.sub(/#{cur_ext}$/i, cur_ext.downcase)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
next if new.nil?
|
|
147
153
|
|
|
148
154
|
transfer[file] = new
|
|
149
155
|
end
|
|
@@ -156,7 +162,7 @@ class << Modder
|
|
|
156
162
|
# not case sensitive and therefore wont distiniguish between HI and hi.
|
|
157
163
|
# to get around this, we can set HI to HI.hash, then set HI.hash to hi
|
|
158
164
|
def undercase_ext_set(ext, transfer, force)
|
|
159
|
-
puts
|
|
165
|
+
puts 'Lowering extension: '.green + (ext.empty? ? '*' : ext)
|
|
160
166
|
|
|
161
167
|
Modder.status transfer
|
|
162
168
|
return if transfer.empty?
|
|
@@ -175,10 +181,9 @@ class << Modder
|
|
|
175
181
|
|
|
176
182
|
Modder.execute temp
|
|
177
183
|
Modder.execute final
|
|
178
|
-
puts
|
|
184
|
+
puts 'Modifications complete.'
|
|
179
185
|
else
|
|
180
|
-
puts
|
|
186
|
+
puts 'No modifications done.'
|
|
181
187
|
end
|
|
182
188
|
end
|
|
183
189
|
end
|
|
184
|
-
|
data/lib/modname/version.rb
CHANGED
data/lib/modname.rb
CHANGED
|
@@ -1,75 +1,76 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
require "modname/banner"
|
|
6
|
-
require "modname/modder"
|
|
7
|
-
require "modname/version"
|
|
3
|
+
# parse modname's command line args
|
|
8
4
|
|
|
5
|
+
require 'colored'
|
|
6
|
+
require_relative 'modname/banner'
|
|
7
|
+
require_relative 'modname/modder'
|
|
8
|
+
require_relative 'modname/version'
|
|
9
9
|
|
|
10
|
+
# Modname is a versatile file naming tool for renaming groups of files
|
|
10
11
|
module Modname
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
# defining Modname.run
|
|
13
|
+
class << self
|
|
14
|
+
def run(args) = Driver.new.run(args)
|
|
13
15
|
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
16
|
|
|
17
|
-
class
|
|
18
|
-
|
|
17
|
+
# Driver class handles command-line argument parsing and execution
|
|
18
|
+
class Driver
|
|
19
|
+
include Modder
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
attr_reader :options
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
def initialize
|
|
24
|
+
@options = { force: false, recurse: false }
|
|
25
|
+
@transfer = {}
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
# parse user arguments
|
|
29
|
+
def run(args)
|
|
30
|
+
if args.empty?
|
|
31
|
+
puts Modname::HELP_BANNER
|
|
32
|
+
else
|
|
33
|
+
opts = parse args
|
|
34
|
+
cmd = opts[:cmd]
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
case cmd
|
|
37
|
+
when 'file'
|
|
38
|
+
regex opts[:args]
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
when 'ext'
|
|
41
|
+
exts opts[:args]
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
when 'help'
|
|
44
|
+
puts Modname::V_HELP_BANNER
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
when 'version'
|
|
47
|
+
puts Modname::VERSION
|
|
48
|
+
end
|
|
47
49
|
end
|
|
48
50
|
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# parse out arguments
|
|
52
|
-
def parse(args)
|
|
53
|
-
opts = {:cmd => "file", :args => []}
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
# parse out arguments
|
|
53
|
+
def parse(args)
|
|
54
|
+
opts = { cmd: 'file', args: [] }
|
|
55
|
+
|
|
56
|
+
args.each do |opt|
|
|
57
|
+
case opt
|
|
58
|
+
when '-f'
|
|
59
|
+
@options[:force] = true
|
|
60
|
+
when '-r'
|
|
61
|
+
@options[:recurse] = true
|
|
62
|
+
when '-e', '--ext'
|
|
63
|
+
opts[:cmd] = 'ext'
|
|
64
|
+
when '-h', '--help'
|
|
65
|
+
opts[:cmd] = 'help'
|
|
66
|
+
when '-v', '--version'
|
|
67
|
+
opts[:cmd] = 'version'
|
|
68
|
+
else # command argument
|
|
69
|
+
opts[:args] << opt
|
|
70
|
+
end
|
|
69
71
|
end
|
|
70
|
-
end
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
opts
|
|
74
|
+
end
|
|
73
75
|
end
|
|
74
76
|
end
|
|
75
|
-
|
data/readme.md
CHANGED
|
@@ -3,8 +3,6 @@ modname
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
[](https://badge.fury.io/rb/modname)
|
|
6
|
-
[](https://travis-ci.org/jeremywrnr/modname)
|
|
7
|
-
[](https://codeclimate.com/github/jeremywrnr/modname)
|
|
8
6
|
[](http://jeremywrnr.com/mit-license)
|
|
9
7
|
|
|
10
8
|
|
|
@@ -54,6 +52,12 @@ examples
|
|
|
54
52
|
Note: <required> [optional]
|
|
55
53
|
```
|
|
56
54
|
|
|
55
|
+
### examples
|
|
56
|
+
|
|
57
|
+
modname -e jpeg jpg # change all jpeg file exts to jpg
|
|
58
|
+
modname -e # change all file extensions to lowercase
|
|
59
|
+
modname '(.*)' 'jeremy \1' # use grouping to prepend string
|
|
60
|
+
|
|
57
61
|
|
|
58
62
|
## development / testing
|
|
59
63
|
|
|
@@ -66,16 +70,15 @@ try running `gem install bundler`. Once that is done:
|
|
|
66
70
|
Now, we should be able to build the gem locally. This will build the local
|
|
67
71
|
modname gem and link it in your path, so you can playing around with `modname`.
|
|
68
72
|
|
|
69
|
-
|
|
73
|
+
just build
|
|
70
74
|
|
|
71
|
-
This uses `rspec` and `
|
|
75
|
+
This uses `rspec` and `just` to run a suite of unit tests. To run the suite:
|
|
72
76
|
|
|
73
|
-
|
|
77
|
+
just spec
|
|
74
78
|
|
|
75
79
|
|
|
76
80
|
## todos
|
|
77
81
|
|
|
78
|
-
- only try to rename filenames, not folders on recursive calls
|
|
79
82
|
- figure out whats up with the extension globbing
|
|
80
83
|
- apply optionally to directories as well
|
|
81
84
|
|
metadata
CHANGED
|
@@ -1,45 +1,30 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: modname
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeremy Warner
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: colored
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
18
|
version: '1.2'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: '1.2'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
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: ronn
|
|
27
|
+
name: rspec
|
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
|
44
29
|
requirements:
|
|
45
30
|
- - ">="
|
|
@@ -53,7 +38,7 @@ dependencies:
|
|
|
53
38
|
- !ruby/object:Gem::Version
|
|
54
39
|
version: '0'
|
|
55
40
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rspec
|
|
41
|
+
name: rspec-mocks
|
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
|
58
43
|
requirements:
|
|
59
44
|
- - ">="
|
|
@@ -67,19 +52,19 @@ dependencies:
|
|
|
67
52
|
- !ruby/object:Gem::Version
|
|
68
53
|
version: '0'
|
|
69
54
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
55
|
+
name: simplecov
|
|
71
56
|
requirement: !ruby/object:Gem::Requirement
|
|
72
57
|
requirements:
|
|
73
|
-
- - "
|
|
58
|
+
- - "~>"
|
|
74
59
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
60
|
+
version: 0.22.0
|
|
76
61
|
type: :development
|
|
77
62
|
prerelease: false
|
|
78
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
64
|
requirements:
|
|
80
|
-
- - "
|
|
65
|
+
- - "~>"
|
|
81
66
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
67
|
+
version: 0.22.0
|
|
83
68
|
description: easily rename groups of files with regex replacements.
|
|
84
69
|
email: jeremywrnr@gmail.com
|
|
85
70
|
executables:
|
|
@@ -97,7 +82,6 @@ homepage: http://github.com/jeremywrnr/modname
|
|
|
97
82
|
licenses:
|
|
98
83
|
- MIT
|
|
99
84
|
metadata: {}
|
|
100
|
-
post_install_message:
|
|
101
85
|
rdoc_options: []
|
|
102
86
|
require_paths:
|
|
103
87
|
- lib
|
|
@@ -112,10 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
112
96
|
- !ruby/object:Gem::Version
|
|
113
97
|
version: '0'
|
|
114
98
|
requirements: []
|
|
115
|
-
|
|
116
|
-
rubygems_version: 2.5.1
|
|
117
|
-
signing_key:
|
|
99
|
+
rubygems_version: 4.0.10
|
|
118
100
|
specification_version: 4
|
|
119
101
|
summary: a versatile file naming tool.
|
|
120
102
|
test_files: []
|
|
121
|
-
has_rdoc:
|