filter_rename 1.1.0 → 1.2.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.
data/lib/filter_rename.rb CHANGED
@@ -1,30 +1,35 @@
1
- require 'fileutils'
2
- require 'filter_rename/version'
3
- require 'filter_rename/config'
4
- require 'filter_rename/filter_base'
5
- require 'filter_rename/filters'
6
- require 'filter_rename/filter_pipe'
7
- require 'filter_rename/filename'
8
- require 'filter_rename/filename_factory'
9
- require 'filter_rename/utils'
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "filter_rename/version"
5
+ require "filter_rename/config"
6
+ require "filter_rename/filter_base"
7
+ require "filter_rename/filters"
8
+ require "filter_rename/filter_pipe"
9
+ require "filter_rename/filename"
10
+ require "filter_rename/filename_factory"
11
+ require "filter_rename/utils"
10
12
 
11
13
  module FilterRename
12
-
14
+ #
15
+ # Facade class for all the operations.
16
+ #
13
17
  class Builder
14
-
15
18
  def initialize(options)
16
19
  @cfg = Config.new(options.global)
17
20
  @filters = FilterList.new(options.filters)
18
21
  @files = options.files
19
22
  @show_macro = options.show_macro
23
+ @help_config = options.help_config
20
24
  end
21
25
 
22
- def preview
26
+ def diff
27
+ expand_files!
23
28
  raise MissingFiles if @files.empty?
24
29
 
25
30
  @filters.expand_macros!(@cfg.macro)
26
31
 
27
- Messages.label "Preview:"
32
+ Messages.label "Diff:"
28
33
 
29
34
  @files.each do |src|
30
35
  fp = FilterPipe.new(src, @filters, @cfg).apply
@@ -33,13 +38,16 @@ module FilterRename
33
38
  end
34
39
 
35
40
  def apply
41
+ expand_files!
36
42
  raise MissingFiles if @files.empty?
37
43
 
38
44
  @filters.expand_macros!(@cfg.macro)
45
+ renamed = 0
46
+ skipped = 0
47
+ errors = 0
39
48
 
40
49
  Messages.label "Apply:"
41
50
  @files.each do |src|
42
-
43
51
  fp = FilterPipe.new(src, @filters, @cfg).apply
44
52
 
45
53
  if fp.changed?
@@ -47,94 +55,149 @@ module FilterRename
47
55
 
48
56
  if old_data[:full_filename]
49
57
  Messages.renamed!(old_data, fp.dest)
50
- Messages.changed_tags(fp, old_data, false) if fp.source.class.has_writable_tags
51
- elsif fp.source.class.has_writable_tags
58
+ Messages.changed_tags(fp, old_data, header: false) if fp.source.class.writable_tags?
59
+ renamed += 1
60
+ elsif fp.source.class.writable_tags?
52
61
  Messages.changed_tags(fp, old_data)
62
+ renamed += 1
53
63
  else
54
64
  Messages.file_exists(fp)
55
65
  Messages.file_hash(fp, @cfg.global.hash_type) if @cfg.global.hash_if_exists
66
+ errors += 1
56
67
  end
57
-
58
68
  else
59
69
  Messages.skipping(fp)
70
+ skipped += 1
60
71
  end
61
72
  end
73
+ Messages.renaming_summary(renamed, skipped, errors)
62
74
  end
63
75
 
64
76
  def globals
65
- Messages.label 'Global configurations:'
77
+ Messages.label "Global configurations:"
66
78
  Messages.config_list @cfg.global
67
79
  end
68
80
 
69
81
  def configs
70
- Messages.label 'Filter\'s configurations:'
82
+ Messages.label "Filter's configurations:"
71
83
  Messages.config_list @cfg.filter
72
84
  end
73
85
 
74
86
  def words
75
- Messages.label 'Groups and subgroups of words available for translation:'
87
+ Messages.label "Groups and subgroups of words available for translation:"
76
88
  Messages.config_multilist @cfg.words
77
89
  end
78
90
 
79
91
  def dry_run
92
+ expand_files!
80
93
  raise MissingFiles if @files.empty?
81
94
 
82
95
  @filters.expand_macros!(@cfg.macro)
83
96
  cache = {}
97
+ renamed = 0
98
+ skipped = 0
99
+ errors = 0
84
100
 
85
101
  Messages.label "Dry Run:"
