Class: Pdfmdsort
Overview
Class: pdfmdsort
Instance Attribute Summary collapse
-
#copy ⇒ Object
Returns the value of attribute copy.
-
#dest_create ⇒ Object
Returns the value of attribute dest_create.
-
#destination ⇒ Object
Returns the value of attribute destination.
-
#dryrun ⇒ Object
Returns the value of attribute dryrun.
-
#filename ⇒ Object
Returns the value of attribute filename.
-
#interactive ⇒ Object
Returns the value of attribute interactive.
-
#overwrite ⇒ Object
Returns the value of attribute overwrite.
-
#typo ⇒ Object
Returns the value of attribute typo.
Attributes inherited from Pdfmd
Instance Method Summary collapse
-
#checkDestination ⇒ Object
Check if the destination is valid.
-
#findSimilarTargetdir(targetdir) ⇒ Object
Method compares string from ‘targetdir’ with all subfolders in the targetdir in order to find similarities in writing.
-
#get_author ⇒ Object
Get the author Return ‘false’ if no author is being found.
-
#initialize(input) ⇒ Pdfmdsort
constructor
Initialize.
-
#sort ⇒ Object
Sort the file away.
Methods inherited from Pdfmd
#check_metatags, #metadata, #readUserInput, #read_metatags
Methods included from Pdfmdmethods
#determineValidSetting, #log, #queryHiera
Constructor Details
#initialize(input) ⇒ Pdfmdsort
Initialize
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/pdfmd/pdfmdsort.rb', line 10 def initialize(input) super input @stringSimBorder = 0.8 # Defines the value of the typo check @destination = '.' # Sorting Base directory @interactive = false # Switch for interactive Sorting @copy = false # Switch for copy instead of moving @dryrun = false # Switch for dry-run process @overwrite = false # Switch for overwrite existing files @typo = false # Switch for detecting Author typos @destinationCreate = false # Switch to create the base directory if missing end |
Instance Attribute Details
#copy ⇒ Object
Returns the value of attribute copy.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def copy @copy end |
#dest_create ⇒ Object
Returns the value of attribute dest_create.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def dest_create @dest_create end |
#destination ⇒ Object
Returns the value of attribute destination.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def destination @destination end |
#dryrun ⇒ Object
Returns the value of attribute dryrun.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def dryrun @dryrun end |
#filename ⇒ Object
Returns the value of attribute filename.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def filename @filename end |
#interactive ⇒ Object
Returns the value of attribute interactive.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def interactive @interactive end |
#overwrite ⇒ Object
Returns the value of attribute overwrite.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def overwrite @overwrite end |
#typo ⇒ Object
Returns the value of attribute typo.
7 8 9 |
# File 'lib/pdfmd/pdfmdsort.rb', line 7 def typo @typo end |
Instance Method Details
#checkDestination ⇒ Object
Check if the destination is valid
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/pdfmd/pdfmdsort.rb', line 23 def checkDestination log('debug', "Checking destination parameter '#{@destination}'.") if File.file?(@destination) log('error', "Destination '#{@destination}' is a file.") puts "Abort. Destination '#{@destination}' is a file." exit 1 end # Create destination if switch is 'true' if @dest_create if @dryrun and !File.directory?(@destination) log('info', "Dryrun: Folder '#{@destination}' created.") elsif !File.directory?(@destination) FileUtils.mkdir_p(@destination) log('info', "Folder '#{@destination}' created.") end else log('debug', "Destination not created") end if File.directory?(@destination) log('debug', "Destination '#{@destination}' as directory confirmed.") true else log('error', "Destination '#{@destination}' as directory not confirmed.") puts "Abort. Destination '#{@destination}' not available!" exit 1 end end |
#findSimilarTargetdir(targetdir) ⇒ Object
Method compares string from ‘targetdir’ with all subfolders in the targetdir
in order to find similarities in writing.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/pdfmd/pdfmdsort.rb', line 72 def findSimilarTargetdir( targetdir ) self.log('debug', "Running method 'findSimilarTarget' with parameter '#{targetdir}'.") fuzzy = FuzzyStringMatch::JaroWinkler.create( :native ) returnValue = false # Get all subfolders subDirectories = Dir[@destination + '/*'] subDirectories.each do |fullPathFolder| # Match only directories, not any files that might be in the target directory if !File.directory?(fullPathFolder) stringSimilarity = fuzzy.getDistance( fullPathFolder.gsub(@destination + '/', ''), targetdir.gsub(@destination + '/', '') ) if stringSimilarity > @stringSimBorder self.log('debug', "findSimilarTargetdir: Found String value #{stringSimilarity.to_s} for target '#{fullPathFolder}'.") returnValue = fullPathFolder end end end returnValue end |
#get_author ⇒ Object
Get the author Return ‘false’ if no author is being found.
61 62 63 64 65 66 67 68 |
# File 'lib/pdfmd/pdfmdsort.rb', line 61 def () if not self.('author') return false end = @@metadata['author'].gsub(/\./,'_').gsub(/\&/,'').gsub(/\-/,'_').gsub(/\s/,'_').gsub(/\,/,'_').gsub(/\_\_/,'_') I18n.enforce_available_locales = false I18n.transliterate().downcase # Normalising end |
#sort ⇒ Object
Sort the file away
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/pdfmd/pdfmdsort.rb', line 104 def sort if self.checkDestination if @interactive answer = readUserInput("Process '#{@filename}' ([y]/n): ") answer = answer.empty? ? 'y' : answer self.log('info', "User Answer for file '#{@filename}': #{answer}") if !answer.match(/y/) self.log('info',"Skipping file '#{@filename}' due to user answer: '#{answer}'.") return else self.log('info',"Processing file '#{@filename}' due to user answer: '#{answer}'.") end end if not = () or .empty? self.log('error', "File '#{@filename}' has not value for author set. Cannot sort file. Abort.") exit 1 end targetdir = @destination.chomp + '/' + targetfile = targetdir + '/' + Pathname.new(@filename).basename.to_s # Create the target directory, if it does not exist yet. if !File.exists? targetdir # Check for similiar directory names which might indicate a typo in the # current directory name. if @typo and foundDir = self.findSimilarTargetdir(targetdir) self.log('info', "Similar target found ('" + foundDir + "'). Request user input.") puts 'Similar target directory detected:' puts 'Found : ' + foundDir puts 'Target: ' + targetdir while answer = readUserInput('Abort? ([y]/n): ') if answer.match(/(y|yes|j|ja|^$)/i) self.log('info','User chose to abort sorting.') puts 'Abort.' exit 0 elsif answer.match(/(n|no)/i) self.log('info', 'User chose to continue sorting.') break end end end if @dryrun self.log('info', "Dryrun: Created Directory '#{targetdir}'.") else self.log('info', "Created directory '#{targetdir}'.") puts 'Created: ' + targetdir FileUtils.mkdir_p(targetdir) end end # Check if the file already exists # This does nothing so far if File.exists?(targetfile) and @overwrite self.log('info', "File '#{@filename}' already exists. Overwrite active: replacing file.") elsif File.exists?(targetfile) and !@overwrite self.log('info', "File '#{@filename}' already exists, overwrite disabled: not replacing file.") return true end if @copy if @dryrun self.log('info', "Dryrun: Copy file '#{@filename}' to '#{targetdir}'.") else self.log('info', "Copy file '#{@filename}' to '#{targetdir}'.") FileUtils.cp(@filename, targetdir) end else if @dryrun self.log('info', "Dryrun: Move file '#{@filename}' to '#{targetdir}'.") else self.log('info', "Move file '#{@filename}' to '#{targetdir}'.") FileUtils.mv(@filename, targetdir) end end end end |