ebook_renamer 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e81cd36a6c7c8dd36c8858702d4269a051d106e9
4
- data.tar.gz: 6d1706d7ecf13af39210f716424565132400efce
3
+ metadata.gz: 68a848c366158d77e6fc15ba40102278560965d3
4
+ data.tar.gz: 9708d227f746c9daa2c26cfa702ad4edd76b0847
5
5
  SHA512:
6
- metadata.gz: 6e5c631df798d255aee028512dbaaefd2e5a3ca5c169dab884fc96d00392351b953ab6894a69532eab21739101070de03ab3fbecc9cbc67ca7e5f753aaab88d5
7
- data.tar.gz: 5af716125dac870987b1392a0670c7c635a2f420dcb74f8c45d1eb807804b0bf2183f3efa947630a6bfd7f0aab3120516b02eb596f098755f3a191840862648a
6
+ metadata.gz: cd971e1f1c50c8d34ee42d39b6bef1b1678da72bdf251690909ced6392c41cb82ee69a92682e514799bfcb3ee5e1f7ed5ea673e71bee314f028ffb8aa84fd350
7
+ data.tar.gz: 8e212411f15a37cdf8f10fe5ed5a612457eafcc7c7c05e607fb969999f03e37be046f60705d89d93b62de7edff9cda2b7abf7d0a46dd2a8550eacc3cc574747a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ### Changelog
2
2
 
3
+ #### 0.1.10
4
+
5
+ - Code refactoring
6
+
3
7
  #### 0.1.9
4
8
 
5
9
  - Skip the rename if the the title is the same as the input file name.
@@ -53,22 +53,19 @@ Rename multiple ebook files (pdf,epub,mobi) from a given directory
53
53
  private
54
54
 
55
55
  # Rename the file from the given directory
56
- # Using the with the argurment options as follow
57
- #
58
- # :base_dir - the base directory
59
- # :recursive - perform the rename recursively (true|false)
60
- # :commit - make the rename permanent (true|false)
61
- # :exts - list of extensions to be processed default to ['epub,mobi,pdf']
62
56
  #
63
57
  # @param args [Hash<Symbol, Object>] options argument
58
+ # possible options
59
+ # :base_dir - the base directory
60
+ # :recursive - perform the rename recursively (true|false)
61
+ # :commit - make the rename permanent (true|false)
62
+ # :exts - list of extensions to be processed default to ['epub,mobi,pdf']
64
63
  def execute(options = {})
65
- # meta_binary = "ebook-meta"
66
64
  input_files = CodeLister.files(options)
67
65
  if input_files.empty?
68
66
  puts "No file found for your option: #{options}"
69
67
  return
70
68
  end
71
-
72
69
  unless options[:commit]
73
70
  puts "-----------------------------------------------------------"
74
71
  puts " FYI: no changes as this is a dry-run, please use --commit "
@@ -77,35 +74,48 @@ Rename multiple ebook files (pdf,epub,mobi) from a given directory
77
74
 
78
75
  FileUtils.chdir(options[:base_dir])
79
76
  input_files.each_with_index do |file, index|
80
- extension = File.extname(file)
77
+ input_file = File.expand_path(file)
81
78
  begin
82
- meta_binary = "ebook-meta"
83
- metadata = meta(file, meta_binary)
84
- hash = meta_to_hash(metadata)
85
-
86
- # Skip the process, if we don't have the title
87
- if hash["title"] == File.basename(file, ".*")
88
- puts "#{index + 1} of #{input_files.size} skip name: #{File.expand_path(file)} [no title found]"
89
- next
90
- end
91
-
92
- old_name = File.expand_path(file)
93
- full_name = formatted_name(hash, sep_char: " by ")
94
- new_name = "#{File.dirname(file)}/#{sanitize_filename(full_name, options[:sep_string])}#{extension}"
95
- new_name = File.expand_path(new_name)
96
-
97
- if old_name != new_name
98
- puts "#{index + 1} of #{input_files.size} old name : #{old_name}"
99
- puts "#{index + 1} of #{input_files.size} new name : #{new_name}"
100
- FileUtils.mv(old_name, new_name) if options[:commit]
101
- else
102
- puts "#{index + 1} of #{input_files.size} skip name: #{old_name}"
103
- end
79
+ metadata = meta(input_file, "ebook-meta")
80
+ meta_hash = meta_to_hash(metadata)
81
+ compare_and_rename(input_file, meta_hash, options, index, input_files.size)
104
82
  rescue RuntimeError => e