86
102
  @files.each do |src|
87
-
88
103
  fp = FilterPipe.new(src, @filters, @cfg).apply
89
104
 
90
105
  if fp.unchanged?
91
106
  Messages.skipping(fp)
92
- elsif (cache.keys.include?(fp.dest.full_filename) || fp.dest.exists?)
107
+ skipped += 1
108
+ elsif cache.keys.include?(fp.dest.full_filename) || fp.dest.exists?
93
109
  if fp.source.full_filename == fp.dest.full_filename
94
110
  Messages.changed_tags(fp)
95
111
  else
96
112
  Messages.file_exists(fp)
97
113
  Messages.file_hash(fp, @cfg.global.hash_type, cache[fp.dest.full_filename]) if @cfg.global.hash_if_exists
114
+ errors += 1
98
115
  end
99
116
  else
100
117
  Messages.renamed(fp)
101
- Messages.changed_tags(fp, {}, false) if fp.source.class.has_writable_tags
118
+ Messages.changed_tags(fp, {}, header: false) if fp.source.class.writable_tags?
102
119
  cache[fp.dest.full_filename] = fp.dest
120
+ renamed += 1
103
121
  end
104
122
  end
123
+ Messages.renaming_summary(renamed, skipped, errors)
105
124
  end
106
125
 
107
126
  def targets
127
+ expand_files!
108
128
  raise MissingFiles if @files.empty?
109
129
 
110
- Messages.label 'Targets:'
130
+ view = @cfg.global.inline_targets ? :inline_targets : :column_targets
131
+ Messages.label "Targets:"
111
132
  @files.each do |src|
133
+ fname = FilenameFactory.create(src, @cfg.global)
134
+
135
+ Messages.multi fname.full_filename
136
+ Messages.send(view, fname)
137
+ end
138
+ end
139
+
140
+ def values
141
+ expand_files!
142
+ raise MissingFiles if @files.empty?
112
143
 
144
+ view = @cfg.global.inline_targets ? :inline_target_values : :column_target_values
145
+ Messages.label "Target values:"
146
+ @files.each do |src|
113
147
  fname = FilenameFactory.create(src, @cfg.global)
114
148
 
115
149
  Messages.multi fname.full_filename
116
- Messages.send(@cfg.global.targets == :short ? :short_targets : :long_targets, fname)
150
+ Messages.send(view, fname)
117
151
  end
118
152
  end
119
153
 
120
154
  def macros
121
- Messages.label 'Macros:'
122
- Messages.list @cfg.macro.get_macros
155
+ Messages.label "Macros:"
156
+ Messages.list @cfg.macro.macros
123
157
  end
124
158
 
125
159
  def show_macro
126
160
  Messages.label "Macro: #{@show_macro}"
127
161
  macro = @cfg.macro.get_macro(@show_macro)
128
- if macro.class == Array
162
+ if macro.instance_of?(Array)
129
163
  macro.each do |k|
130
- Messages.item k.keys.first.to_s + ': ' + k.values.first.map { |x| '"' + x.to_s.green + '"' }.join(',')
164
+ Messages.item "#{k.keys.first}: " + k.values.first.map { |x| "\"#{x.to_s.green}\"" }.join(",")
131
165
  end
132
- elsif macro.class == Hash
166
+ elsif macro.instance_of?(Hash)
133
167
  macro.each do |k, v|
134
- Messages.item k.to_s + ': ' + v.map { |x| '"' + x.to_s.green + '"' }.join(', ')
168
+ Messages.item "#{k}: " + v.map { |x| "\"#{x.to_s.green}\"" }.join(", ")
135
169
  end
136
170
  end
137
171
  end
138
- end
139
172
 
173
+ def help_config
174
+ name = @help_config.downcase.gsub("-", "_").gsub(/^--/, "")
175
+
176
+ if name =~ /^g_/
177
+ name = name.gsub(/^g_/, "")
178
+ @help_config = GlobalConfig::OPTIONS[name.to_sym]
179
+ elsif @help_config =~ /^f_/
180
+ name = name.gsub(/^f_/, "")
181
+ @help_config = FilterConfig::OPTIONS[name.to_sym]
182
+ elsif FilterConfig::OPTIONS.key?(name.to_sym)
183
+ @help_config = FilterConfig::OPTIONS[name.to_sym]
184
+ elsif GlobalConfig::OPTIONS.key?(name.to_sym)
185
+ @help_config = GlobalConfig::OPTIONS[name.to_sym]
186
+ else
187
+ raise InvalidOption, name
188
+ end
189
+ Messages.help_option name, @help_config
190
+ end
191
+
192
+ private
193
+
194
+ def expand_files!
195
+ @files = @files.map do |f|
196
+ f = File.expand_path(f.chomp)
197
+ raise FileNotFound, f if @cfg.global.check_source && !File.exist?(f)
198
+
199
+ f
200
+ end
201
+ end
202
+ end
140
203
  end
