class Kindai::Book
Public Class Methods
new_from_local_directory(path)
click to toggle source
# File lib/kindai/book.rb, line 14 def self.new_from_local_directory(path) metadata = File.join(path, 'metadata') permalink = open(metadata).read.chomp return self.new_from_permalink(permalink) end
new_from_permalink(permalink_uri)
click to toggle source
—– constructor —–
# File lib/kindai/book.rb, line 5 def self.new_from_permalink(permalink_uri) raise "not info:ndljp: #{permalink_uri}" unless permalink_uri.match(/info\:ndljp/) me = new me.instance_eval { @permalink_uri = Kindai::Util.normalize_permalink_uri permalink_uri } return me end
Public Instance Methods
edition()
click to toggle source
# File lib/kindai/book.rb, line 56 def edition return metadata_like('edition') rescue nil end
key()
click to toggle source
# File lib/kindai/book.rb, line 26 def key permalink_uri.match(/\d+$/)[0] end
permalink_uri()
click to toggle source
—– metadata —–
# File lib/kindai/book.rb, line 22 def permalink_uri @permalink_uri end
spreads()
click to toggle source
# File lib/kindai/book.rb, line 78 def spreads @spreads ||= 1.upto(self.total_spread).map{|i| self.spread_at(i) } end
title()
click to toggle source
# File lib/kindai/book.rb, line 30 def title base = "#{metadata_like 'title'}#{volume_number}" if edition base += "(#{edition})" end base end
total_spread()
click to toggle source
# File lib/kindai/book.rb, line 74 def total_spread permalink_page.search('#sel-content-no option').length end
volume_number()
click to toggle source
# File lib/kindai/book.rb, line 40 def volume_number # 0036 とか begin return metadata_like('volumeTranscription').to_i rescue end # 第36巻 とか begin return metadata_like('volume').scan(/\d+/).first.to_i rescue end nil end
Protected Instance Methods
metadata()
click to toggle source
# File lib/kindai/book.rb, line 97 def metadata @metadata ||= begin dts = permalink_page.search('dl.detail-metadata-list dt').map{ |tag| tag.text } dds = permalink_page.search('dl.detail-metadata-list dd').map{ |tag| tag.text } dts.zip(dds).inject({ }) { |table, tupple| table[tupple.first.strip] = tupple.last.strip table } end end
metadata_like(query)
click to toggle source
# File lib/kindai/book.rb, line 84 def metadata_like query query_regexp = Regexp.new(Regexp.quote("(#{ query })")) key = metadata.keys.find{ |key| key =~ query_regexp } raise "metadata like #{query} not found" unless key metadata[key] end
permalink_page()
click to toggle source
—– pages —–
# File lib/kindai/book.rb, line 110 def permalink_page @permalink_page ||= begin Kindai::Util.logger.debug "fetch permalink page" page = Kindai::Util.fetch_uri permalink_uri rescue Kindai::Util.fetch_uri URI.escape(permalink_uri) Nokogiri page end end
spread_at(spread_number)
click to toggle source
# File lib/kindai/book.rb, line 93 def spread_at(spread_number) Kindai::Spread.new_from_book_and_spread_number(self, spread_number) end