105
83
  puts e.backtrace
106
84
  next
107
85
  end
108
86
  end
109
87
  end
88
+
89
+ def compare_and_rename(input_file, meta_hash, options, index, total)
90
+ if identical_name?(input_file, meta_hash)
91
+ puts "#{index + 1} of #{total} skip name: #{input_file} [no title found or file is identical]"
92
+ return
93
+ end
94
+ output_file = compute_name(input_file, meta_hash, options)
95
+ if input_file != output_file
96
+ puts "#{index + 1} of #{total} old name : #{input_file}"
97
+ puts "#{index + 1} of #{total} new name : #{output_file}"
98
+ FileUtils.mv(input_file, output_file) if options[:commit]
99
+ else
100
+ puts "#{index + 1} of #{total} skip name: #{input_file} [file is identical]"
101
+ end
102
+ end
103
+
104
+ # Check and return if we have the title or
105
+ # if the title is the same as the input name
106
+ def identical_name?(input_file, meta_hash = {})
107
+ meta_hash["title"] == File.basename(input_file, ".*")
108
+ end
109
+
110
+ # Compute the new name from metadata
111
+ #
112
+ # @todo make use of filename cleaner gem
113
+ def compute_name(input_file, meta_hash, options)
114
+ extension = File.extname(input_file)
115
+ name = formatted_name(meta_hash, sep_char: " by ")
116
+ name = sanitize_filename(name, options[:sep_string])
117
+ name = "#{File.dirname(input_file)}/#{name}#{extension}"
118
+ File.expand_path(name)
119
+ end
110
120
  end
111
121
  end
@@ -1,3 +1,3 @@
1
1
  module EbookRenamer
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
metadata CHANGED
@@ -1,209 +1,209 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebook_renamer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burin Choomnuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-19 00:00:00.000000000 Z
11
+ date: 2014-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.19'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.19'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: agile_utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: code_lister
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: awesome_print
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '1.2'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: minitest-spec-context
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.0.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.0.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: guard-minitest
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: '2.2'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: minitest
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: '5.3'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '5.3'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: guard
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: '2.6'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '2.6'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pry
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ~>
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0.9'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ~>
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.9'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: gem-ctags
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ~>
171
+ - - "~>"
172
172
  - !ruby/object:Gem::Version
173
173
  version: '1.0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ~>
178
+ - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '1.0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: yard
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ~>
185
+ - - "~>"
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0.8'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ~>
192
+ - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0.8'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: rubocop
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ~>
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0.20'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ~>
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0.20'
209
209
  description: Bulk rename of ebook files (pdf, epub, mobi) based on embedded metadata
@@ -214,20 +214,20 @@ executables:
214
214
  extensions: []
215
215
  extra_rdoc_files: []
216
216
  files:
217
+ - ".gitignore"
218
+ - ".rubocop.yml"
219
+ - CHANGELOG.md
220
+ - Gemfile
221
+ - LICENSE
222
+ - README.md
223
+ - Rakefile
217
224
  - bin/ebook_renamer
225
+ - ebook_renamer.gemspec
226
+ - lib/ebook_renamer.rb
218
227
  - lib/ebook_renamer/cli.rb
219
228
  - lib/ebook_renamer/logger.rb
220
229
  - lib/ebook_renamer/utils.rb
221
230
  - lib/ebook_renamer/version.rb
222
- - lib/ebook_renamer.rb
223
- - Gemfile
224
- - Rakefile
225
- - ebook_renamer.gemspec
226
- - README.md
227
- - CHANGELOG.md
228
- - LICENSE
229
- - .rubocop.yml
230
- - .gitignore
231
231
  homepage: https://github.com/agilecreativity/ebook_renamer
232
232
  licenses:
233
233
  - MIT
@@ -238,17 +238,17 @@ require_paths:
238
238
  - lib
239
239
  required_ruby_version: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - '>='
241
+ - - ">="
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
244
  required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  requirements:
246
- - - '>='
246
+ - - ">="
247
247
  - !ruby/object:Gem::Version
248
248
  version: '0'
249
249
  requirements: []
250
250
  rubyforge_project:
251
- rubygems_version: 2.0.14
251
+ rubygems_version: 2.2.2
252
252
  signing_key:
253
253
  specification_version: 4
254
254
  summary: Rename multiple ebook files (pdf, epub, mobi) based on existing metadata