Class: Kj::Chapter

Inherits:
Base
  • Object
show all
Defined in:
lib/kj/chapter.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Chapter

Returns a new instance of Chapter.



8
9
10
11
12
# File 'lib/kj/chapter.rb', line 8

def initialize(args)
  args.each do |k,v|
    instance_variable_set("@#{k}", v) unless v.nil?
  end
end

Instance Attribute Details

#bookObject



18
19
20
21
22
23
# File 'lib/kj/chapter.rb', line 18

def book
  @book ||= begin
    b = Db.query("SELECT id, name, permalink FROM books WHERE id = ?", [book_id], true)
    Book.new(id: b['id'], name: b['name'], permalink: b['permalink'])
  end
end

#book_idObject

Returns the value of attribute book_id.



5
6
7
# File 'lib/kj/chapter.rb', line 5

def book_id
  @book_id
end

#idObject

Returns the value of attribute id.



5
6
7
# File 'lib/kj/chapter.rb', line 5

def id
  @id
end

#numberObject

Returns the value of attribute number.



5
6
7
# File 'lib/kj/chapter.rb', line 5

def number
  @number
end

Class Method Details

.countObject



57
58
59
# File 'lib/kj/chapter.rb', line 57

def self.count
  1184
end

.randomObject



61
62
63
64
# File 'lib/kj/chapter.rb', line 61

def self.random
  chapter = Db.query("SELECT id, book_id, number FROM chapters WHERE id = ?", [rand(1..count)], true)
  new(id: chapter['id'], book_id: chapter['book_id'], number: chapter['number'])
end

Instance Method Details

#book_nameObject



25
26
27
# File 'lib/kj/chapter.rb', line 25

def book_name
  book.name
end


29
30
31
# File 'lib/kj/chapter.rb', line 29

def book_permalink
  book.permalink
end

#nextObject



37
38
39
40
41
42
43
44
45
# File 'lib/kj/chapter.rb', line 37

def next
  @next ||= begin
    c = Db.query("SELECT id, book_id, number FROM chapters WHERE id > ? order by id asc limit 1", [id], true)
    self.class.new(id: c['id'], book_id: c['book_id'], number: c['number'])
    rescue Kj::Iniquity
      c = Db.query("SELECT id, book_id, number FROM chapters WHERE id = ?", [1], true)
      self.class.new(id: c['id'], book_id: c['book_id'], number: c['number'])
  end
end

#prevObject



47
48
49
50
51
52
53
54
55
# File 'lib/kj/chapter.rb', line 47

def prev
  @prev ||= begin
    c = Db.query("SELECT id, book_id, number FROM chapters WHERE id < ? order by id desc limit 1", [id], true)
    self.class.new(id: c['id'], book_id: c['book_id'], number: c['number'])
    rescue Kj::Iniquity
      c = Db.query("SELECT id, book_id, number FROM chapters WHERE id = ?", [self.class.count], true)
      self.class.new(id: c['id'], book_id: c['book_id'], number: c['number'])
  end
end

#titleObject



14
15
16
# File 'lib/kj/chapter.rb', line 14

def title
  "#{book_name} #{number}"
end

#to_sObject



33
34
35
# File 'lib/kj/chapter.rb', line 33

def to_s
  title
end

#verse(verse_number) ⇒ Object



66
67
68
69
# File 'lib/kj/chapter.rb', line 66

def verse(verse_number)
  verse = Db.query("SELECT id FROM verses WHERE chapter_id = ? AND number = ?", [id, verse_number], true)
  Verse.new(id: verse['id'], book_name: book_name, chapter_id: id, number: verse_number)
end

#verses(*numbers) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/kj/chapter.rb', line 71

def verses(*numbers)
  if numbers.empty?
    @verses ||= begin
      results = Db.query("SELECT id, number FROM verses WHERE chapter_id = ?", [id])
      results.map{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter_id: id, number: verse['number'])}
    end
  else
    results = Db.query("SELECT id, number FROM verses WHERE chapter_id = #{id} AND number IN (#{numbers.flatten.join(',')})")
    results.map!{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter_id: id, number: verse['number'])}.sort!{ |a,b| a.id <=> b.id }
  end
end