pdfmd 1.9.1 → 2.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 +4 -4
- data/CHANGELOG.md +22 -2
- data/README.md +2 -2
- data/TODO.mkd +26 -0
- data/bin/pdfmd +267 -1
- data/lib/pdfmd.rb +242 -634
- data/lib/pdfmd/explain.hiera.md +25 -4
- data/lib/pdfmd/long_desc.pdfmdconfig.txt +40 -0
- data/lib/pdfmd/long_desc.pdfmdedit.txt +166 -0
- data/lib/pdfmd/long_desc.pdfmdexplain.txt +16 -0
- data/lib/pdfmd/long_desc.pdfmdrename.txt +206 -0
- data/lib/pdfmd/long_desc.pdfmdshow.txt +92 -0
- data/lib/pdfmd/long_desc.pdfmdsort.txt +111 -0
- data/lib/pdfmd/long_desc.pdfmdstat.txt +23 -0
- data/lib/pdfmd/pdfmdconfig.rb +30 -0
- data/lib/pdfmd/pdfmdedit.rb +201 -0
- data/lib/pdfmd/pdfmdmethods.rb +125 -0
- data/lib/pdfmd/pdfmdrename.rb +243 -0
- data/lib/pdfmd/pdfmdshow.rb +88 -0
- data/lib/pdfmd/pdfmdsort.rb +115 -0
- data/lib/pdfmd/pdfmdstat.rb +117 -0
- data/lib/{string_extend.rb → pdfmd/string_extend.rb} +0 -0
- data/lib/run.rb +235 -0
- data/pdfmd.gemspec +3 -2
- metadata +23 -11
- data/lib/pdfmd/check.rb +0 -10
- data/lib/pdfmd/config.rb +0 -59
- data/lib/pdfmd/edit.rb +0 -144
- data/lib/pdfmd/rename.rb +0 -295
- data/lib/pdfmd/show.rb +0 -164
- data/lib/pdfmd/sort.rb +0 -199
data/pdfmd.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'pdfmd'
|
3
|
-
s.version = `grep -m 1 VERSION
|
3
|
+
s.version = `grep -m 1 VERSION bin/pdfmd | awk -F"'" '{ print $2 '}`
|
4
4
|
s.date = Time.now.strftime("%Y-%m-%d").to_s
|
5
5
|
s.summary = "pdfmd - pdf-meta-data management"
|
6
6
|
s.description = <<-EOF
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
Sets common tags like 'author', 'createdate', 'title', 'subject' and 'keywords'
|
9
9
|
and re-uses them for renaming the file with to a human-readable identifier.
|
10
10
|
EOF
|
11
|
-
s.post_install_message = 'Run `pdfmd` to see the command help.'
|
11
|
+
s.post_install_message = '. Run `pdfmd` to see the command help.'
|
12
12
|
s.authors = ['Daniel Roos']
|
13
13
|
s.email = 'pdfmd@micronarrativ.org'
|
14
14
|
s.require_paths = ['lib']
|
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.executable = 'pdfmd'
|
18
18
|
s.homepage = 'https://github.com/Micronarrativ/ruby-pmd'
|
19
|
+
s.metadata = { 'created' => Time.now.strftime("%Y-%m-%d %H:%M:%S"), 'revision' => Time.now.strftime("%Y%m%d%H%M%S") }
|
19
20
|
s.license = 'MIT'
|
20
21
|
s.add_dependency "thor", '~>0.19', '>= 0.19.1'
|
21
22
|
s.add_dependency 'highline', '~>1.7', '>= 1.7.1'
|
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:
|
4
|
+
version: 2.0.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-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -105,11 +105,9 @@ files:
|
|
105
105
|
- LICENSE
|
106
106
|
- README.md
|
107
107
|
- Rakefile
|
108
|
+
- TODO.mkd
|
108
109
|
- bin/pdfmd
|
109
110
|
- lib/pdfmd.rb
|
110
|
-
- lib/pdfmd/check.rb
|
111
|
-
- lib/pdfmd/config.rb
|
112
|
-
- lib/pdfmd/edit.rb
|
113
111
|
- lib/pdfmd/explain.author.md
|
114
112
|
- lib/pdfmd/explain.createdate.md
|
115
113
|
- lib/pdfmd/explain.csv.md
|
@@ -120,11 +118,23 @@ files:
|
|
120
118
|
- lib/pdfmd/explain.rb
|
121
119
|
- lib/pdfmd/explain.subject.md
|
122
120
|
- lib/pdfmd/explain.title.md
|
121
|
+
- lib/pdfmd/long_desc.pdfmdconfig.txt
|
122
|
+
- lib/pdfmd/long_desc.pdfmdedit.txt
|
123
|
+
- lib/pdfmd/long_desc.pdfmdexplain.txt
|
124
|
+
- lib/pdfmd/long_desc.pdfmdrename.txt
|
125
|
+
- lib/pdfmd/long_desc.pdfmdshow.txt
|
126
|
+
- lib/pdfmd/long_desc.pdfmdsort.txt
|
127
|
+
- lib/pdfmd/long_desc.pdfmdstat.txt
|
123
128
|
- lib/pdfmd/methods.rb
|
124
|
-
- lib/pdfmd/
|
125
|
-
- lib/pdfmd/
|
126
|
-
- lib/pdfmd/
|
127
|
-
- lib/
|
129
|
+
- lib/pdfmd/pdfmdconfig.rb
|
130
|
+
- lib/pdfmd/pdfmdedit.rb
|
131
|
+
- lib/pdfmd/pdfmdmethods.rb
|
132
|
+
- lib/pdfmd/pdfmdrename.rb
|
133
|
+
- lib/pdfmd/pdfmdshow.rb
|
134
|
+
- lib/pdfmd/pdfmdsort.rb
|
135
|
+
- lib/pdfmd/pdfmdstat.rb
|
136
|
+
- lib/pdfmd/string_extend.rb
|
137
|
+
- lib/run.rb
|
128
138
|
- pdfmd.gemspec
|
129
139
|
- test/test_default.pdf
|
130
140
|
- test/test_rename.rb
|
@@ -133,8 +143,10 @@ files:
|
|
133
143
|
homepage: https://github.com/Micronarrativ/ruby-pmd
|
134
144
|
licenses:
|
135
145
|
- MIT
|
136
|
-
metadata:
|
137
|
-
|
146
|
+
metadata:
|
147
|
+
created: '2015-07-07 08:08:08'
|
148
|
+
revision: '20150707080808'
|
149
|
+
post_install_message: ". Run `pdfmd` to see the command help."
|
138
150
|
rdoc_options: []
|
139
151
|
require_paths:
|
140
152
|
- lib
|
data/lib/pdfmd/check.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
filename = ENV.fetch('PDFMD_FILENAME')
|
2
|
-
|
3
|
-
returnvalue = 0
|
4
|
-
readMetadata(filename).each do|key,value|
|
5
|
-
if key.match(/author|subject|createdate|title/) and value.empty?
|
6
|
-
puts 'Missing value: ' + key
|
7
|
-
returnvalue == 0 ? returnvalue = 1 : ''
|
8
|
-
end
|
9
|
-
end
|
10
|
-
exit returnvalue
|
data/lib/pdfmd/config.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# == File: config.rb
|
3
|
-
#
|
4
|
-
# Show the current default configuration settings
|
5
|
-
#
|
6
|
-
|
7
|
-
# Options
|
8
|
-
opt_show = ENV.fetch('PDFMD_SHOW')
|
9
|
-
opt_command = ENV.fetch('PDFMD_COMMAND').downcase
|
10
|
-
|
11
|
-
require_relative '../string_extend.rb'
|
12
|
-
require 'yaml'
|
13
|
-
require 'pp'
|
14
|
-
|
15
|
-
#
|
16
|
-
# If now options are set,
|
17
|
-
# show the current settings
|
18
|
-
if opt_show.blank? or opt_show == 'true'
|
19
|
-
opt_show = true
|
20
|
-
end
|
21
|
-
|
22
|
-
# Show the current settings
|
23
|
-
case opt_show
|
24
|
-
when true
|
25
|
-
|
26
|
-
# As long as only Hiera is supported as external storage
|
27
|
-
# for configuration (unless I need it otherwise), read the
|
28
|
-
# hiera configuration
|
29
|
-
puts 'Current default configuration:'
|
30
|
-
puts ''
|
31
|
-
hieraConfig = eval `hiera pdfmd::config`
|
32
|
-
|
33
|
-
# Show the configuration only for one key
|
34
|
-
if not opt_command.empty? and
|
35
|
-
|
36
|
-
hieraConfig.has_key?(opt_command)
|
37
|
-
|
38
|
-
puts 'Command: ' + opt_command
|
39
|
-
puts hieraConfig[opt_command].to_yaml
|
40
|
-
puts ''
|
41
|
-
|
42
|
-
# Strange key provided. Typo? Anyway: error
|
43
|
-
elsif not opt_command.empty? and
|
44
|
-
not hieraConfig.has_key?(opt_command)
|
45
|
-
|
46
|
-
puts "Command '#{opt_command}' not found in default configuration."
|
47
|
-
|
48
|
-
# Show all configuration from Hiera
|
49
|
-
else
|
50
|
-
|
51
|
-
hieraConfig.sort.each do |key,value|
|
52
|
-
puts 'Command: ' + key
|
53
|
-
puts value.to_yaml
|
54
|
-
puts ''
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
data/lib/pdfmd/edit.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Thor command 'edit' for changing the common
|
3
|
-
# ExifTags within the PDF file
|
4
|
-
# TODO: backup file/path into hiera and options
|
5
|
-
#
|
6
|
-
|
7
|
-
require_relative '../string_extend'
|
8
|
-
|
9
|
-
filename = ENV.fetch('PDFMD_FILENAME')
|
10
|
-
optTag = ENV['PDFMD_TAG'] || nil
|
11
|
-
opt_rename = ENV['PDFMD_RENAME']
|
12
|
-
pdfmd = ENV['PDFMD']
|
13
|
-
opt_log = ENV['PDFMD_LOG']
|
14
|
-
opt_logfile = ENV['PDFMD_LOGFILE']
|
15
|
-
hieraDefaults = queryHiera('pdfmd::config')
|
16
|
-
|
17
|
-
# Rename or not
|
18
|
-
if opt_rename == 'true'
|
19
|
-
opt_rename = true
|
20
|
-
elsif opt_rename == 'false'
|
21
|
-
opt_rename = false
|
22
|
-
elsif (!hieraDefaults.nil? and
|
23
|
-
!hieraDefaults['edit'].nil? and
|
24
|
-
! hieraDefaults['edit']['rename'].nil? and
|
25
|
-
hieraDefaults['edit']['rename'] == true)
|
26
|
-
opt_rename = true
|
27
|
-
else
|
28
|
-
opt_rename = false
|
29
|
-
end
|
30
|
-
|
31
|
-
# Define logging state
|
32
|
-
if (hieraDefaults.nil? or
|
33
|
-
hieraDefaults['edit'].nil? or
|
34
|
-
hieraDefaults['edit']['log'].nil? or
|
35
|
-
!hieraDefaults['edit']['log'] == true ) and
|
36
|
-
(opt_log == 'false' or opt_log.blank?)
|
37
|
-
|
38
|
-
logenable = false
|
39
|
-
|
40
|
-
else
|
41
|
-
|
42
|
-
logenable = true
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
# If logging is enabled, set parameters and create the obkject
|
47
|
-
if logenable
|
48
|
-
|
49
|
-
if opt_logfile.nil? and
|
50
|
-
( hieraDefaults['edit'].nil? or
|
51
|
-
hieraDefaults['edit']['logfile'].nil? or
|
52
|
-
hieraDefaults['edit']['logfile'].blank? )
|
53
|
-
|
54
|
-
logfile = Dir.pwd.chomp('/') + '/' + File.basename(ENV['PDFMD'], '.*') + '.log'
|
55
|
-
|
56
|
-
elsif not opt_logfile.nil? and not opt_logfile.blank?
|
57
|
-
|
58
|
-
if File.directory? opt_logfile
|
59
|
-
abort('Logfile path is a directory. Abort.')
|
60
|
-
exit 1
|
61
|
-
end
|
62
|
-
|
63
|
-
logfile = opt_logfile
|
64
|
-
|
65
|
-
elsif (opt_logfile.nil? or opt_logfile.blank?) and
|
66
|
-
not hieraDefaults['edit']['logfile'].blank?
|
67
|
-
|
68
|
-
logfile = hieraDefaults['edit']['logfile']
|
69
|
-
|
70
|
-
else
|
71
|
-
|
72
|
-
logfile = Dir.pwd.chomp('/') + '/' + File.basename(ENV['PDFMD'], '.*') + '.log'
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
$logger = Logger.new(logfile)
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
metadata = readMetadata(filename)
|
81
|
-
|
82
|
-
# Set the password for the exiftool if available
|
83
|
-
if metadata['password'].size > 0
|
84
|
-
logenable ? $logger.info("#{filename}: Using PDF password to edit metadata.") : ''
|
85
|
-
exifPdfPassword = "-password '#{metadata['password']}'"
|
86
|
-
else
|
87
|
-
exifPdfPassword = ''
|
88
|
-
end
|
89
|
-
|
90
|
-
if optTag == 'all'
|
91
|
-
tags = ['author','title','subject','createdate','keywords']
|
92
|
-
else
|
93
|
-
tags = optTag.split(',')
|
94
|
-
end
|
95
|
-
|
96
|
-
tags.each do |currentTag|
|
97
|
-
|
98
|
-
# If the tags contain an '=', set the value for the tag
|
99
|
-
# automatically. Otherwise enter interactive mode.
|
100
|
-
if currentTag.match(/\=/)
|
101
|
-
|
102
|
-
tag, value = currentTag.split('=')
|
103
|
-
|
104
|
-
# Include Date identifier
|
105
|
-
if tag.downcase == 'createdate'
|
106
|
-
value = identifyDate(value)
|
107
|
-
end
|
108
|
-
|
109
|
-
logenable ? $logger.info("#{filename}: Setting value for tag '#{tag.downcase}': '#{value}'") : ''
|
110
|
-
|
111
|
-
# Running the exiftool with optional PDF password parameter on the original file
|
112
|
-
`exiftool #{exifPdfPassword} -#{tag.downcase}='#{value}' -overwrite_original '#{filename}'`
|
113
|
-
|
114
|
-
else
|
115
|
-
|
116
|
-
# Change the tag to something we can use here
|
117
|
-
puts "Current value: '#{metadata[currentTag.downcase]}'"
|
118
|
-
answer = readUserInput("Enter new value for #{currentTag} :")
|
119
|
-
answerCopy = answer
|
120
|
-
if currentTag.downcase == 'createdate'
|
121
|
-
while not answer = identifyDate(answer)
|
122
|
-
logenable ? $logger.warn("${filename}: Invalid date provided: '#{answerCopy}'.") : ''
|
123
|
-
logenable ? $logger.info("${filename}: Asking for new user provided date.") : ''
|
124
|
-
puts 'Invalid date format.'
|
125
|
-
answer = readUserInput("Enter new value for #{currentTag} :")
|
126
|
-
end
|
127
|
-
end
|
128
|
-
puts "Changing value for #{currentTag}: '#{metadata[currentTag]}' => #{answer}"
|
129
|
-
logenable ? $logger.info("#{filename}: Setting value for tag '#{currentTag.downcase}': '#{answer}'") : ''
|
130
|
-
|
131
|
-
# Running the exiftool with optional PDF password parameter on the original file
|
132
|
-
`exiftool #{exifPdfPassword} -#{currentTag.downcase}='#{answer}' -overwrite_original '#{filename}'`
|
133
|
-
|
134
|
-
end # If interactive/batch mode
|
135
|
-
end
|
136
|
-
|
137
|
-
#
|
138
|
-
# If required, run the renaming task afterwards
|
139
|
-
# This is not pretty, but seems to be the only way to do this in THOR
|
140
|
-
#
|
141
|
-
if opt_rename
|
142
|
-
logenable ? $logger.info("#{filename}: Trigger file renaming.") : ''
|
143
|
-
`#{pdfmd} rename '#{filename}'`
|
144
|
-
end
|
data/lib/pdfmd/rename.rb
DELETED
@@ -1,295 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Thor command 'rename'
|
3
|
-
#
|
4
|
-
require_relative '../string_extend'
|
5
|
-
|
6
|
-
filename = ENV.fetch('PDFMD_FILENAME')
|
7
|
-
opt_allkeywords = ENV.fetch('PDFMD_ALLKEYWORDS')
|
8
|
-
outputdir = ENV.fetch('PDFMD_OUTPUTDIR') == 'false' ? false : ENV.fetch('PDFMD_OUTPUTDIR')
|
9
|
-
dryrun = ENV.fetch('PDFMD_DRYRUN') == 'false' ? false : true
|
10
|
-
opt_numberKeywords = ENV.fetch('PDFMD_NUMBERKEYWORDS')
|
11
|
-
opt_copy = ENV.fetch('PDFMD_COPY')
|
12
|
-
opt_log = ENV.fetch('PDFMD_LOG')
|
13
|
-
opt_logfile = ENV.fetch('PDFMD_LOGFILE')
|
14
|
-
hieraDefaults = queryHiera('pdfmd::config')
|
15
|
-
|
16
|
-
if opt_log == 'false'
|
17
|
-
logenable = false
|
18
|
-
elsif opt_log == 'true'
|
19
|
-
logenable = true
|
20
|
-
elsif opt_log.blank? and
|
21
|
-
!hieraDefaults.nil? and
|
22
|
-
!hieraDefaults['rename'].nil? and
|
23
|
-
!hieraDefaults['rename']['log'].nil? and
|
24
|
-
hieraDefaults['rename']['log'] == true
|
25
|
-
logenable = true
|
26
|
-
else
|
27
|
-
logenable = true
|
28
|
-
end
|
29
|
-
|
30
|
-
if logenable
|
31
|
-
|
32
|
-
if opt_logfile.blank? and
|
33
|
-
(
|
34
|
-
!hieraDefaults.nil? and
|
35
|
-
hieraDefaults['rename'].nil? and
|
36
|
-
(hieraDefaults['rename']['logfile'].nil? or
|
37
|
-
hieraDefaults['rename']['logfile'].blank?))
|
38
|
-
|
39
|
-
logfile = Dir.pwd.chomp('/') + '/' + File.basename(ENV['PDFMD'], '.*') + '.log'
|
40
|
-
|
41
|
-
elsif not opt_logfile.blank?
|
42
|
-
|
43
|
-
if File.directory? opt_logfile
|
44
|
-
abort('Logfilepath is a directory. Abort.')
|
45
|
-
exit 1
|
46
|
-
end
|
47
|
-
|
48
|
-
logfile = opt_logfile
|
49
|
-
|
50
|
-
elsif opt_logfile.blank? and
|
51
|
-
!hieraDefaults.nil? and
|
52
|
-
!hieraDefaults['rename'].nil? and
|
53
|
-
!hieraDefaults['rename']['logfile'].nil? and
|
54
|
-
not hieraDefaults['rename']['logfile'].blank?
|
55
|
-
|
56
|
-
logfile = hieraDefaults['rename']['logfile']
|
57
|
-
|
58
|
-
else
|
59
|
-
|
60
|
-
logfile = Dir.pwd.chomp('/') + '/' + File.basename(ENV['PDFMD'], '.*') + '.log'
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
$logger = Logger.new(logfile)
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
metadata = readMetadata(filename).each do |key,value|
|
69
|
-
|
70
|
-
# Check if the metadata is complete
|
71
|
-
if key.match(/author|subject|createdate|title/) and value.empty?
|
72
|
-
puts 'Missing value for ' + key
|
73
|
-
puts 'Abort'
|
74
|
-
exit 1
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
# Determine the status of allkeywords
|
81
|
-
# Default value is false
|
82
|
-
if opt_allkeywords == 'true'
|
83
|
-
opt_allkeywords = true
|
84
|
-
elsif opt_allkeywords.blank? and
|
85
|
-
!hieraDefaults.nil? and
|
86
|
-
!hieraDefaults['rename'].nil? and
|
87
|
-
not hieraDefaults['rename']['allkeywords'].nil?
|
88
|
-
|
89
|
-
opt_allkeywords = hieraDefaults['rename']['allkeywords']
|
90
|
-
|
91
|
-
elsif opt_allkeywords == 'false' or
|
92
|
-
opt_allkeywords.blank?
|
93
|
-
|
94
|
-
opt_allkeywords = false
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
#
|
99
|
-
# Determine the number of keywords
|
100
|
-
# Default value is 3
|
101
|
-
if opt_numberKeywords.blank? and
|
102
|
-
!hieraDefaults.nil? and
|
103
|
-
!hieraDefaults['rename'].nil? and
|
104
|
-
!hieraDefaults['rename']['keywords'].nil?
|
105
|
-
|
106
|
-
opt_numberKeywords = hieraDefaults['rename']['keywords']
|
107
|
-
|
108
|
-
elsif opt_numberKeywords.to_i.is_a? Integer and
|
109
|
-
opt_numberKeywords.to_i > 0
|
110
|
-
|
111
|
-
opt_numberKeywords = opt_numberKeywords.to_i
|
112
|
-
|
113
|
-
else
|
114
|
-
|
115
|
-
opt_numberKeywords = 3
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
#
|
120
|
-
# Determine the status of the copy parameter
|
121
|
-
if opt_copy.blank? and
|
122
|
-
!hieraDefaults.nil? and
|
123
|
-
!hieraDefaults['rename'].nil? and
|
124
|
-
!hieraDefaults['rename']['copy'].nil?
|
125
|
-
|
126
|
-
opt_copy = hieraDefaults['rename']['copy']
|
127
|
-
|
128
|
-
elsif opt_copy == 'true'
|
129
|
-
|
130
|
-
opt_copy = true
|
131
|
-
|
132
|
-
else
|
133
|
-
|
134
|
-
opt_copy = false
|
135
|
-
|
136
|
-
end
|
137
|
-
|
138
|
-
# Use a default set for the keywords or (if provided) the keywords from hiera
|
139
|
-
# The default set is only in english
|
140
|
-
if !hieraDefaults.nil? and
|
141
|
-
!hieraDefaults['rename'].nil? and
|
142
|
-
!hieraDefaults['rename']['keys'].nil? and
|
143
|
-
hieraDefaults['rename']['keys'] != ''
|
144
|
-
|
145
|
-
keymappings = hieraDefaults['rename']['keys']
|
146
|
-
|
147
|
-
else
|
148
|
-
keymappings = {
|
149
|
-
'cno' => ['Customer','Customernumber'],
|
150
|
-
'con' => ['Contract'],
|
151
|
-
'inf' => ['Information'],
|
152
|
-
'inv' => ['Invoice', 'Invoicenumber'],
|
153
|
-
'man' => ['Manual'],
|
154
|
-
'off' => ['Offer', 'Offernumber'],
|
155
|
-
'ord' => ['Order', 'Ordernumber'],
|
156
|
-
'rec' => ['Receipt', 'Receiptnumber'],
|
157
|
-
'tic' => ['Ticket'],
|
158
|
-
}
|
159
|
-
end
|
160
|
-
|
161
|
-
|
162
|
-
date = metadata['createdate'].gsub(/\ \d{2}\:\d{2}\:\d{2}.*$/,'').gsub(/\:/,'')
|
163
|
-
author = metadata['author'].gsub(/\./,'_').gsub(/\&/,'').gsub(/\-/,'').gsub(/\s/,'_').gsub(/\,/,'_').gsub(/\_\_/,'_')
|
164
|
-
I18n.enforce_available_locales = false
|
165
|
-
author = I18n.transliterate(author) # Normalising
|
166
|
-
|
167
|
-
keywords_preface = ''
|
168
|
-
# Determine the document type from the title.
|
169
|
-
|
170
|
-
# Default docment type
|
171
|
-
if !hieraDefaults.nil? and
|
172
|
-
!hieraDefaults['rename'].nil? and
|
173
|
-
!hieraDefaults['rename']['defaultdoctype'].nil? and
|
174
|
-
hieraDefaults['rename']['defaultdoctype'].empty?
|
175
|
-
|
176
|
-
doktype = hieraDefaults['rename']['defaultdoctype']
|
177
|
-
else
|
178
|
-
doktype = 'doc'
|
179
|
-
end
|
180
|
-
|
181
|
-
|
182
|
-
## Iterate through the keymappings and try to find a matching doktype
|
183
|
-
keymappings.each do |key,value|
|
184
|
-
value.kind_of?(String) ? value = value.split : ''
|
185
|
-
value.each do |keyword|
|
186
|
-
metadata['title'].match(/#{keyword}/i) ? doktype = key : ''
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
# Set the preface from the doktype
|
191
|
-
# This must be added to the beginning of the hash when generating
|
192
|
-
# the filename so it will come first after the doktype
|
193
|
-
keywords_preface = setKeywordsPreface(metadata,doktype.gsub(/\-/,''))
|
194
|
-
|
195
|
-
if not metadata['keywords'].empty?
|
196
|
-
keywords = ''
|
197
|
-
#keywords_preface == '' ? keywords = '' : keywords = keywords_preface
|
198
|
-
keywordsarray = metadata['keywords'].split(',')
|
199
|
-
|
200
|
-
#
|
201
|
-
# Sort array
|
202
|
-
# and replace key-strings with the abbreviations
|
203
|
-
# in combination with the titel information for the filename
|
204
|
-
# BTW: When the value is identical with the title, then it should be
|
205
|
-
# the first keyword IMHO. TODO
|
206
|
-
keywordssorted = Array.new
|
207
|
-
keywordsarray.each_with_index do |value,index|
|
208
|
-
value = value.lstrip.chomp
|
209
|
-
|
210
|
-
# Replace strings for the filename with abbreviations
|
211
|
-
keymappings.each do |abbreviation,keyvaluesarray|
|
212
|
-
keyvaluesarray.kind_of?(String) ? keyvaluesarray = keyvaluesarray.split : ''
|
213
|
-
keyvaluesarray.each do |keystring|
|
214
|
-
value = value.gsub(/#{keystring.lstrip.chomp} /i, abbreviation.to_s)
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
# Remove special characters from string
|
219
|
-
value = value.gsub(/\s|\/|\-|\./,'_')
|
220
|
-
|
221
|
-
keywordsarray[index] = value
|
222
|
-
|
223
|
-
# If the current values matches some of the replacement-abbreviations,
|
224
|
-
# put the keyword on the top of the array to be listed first later on
|
225
|
-
# in the filename
|
226
|
-
if value.match(/^#{keymappings.keys.join('|')} /i)
|
227
|
-
keywordssorted.insert(0, value)
|
228
|
-
else
|
229
|
-
keywordssorted.push(value)
|
230
|
-
end
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
# Insert the document preface in the beginning when it's available
|
235
|
-
if not keywords_preface.empty?
|
236
|
-
keywordssorted.insert(0, keywords_preface)
|
237
|
-
end
|
238
|
-
|
239
|
-
# all keywords as a string
|
240
|
-
if not opt_allkeywords
|
241
|
-
keywords = keywordssorted.values_at(*(0..opt_numberKeywords-1)).join('-')
|
242
|
-
else
|
243
|
-
keywords = keywordssorted.join('-')
|
244
|
-
end
|
245
|
-
|
246
|
-
# Normalise the keywords as well
|
247
|
-
I18n.enforce_available_locales = false
|
248
|
-
keywords = I18n.transliterate(keywords)
|
249
|
-
|
250
|
-
else
|
251
|
-
|
252
|
-
# There are no keywords.
|
253
|
-
# we are using the title and the subject
|
254
|
-
keywords_preface != '' ? keywords = keywords_preface : ''
|
255
|
-
|
256
|
-
end
|
257
|
-
|
258
|
-
extension = 'pdf'
|
259
|
-
if keywords != nil and keywords[0] != '-'
|
260
|
-
keywords = '-' + keywords
|
261
|
-
end
|
262
|
-
newFilename = date + '-' +
|
263
|
-
author + '-' +
|
264
|
-
doktype +
|
265
|
-
keywords + '.' +
|
266
|
-
extension
|
267
|
-
|
268
|
-
# Output directory checks
|
269
|
-
if outputdir
|
270
|
-
|
271
|
-
if not File.exist?(outputdir)
|
272
|
-
puts "Error: output dir '#{outputdir}' not found. Abort."
|
273
|
-
exit 1
|
274
|
-
end
|
275
|
-
|
276
|
-
else
|
277
|
-
|
278
|
-
# Try to get the outputdir from hiera
|
279
|
-
outputdir = (!hieraDefaults.nil? and !hieraDefaults['rename'].nil? and !hieraDefaults['rename']['outputdir'].nil?) ? hieraDefaults['rename']['outputdir'] : File.dirname(filename)
|
280
|
-
|
281
|
-
end
|
282
|
-
|
283
|
-
if not dryrun and filename != newFilename.downcase
|
284
|
-
|
285
|
-
logenable ? $logger.info(filename + ' => ' + outputdir + '/' + newFilename.downcase): ''
|
286
|
-
|
287
|
-
# Copy of me the file to the new name
|
288
|
-
command = opt_copy ? 'cp' : 'mv'
|
289
|
-
`#{command} -v '#{filename}' '#{outputdir}/#{newFilename.downcase}'`
|
290
|
-
|
291
|
-
else
|
292
|
-
|
293
|
-
logenable ? $logger.info('Dryrun: ' + filename + ' => ' + outputdir + '/' + newFilename.downcase): ''
|
294
|
-
|
295
|
-
end
|