X-Git-Url: http://jaekl.net/gitweb/?p=quanlib.git;a=blobdiff_plain;f=book.rb;h=6d90c0e2947a0a243b3480758518159e075d8d85;hp=d7135690d4d60514f4c900d59dc76698d3eb164d;hb=HEAD;hpb=9b27f41cf97737185a8c6593e7db786cccb6efc1 diff --git a/book.rb b/book.rb index d713569..2b93f4b 100644 --- a/book.rb +++ b/book.rb @@ -10,7 +10,9 @@ require_relative 'store' class Book @@DC_NS_URL = 'http://purl.org/dc/elements/1.1/' + @@SERIES_AND_VOLUME_REGEX = /^([A-Z]+)([0-9]+(\.[0-9]+)?)$/ + attr_accessor :arrived attr_accessor :author attr_accessor :classification_id attr_accessor :cover @@ -49,6 +51,18 @@ class Book return false end + def self.grouping_for_title(title) + result = title + + '\'",!#'.split('').each do |c| + result = result.gsub(c, '-') + end + result = result.gsub(/: */, '--') + result = result.gsub(' ', '_') + + result + end + def heading result = [] @@ -159,7 +173,7 @@ class Book vol = nil first = arr[0] - matchData = (arr[0]).match(/^([A-Z]+)([0-9]+)$/) + matchData = (arr[0]).match(@@SERIES_AND_VOLUME_REGEX) if nil != matchData capt = matchData.captures series = capt[0] @@ -174,6 +188,15 @@ class Book title = arr.join(' ') + bare_title_grouping = title_grouping + .split('_') + .reject { |part| part.match(@@SERIES_AND_VOLUME_REGEX) } + .join('_') + + unless bare_title_grouping == Book.grouping_for_title(title) + puts "WARNING: title_grouping mismatch: #{bare_title_grouping.inspect} vs. #{Book.grouping_for_title(title).inspect}" + end + return series, vol, title end @@ -202,6 +225,8 @@ class Book scan_pdf!(file_name) end + @arrived = File.ctime(file_name) + @classification_id = @store.find_classification(@author.grouping, File.basename(file_name, '.*')) # TODO: Fix horrible hard-coded strings and paths