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

Public Instance Methods

alt_author() click to toggle source
# File lib/kindai/book.rb, line 68
def alt_author
  metadata_like 'creator'
rescue
  metadata_like 'publisher'
end
author() click to toggle source
# File lib/kindai/book.rb, line 62
def author
  metadata_like 'creator:NDLNH'
rescue
  alt_author
end
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
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
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