class Book
@@DC_NS_URL = 'http://purl.org/dc/elements/1.1/'
+ @@SERIES_AND_VOLUME_REGEX = /^([A-Z]+)([0-9]+(\.[0-9]+)?)$/
attr_accessor :author
attr_accessor :classification_id
attr_accessor :cover
attr_accessor :description
+ attr_accessor :language
attr_accessor :path
attr_accessor :series_id
attr_accessor :title
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 = []
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]
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
end
end
+ #---------------------------------------
+ # Language
+
+ langNodes = opfDoc.css('dc|language', 'dc' => @@DC_NS_URL)
+ if (langNodes.length > 0)
+ langNode = langNodes[0]
+ if langNode
+ @language = langNode.content
+ end
+ end
+
#---------------------------------------
# Other metadata: series, volume, cover