@@ -6,9 +6,13 @@
6
6
  :date_format: '%Y-%m-%d'
7
7
  :counter_length: 3
8
8
  :counter_start: 0
9
- :targets: :short
10
- :pdf_metadata: false
11
- :image_metadata: false
9
+ :inline_targets: true
10
+ :pdf_metadata: true
11
+ :image_metadata: true
12
+ :audio_metadata: true
13
+ :mimemagic: true
14
+ :essential_tags: false
15
+ :check_source: true
12
16
  :filter:
13
17
  :lang: :en
14
18
  :word_separator: " "
@@ -17,7 +21,7 @@
17
21
  :target: :name
18
22
  :ignore_case: true
19
23
  :grep: '.*'
20
- :grep_on: :source
24
+ :grep_on_dest: false
21
25
  :grep_exclude: false
22
26
  # full_filename, :full_path, :filename, <target>
23
27
  :grep_target: :full_filename
@@ -31,6 +35,12 @@
31
35
  :fr: ['Salut']
32
36
  :es: ['Hola']
33
37
  :pt: ['Olá']
38
+ :months:
39
+ :short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
40
+ :long: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
41
+ :days:
42
+ :short: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
43
+ :long: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
34
44
  :short_months:
35
45
  :en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
36
46
  :it: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic']
@@ -74,32 +84,32 @@
74
84
  :squeeze:
75
85
  - ' '
76
86
  -
77
- :translate_words:
87
+ :translate:
78
88
  - :long_months
79
89
  - :it
80
90
  - :en
81
91
  -
82
- :translate_words:
92
+ :translate:
83
93
  - :long_months
84
94
  - :es
85
95
  - :en
86
96
  -
87
- :translate_words:
97
+ :translate:
88
98
  - :long_months
89
99
  - :fr
90
100
  - :en
91
101
  -
92
- :translate_words:
102
+ :translate:
93
103
  - :long_months
94
104
  - :de
95
105
  - :en
96
106
  -
97
- :translate_words:
107
+ :translate:
98
108
  - :long_months
99
109
  - :hr
100
110
  - :en
101
111
  -
102
- :translate_words:
112
+ :translate:
103
113
  - :long_months
104
114
  - :pt
105
115
  - :en
metadata CHANGED
@@ -1,59 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filter_rename
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Mucciante
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2022-09-23 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
13
+ name: differ
29
14
  requirement: !ruby/object:Gem::Requirement
30
15
  requirements:
31
- - - "~>"
16
+ - - ">="
32
17
  - !ruby/object:Gem::Version
33
- version: '13.0'
34
- type: :development
18
+ version: '0'
19
+ type: :runtime
35
20
  prerelease: false
36
21
  version_requirements: !ruby/object:Gem::Requirement
37
22
  requirements:
38
- - - "~>"
23
+ - - ">="
39
24
  - !ruby/object:Gem::Version
40
- version: '13.0'
25
+ version: '0'
41
26
  - !ruby/object:Gem::Dependency
42
- name: rspec
27
+ name: exiv2
43
28
  requirement: !ruby/object:Gem::Requirement
44
29
  requirements:
45
- - - "~>"
30
+ - - ">="
46
31
  - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
32
+ version: '0'
33
+ type: :runtime
49
34
  prerelease: false
50
35
  version_requirements: !ruby/object:Gem::Requirement
51
36
  requirements:
52
- - - "~>"
37
+ - - ">="
53
38
  - !ruby/object:Gem::Version
54
- version: '3.0'
39
+ version: '0'
55
40
  - !ruby/object:Gem::Dependency
56
- name: mp3info
41
+ name: fastimage
57
42
  requirement: !ruby/object:Gem::Requirement
58
43
  requirements:
