pdfmd 2.1.6 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/bin/pdfmd +3 -1
- data/lib/pdfmd/explain.rb +1 -0
- data/lib/pdfmd/explain.typo.md +6 -0
- data/lib/pdfmd/long_desc.pdfmdsort.txt +6 -0
- data/lib/pdfmd/pdfmdsort.rb +57 -8
- data/pdfmd.gemspec +1 -0
- metadata +25 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58d5e2cab3403b63a10160c42611014d6cac1ee3
|
4
|
+
data.tar.gz: ee23d47ddf7e0448f1bf67fba2f4e61847af16a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 117cac8d9bbdb9d1e38a4275fe2acaf596f8ef165008516f996506a5acfc9cc9268185512bcf89476bca474606fd7d3f31eea0120e82f644b4456896fa5c86a3
|
7
|
+
data.tar.gz: 8b9f96ebdcf351488006551a2d5727366ba46b86635b8d9b7b160919332d623b354727ff4dc784e2ba4393ea69d3beb9a128ca078d5795eace03d2df2fb98365
|
data/CHANGELOG.md
CHANGED
data/bin/pdfmd
CHANGED
@@ -7,7 +7,7 @@ require "fileutils"
|
|
7
7
|
require "i18n"
|
8
8
|
require 'pathname'
|
9
9
|
|
10
|
-
VERSION = '2.
|
10
|
+
VERSION = '2.2.0'
|
11
11
|
NAME = 'pdfmd'
|
12
12
|
|
13
13
|
#
|
@@ -207,6 +207,7 @@ method_option :copy, :aliases => '-c', :required => false, :type => :boolean, :d
|
|
207
207
|
method_option :interactive, :aliases => '-i', :required => false, :type => :boolean, :desc => 'Enable/Disable interactive sorting'
|
208
208
|
method_option :overwrite, :alises => '-o', :required => false, :type => :boolean, :desc => 'Enable/Disable file overwrite.', :lazy_default => true
|
209
209
|
method_option :dryrun, :aliases => '-n', :required => false, :type => :boolean, :desc => 'Run without changing something'
|
210
|
+
method_option :typo, :aliases => '-t', :required => false, :type => :boolean, :desc => 'Try to find typos before sorting into folders.', :lazy_default => true
|
210
211
|
def sort(*input)
|
211
212
|
|
212
213
|
input.each do |file|
|
@@ -218,6 +219,7 @@ def sort(*input)
|
|
218
219
|
pdfdoc.destination = pdfdoc.determineValidSetting(options[:destination], 'sort:destination')
|
219
220
|
pdfdoc.overwrite = pdfdoc.determineValidSetting(options[:overwrite], 'sort:overwrite')
|
220
221
|
pdfdoc.dryrun = pdfdoc.determineValidSetting(options[:dryrun], 'sort:dryrun')
|
222
|
+
pdfdoc.typo = pdfdoc.determineValidSetting(options[:typo], 'sort:typo')
|
221
223
|
pdfdoc.sort
|
222
224
|
|
223
225
|
else
|
data/lib/pdfmd/explain.rb
CHANGED
@@ -0,0 +1,6 @@
|
|
1
|
+
[typo]
|
2
|
+
Parameter for the command 'sort'.
|
3
|
+
If parameter is set, a warning will appear during the sorting process when a target directory is already present, which is similar to the new one that shall be created.
|
4
|
+
This usually indicates a typo in the author field, which then is reflected in the naming of the sub-directory in the sorting target.
|
5
|
+
The user then can either decide to continue or abort the sorting process.
|
6
|
+
|
@@ -54,6 +54,12 @@ If set to 'true' the command will overwrite any existing file at the target dest
|
|
54
54
|
|
55
55
|
|
56
56
|
|
57
|
+
--typo, -t
|
58
|
+
|
59
|
+
If set to 'true' (or set at all) similar sub-directories in the sorting target directory will be reported before a new folder is being created. Similar sub-directories can be caused by typos in the author field for the document.
|
60
|
+
|
61
|
+
|
62
|
+
|
57
63
|
=== Replacement rules
|
58
64
|
|
59
65
|
The subdirectories for the documents are generated from the values in the
|
data/lib/pdfmd/pdfmdsort.rb
CHANGED
@@ -3,16 +3,20 @@
|
|
3
3
|
# TODO: Author values with a slave One/two should be sorted into one/two/yyyymmdd-one_to-xxx.pdf
|
4
4
|
class Pdfmdsort < Pdfmd
|
5
5
|
|
6
|
-
|
6
|
+
require 'fuzzystringmatch'
|
7
|
+
|
8
|
+
attr_accessor :filename, :dryrun, :copy, :interactive, :destination, :overwrite, :typo
|
7
9
|
|
8
10
|
# Initialize
|
9
11
|
def initialize(input)
|
10
12
|
super input
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@
|
15
|
-
@
|
13
|
+
@stringSimBorder = 0.8 # Defines the value of the typo check
|
14
|
+
@destination = '.'
|
15
|
+
@interactive = false
|
16
|
+
@copy = false
|
17
|
+
@dryrun = false
|
18
|
+
@overwrite = false
|
19
|
+
@typo = false
|
16
20
|
end
|
17
21
|
|
18
22
|
|
@@ -44,6 +48,30 @@ class Pdfmdsort < Pdfmd
|
|
44
48
|
I18n.transliterate(author).downcase # Normalising
|
45
49
|
end
|
46
50
|
|
51
|
+
# Method compares string from 'targetdir' with all subfolders in the targetdir
|
52
|
+
# in order to find similarities in writing.
|
53
|
+
def findSimilarTargetdir( targetdir )
|
54
|
+
|
55
|
+
self.log('debug', "Running method 'findSimilarTarget' with parameter '#{targetdir}'.")
|
56
|
+
|
57
|
+
fuzzy = FuzzyStringMatch::JaroWinkler.create( :native )
|
58
|
+
returnValue = false
|
59
|
+
|
60
|
+
# Get all subfolders
|
61
|
+
subDirectories = Dir[@destination + '/*']
|
62
|
+
subDirectories.each do |fullPathFolder|
|
63
|
+
stringSimilarity = fuzzy.getDistance(
|
64
|
+
fullPathFolder.gsub(@destination + '/', ''),
|
65
|
+
targetdir.gsub(@destination + '/', '')
|
66
|
+
)
|
67
|
+
if stringSimilarity > @stringSimBorder
|
68
|
+
self.log('debug', "findSimilarTargetdir: Found String value #{stringSimilarity.to_s} for target '#{fullPathFolder}'.")
|
69
|
+
returnValue = fullPathFolder
|
70
|
+
end
|
71
|
+
end
|
72
|
+
returnValue
|
73
|
+
end
|
74
|
+
|
47
75
|
|
48
76
|
#
|
49
77
|
# Sort the file away
|
@@ -69,13 +97,34 @@ class Pdfmdsort < Pdfmd
|
|
69
97
|
targetdir = @destination.chomp + '/' + author
|
70
98
|
targetfile = targetdir + '/' + Pathname.new(@filename).basename.to_s
|
71
99
|
|
72
|
-
# Create the target
|
100
|
+
# Create the target directory, if it does not exist yet.
|
73
101
|
if !File.exists? targetdir
|
102
|
+
|
103
|
+
# Check for similiar directory names which might indicate a typo in the
|
104
|
+
# current directory name.
|
105
|
+
if @typo and foundDir = self.findSimilarTargetdir(targetdir)
|
106
|
+
|
107
|
+
self.log('info', "Similar target found ('" + foundDir + "'). Request user input.")
|
108
|
+
puts 'Similar target directory detected:'
|
109
|
+
puts 'Found : ' + foundDir
|
110
|
+
puts 'Target: ' + targetdir
|
111
|
+
while answer = readUserInput('Abort? ([y]/n): ')
|
112
|
+
if answer.match(/(y|yes|j|ja|^$)/i)
|
113
|
+
self.log('info','User chose to abort sorting.')
|
114
|
+
puts 'Abort.'
|
115
|
+
exit 0
|
116
|
+
elsif answer.match(/(n|no)/i)
|
117
|
+
self.log('info', 'User chose to continue sorting.')
|
118
|
+
break
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
74
123
|
if @dryrun
|
75
124
|
self.log('info', "Dryrun: Created Directory '#{targetdir}'.")
|
76
125
|
else
|
77
126
|
self.log('info', "Created directory '#{targetdir}'.")
|
78
|
-
puts targetdir
|
127
|
+
puts 'Created: ' + targetdir
|
79
128
|
FileUtils.mkdir_p(targetdir)
|
80
129
|
end
|
81
130
|
end
|
data/pdfmd.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdfmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Roos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -90,6 +90,26 @@ dependencies:
|
|
90
90
|
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: 0.6.11
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: fuzzy-string-match
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.9'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.9.7
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.9'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.9.7
|
93
113
|
description: |2
|
94
114
|
Managing the common pdf metadata values and renaming the pdf file accordingly.
|
95
115
|
Sets common tags like 'author', 'createdate', 'title', 'subject' and 'keywords'
|
@@ -122,6 +142,7 @@ files:
|
|
122
142
|
- lib/pdfmd/explain.rb
|
123
143
|
- lib/pdfmd/explain.subject.md
|
124
144
|
- lib/pdfmd/explain.title.md
|
145
|
+
- lib/pdfmd/explain.typo.md
|
125
146
|
- lib/pdfmd/long_desc.pdfmdclean.txt
|
126
147
|
- lib/pdfmd/long_desc.pdfmdconfig.txt
|
127
148
|
- lib/pdfmd/long_desc.pdfmdedit.txt
|
@@ -150,8 +171,8 @@ homepage: https://github.com/Micronarrativ/ruby-pmd
|
|
150
171
|
licenses:
|
151
172
|
- MIT
|
152
173
|
metadata:
|
153
|
-
created: '2015-
|
154
|
-
revision: '
|
174
|
+
created: '2015-10-14 21:56:45'
|
175
|
+
revision: '20151014215645'
|
155
176
|
post_install_message: ". Run `pdfmd` to see the command help."
|
156
177
|
rdoc_options: []
|
157
178
|
require_paths:
|