maprename 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +3 -1
- data/lib/maprename/app.rb +6 -3
- data/lib/maprename/cli.rb +13 -1
- data/lib/maprename/content_parser.rb +6 -0
- data/lib/maprename/file_name_parser.rb +9 -0
- data/lib/maprename/mapping_parser.rb +8 -0
- data/lib/maprename/renamer.rb +5 -5
- data/lib/maprename/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5413ed3a8f4a8882a5fcfe94b180039542076848e1f5b5fd4783900b535d21c6
|
4
|
+
data.tar.gz: 1dddd6568a6e81bcd18fe3f05351d6adc6f0d47c1fb56825d3c442c2ff45a272
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8186efbee034f623b47946737c0b10d6fe5220e34e29ef4e499cc79c3a1c5f26d9c57b3041400527d03b4f76afdad56045edf44afe63af64ac116fd22e129f38
|
7
|
+
data.tar.gz: 5f91247b950189b99f8692593ea9ab4a748f214aac6eba647aa75c015473469934bfa4f6a64e64cc92b1ea4ee9b5e09d5fc35a368da4164ba98b5d3486f330e0
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
maprename (0.1.
|
4
|
+
maprename (0.1.1)
|
5
5
|
activesupport
|
6
6
|
|
7
7
|
GEM
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
diff-lcs (1.3)
|
18
18
|
i18n (1.6.0)
|
19
19
|
concurrent-ruby (~> 1.0)
|
20
|
-
minitest (5.
|
20
|
+
minitest (5.13.0)
|
21
21
|
rake (12.3.3)
|
22
22
|
rspec (3.8.0)
|
23
23
|
rspec-core (~> 3.8.0)
|
data/README.md
CHANGED
@@ -111,12 +111,14 @@ YAML 是一种常用的配置文件格式,它以不同层次的缩进来表示
|
|
111
111
|
|
112
112
|
See also: Official YAML specification: https://yaml.org/spec/1.2/spec.html
|
113
113
|
|
114
|
-
##
|
114
|
+
## Getting involved in Regular Expression
|
115
115
|
|
116
116
|
正则表达式30分钟入门教程: https://deerchao.cn/tutorials/regex/regex.htm
|
117
117
|
|
118
118
|
文中,在学习过程中使用一个 Windows 上的正则表达式测试器来帮助理解,Mac 上可以使用这个 Web 版的正则表达式测试器: https://deerchao.cn/tools/wegester/
|
119
119
|
|
120
|
+
Learn Regex the Easy Way: https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md
|
121
|
+
|
120
122
|
## License
|
121
123
|
|
122
124
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/maprename/app.rb
CHANGED
@@ -8,15 +8,18 @@ module Maprename
|
|
8
8
|
@config = YAML.load(IO.read(config_file)).with_indifferent_access
|
9
9
|
end
|
10
10
|
|
11
|
-
def run!(
|
11
|
+
def run!(opts)
|
12
12
|
input_files.each do |file|
|
13
13
|
file = File.join(@config[:input][:directory], file)
|
14
|
-
Maprename::Renamer.new(file, @config).rename!(
|
14
|
+
Maprename::Renamer.new(file, @config).rename!(opts)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def input_files
|
19
|
-
Dir.children(@config[:input][:directory]).grep(Regexp.new(@config[:input][:pattern]))
|
19
|
+
files = Dir.children(@config[:input][:directory]).grep(Regexp.new(@config[:input][:pattern]))
|
20
|
+
debug 'Matched input files:'
|
21
|
+
debug files.map { |f| ' %s' % f}
|
22
|
+
files
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
data/lib/maprename/cli.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
require 'maprename/app'
|
3
3
|
|
4
|
+
module Kernel
|
5
|
+
def debug(msg)
|
6
|
+
puts msg if $debug
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
module Maprename
|
5
11
|
class Cli
|
6
12
|
def initialize
|
@@ -20,6 +26,11 @@ module Maprename
|
|
20
26
|
@options[:dry] = true
|
21
27
|
end
|
22
28
|
|
29
|
+
opts.on("-D", "--debug", "debug") do
|
30
|
+
@options[:debug] = true
|
31
|
+
$debug = true
|
32
|
+
end
|
33
|
+
|
23
34
|
opts.on("-h", "--help", "Prints this help") do
|
24
35
|
puts opts
|
25
36
|
exit
|
@@ -39,7 +50,8 @@ module Maprename
|
|
39
50
|
puts @raw_options
|
40
51
|
exit 1
|
41
52
|
end
|
42
|
-
|
53
|
+
debug "CLI Options: #{@options}"
|
54
|
+
Maprename::App.new(config_file).run!(@options)
|
43
55
|
end
|
44
56
|
end
|
45
57
|
end
|
@@ -7,11 +7,15 @@ module Maprename
|
|
7
7
|
@config = config
|
8
8
|
@file = file
|
9
9
|
@content = read_file_content(file)
|
10
|
+
|
11
|
+
debug " ContentParser: #@config"
|
10
12
|
end
|
11
13
|
|
12
14
|
def parse!(context)
|
13
15
|
config[:fields].each do |field_definition|
|
16
|
+
debug " ContentParser field definition: #{field_definition}"
|
14
17
|
fields = @content.match(Regexp.new(field_definition[:pattern])).to_a[1..-1]
|
18
|
+
debug " ContentParser fields: #{fields}"
|
15
19
|
eval_var_definition(fields, field_definition, context)
|
16
20
|
end
|
17
21
|
end
|
@@ -19,6 +23,8 @@ module Maprename
|
|
19
23
|
def eval_var_definition(fields, field_definition, context)
|
20
24
|
value = field_definition[:value].gsub(/\$(\d+)/, fields[$1.to_i - 1])
|
21
25
|
context.instance_eval "self.#{field_definition[:name]} = #{value.inspect}"
|
26
|
+
debug " ContentParser value: #{value}"
|
27
|
+
debug " ContentParser context: #{context}"
|
22
28
|
end
|
23
29
|
|
24
30
|
def read_file_content(file)
|
@@ -2,24 +2,33 @@ module Maprename
|
|
2
2
|
class FileNameParser
|
3
3
|
def initialize(config)
|
4
4
|
@config = config
|
5
|
+
debug " FileNameParser: #@config"
|
5
6
|
end
|
6
7
|
|
7
8
|
def parse!(subject, context)
|
9
|
+
debug " FileNameParser parse subject: #{subject}"
|
10
|
+
debug " FileNameParser parse context: #{context}"
|
8
11
|
fields = if split_method?
|
9
12
|
subject.split(Regexp.new(@config[:pattern]))
|
10
13
|
else
|
11
14
|
subject.match(Regexp.new(@config[:pattern])).to_a[1..-1]
|
12
15
|
end
|
13
16
|
|
17
|
+
debug " FileNameParser fields: #{fields}"
|
14
18
|
@config[:fields].each do |field_definition|
|
15
19
|
eval_var_definition(fields, field_definition, context)
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
23
|
def eval_var_definition(fields, field_definition, context)
|
24
|
+
debug " FileNameParser field definition: #{field_definition}"
|
25
|
+
debug " FileNameParser context: #{context}"
|
26
|
+
|
20
27
|
value = field_definition[:value].gsub(/\$(\d+)/) { fields[$1.to_i - 1] }
|
21
28
|
context.instance_eval "self.#{field_definition[:name]} = #{value.inspect}"
|
22
29
|
|
30
|
+
debug " FileNameParser value: #{value}"
|
31
|
+
debug " FileNameParser context: #{context}"
|
23
32
|
if parse_config = field_definition[:name_parse]
|
24
33
|
Maprename::FileNameParser.new(parse_config).parse!(context.instance_eval(field_definition[:name]), context)
|
25
34
|
end
|
@@ -4,15 +4,20 @@ module Maprename
|
|
4
4
|
attr_accessor :config
|
5
5
|
|
6
6
|
def initialize(config)
|
7
|
+
debug " FileNameParser: #@config"
|
7
8
|
@config = config
|
8
9
|
@content = build_content
|
9
10
|
end
|
10
11
|
|
11
12
|
def parse!(context)
|
12
13
|
@config[:select].each do |field_definition|
|
14
|
+
debug " MappingParser field definition: #{field_definition}"
|
13
15
|
keyword_value = context.instance_eval(field_definition[:keyword_value])
|
16
|
+
debug " MappingParser keyword value: #{keyword_value}"
|
14
17
|
row = @content.find { |row| row[field_definition[:keyword_column]] == keyword_value }
|
18
|
+
debug " MappingParser selected row: #{row}"
|
15
19
|
context.instance_eval("self.%s = %s" % [field_definition[:name], row[field_definition[:select_column]].inspect])
|
20
|
+
debug " MappingParser context: #{context}"
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
@@ -20,6 +25,7 @@ module Maprename
|
|
20
25
|
encoding = config[:encoding] || 'UTF-8'
|
21
26
|
separator = config[:column_separator] || "\t"
|
22
27
|
content = IO.readlines(config[:file], encoding: encoding).map(&:chomp)
|
28
|
+
debug " MappingParser total mapping lines: #{content.size}"
|
23
29
|
if config[:first_line_as_column_defination]
|
24
30
|
config[:columns] = content.first.split(separator).each_with_index.map do |(c, i)|
|
25
31
|
{
|
@@ -29,6 +35,8 @@ module Maprename
|
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
38
|
+
debug " MappingParser columns: #{config[:columns]}"
|
39
|
+
|
32
40
|
content.map do |raw_row|
|
33
41
|
fields = raw_row.split(separator)
|
34
42
|
config[:columns].each_with_object({}) do |column, result|
|
data/lib/maprename/renamer.rb
CHANGED
@@ -10,7 +10,7 @@ module Maprename
|
|
10
10
|
@context = OpenStruct.new
|
11
11
|
@file = file
|
12
12
|
@config = config
|
13
|
-
|
13
|
+
debug "Process file: #@file"
|
14
14
|
parse_config!
|
15
15
|
end
|
16
16
|
|
@@ -29,10 +29,10 @@ module Maprename
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def rename!(dry)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
puts "mkdir -p %s" % File.dirname(destination)
|
33
|
+
puts "cp %s %s" % [source, destination]
|
34
|
+
|
35
|
+
unless dry
|
36
36
|
FileUtils.mkdir_p(File.dirname(destination))
|
37
37
|
FileUtils.copy_file(source, destination)
|
38
38
|
end
|
data/lib/maprename/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maprename
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liu Xiang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -73,8 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
requirements: []
|
76
|
-
|
77
|
-
rubygems_version: 2.7.8
|
76
|
+
rubygems_version: 3.1.2
|
78
77
|
signing_key:
|
79
78
|
specification_version: 4
|
80
79
|
summary: Simple file rename utils
|