59
44
  - - ">="
@@ -67,7 +52,7 @@ dependencies:
67
52
  - !ruby/object:Gem::Version
68
53
  version: '0'
69
54
  - !ruby/object:Gem::Dependency
70
- name: mimemagic
55
+ name: keisan
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - ">="
@@ -81,7 +66,7 @@ dependencies:
81
66
  - !ruby/object:Gem::Version
82
67
  version: '0'
83
68
  - !ruby/object:Gem::Dependency
84
- name: differ
69
+ name: mimemagic
85
70
  requirement: !ruby/object:Gem::Requirement
86
71
  requirements:
87
72
  - - ">="
@@ -95,7 +80,7 @@ dependencies:
95
80
  - !ruby/object:Gem::Version
96
81
  version: '0'
97
82
  - !ruby/object:Gem::Dependency
98
- name: exiv2
83
+ name: mp3info
99
84
  requirement: !ruby/object:Gem::Requirement
100
85
  requirements:
101
86
  - - ">="
@@ -109,7 +94,7 @@ dependencies:
109
94
  - !ruby/object:Gem::Version
110
95
  version: '0'
111
96
  - !ruby/object:Gem::Dependency
112
- name: fastimage
97
+ name: pdf-reader
113
98
  requirement: !ruby/object:Gem::Requirement
114
99
  requirements:
115
100
  - - ">="
@@ -123,7 +108,7 @@ dependencies:
123
108
  - !ruby/object:Gem::Version
124
109
  version: '0'
125
110
  - !ruby/object:Gem::Dependency
126
- name: pdf-reader
111
+ name: taglib-ruby
127
112
  requirement: !ruby/object:Gem::Requirement
128
113
  requirements:
129
114
  - - ">="
@@ -147,8 +132,11 @@ extensions: []
147
132
  extra_rdoc_files: []
148
133
  files:
149
134
  - ".github/FUNDING.yml"
135
+ - ".github/workflows/gem-push.yml"
136
+ - ".github/workflows/main.yml"
150
137
  - ".gitignore"
151
138
  - ".rspec"
139
+ - ".rubocop.yml"
152
140
  - ".travis.yml"
153
141
  - CODE_OF_CONDUCT.md
154
142
  - Gemfile
@@ -165,6 +153,7 @@ files:
165
153
  - lib/filter_rename/config.rb
166
154
  - lib/filter_rename/filename.rb
167
155
  - lib/filter_rename/filename_factory.rb
156
+ - lib/filter_rename/filetype/audio_filename.rb
168
157
  - lib/filter_rename/filetype/image_filename.rb
169
158
  - lib/filter_rename/filetype/mp3_filename.rb
170
159
  - lib/filter_rename/filetype/pdf_filename.rb
@@ -178,12 +167,11 @@ licenses:
178
167
  - GPL-3.0
179
168
  metadata:
180
169
  bug_tracker_uri: https://github.com/fabiomux/filter_rename/issues
181
- changelog_uri: https://freeaptitude.altervista.org/projects/filter-rename.htm#changelog
182
- documentation_uri: https://www.rubydoc.info/gems/filter_rename/1.1.0
183
170
  homepage_uri: https://freeaptitude.altervista.org/projects/filter-rename.html
184
171
  source_code_uri: https://github.com/fabiomux/filter_rename
172
+ changelog_uri: https://freeaptitude.altervista.org/projects/filter-rename.html#changelog
185
173
  wiki_uri: https://github.com/fabiomux/filter_rename/wiki
186
- post_install_message:
174
+ rubygems_mfa_required: 'true'
187
175
  rdoc_options: []
188
176
  require_paths:
189
177
  - lib
@@ -191,15 +179,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
179
  requirements:
192
180
  - - ">="
193
181
  - !ruby/object:Gem::Version
194
- version: '0'
182
+ version: 2.5.0
195
183
  required_rubygems_version: !ruby/object:Gem::Requirement
196
184
  requirements:
197
185
  - - ">="
198
186
  - !ruby/object:Gem::Version
199
187
  version: '0'
200
188
  requirements: []
201
- rubygems_version: 3.2.19
202
- signing_key:
189
+ rubygems_version: 3.6.7
203
190
  specification_version: 4
204
191
  summary: File renaming tool which make use of a chain of actions called filters.
205
192
  test_files: []