kj 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e6e12bb9a7c3c42861ed1ee51803ac1d59dbb87
4
- data.tar.gz: 055fdbbba8d2160bc7b429aa97fcc16388004bc5
3
+ metadata.gz: d9683cdffefc0ebcfc4f8721ef60e0260d3fcfaf
4
+ data.tar.gz: 56d48e534011a1a3904ae86c6bf4338363074761
5
5
  SHA512:
6
- metadata.gz: d5821fdc3e2385bfb2501541aefb90721323e3d327dcd1ecce8b11770ba4349215cfcea714bc476865f9966dbfce9cade52db3bb864fe51791ec18731681efbd
7
- data.tar.gz: cfb38ab333bec01f7f41e89bcd718dda9bd14ab9401a43ff10ce3a9df7f544fce2bab2ae67c82b5d82d47d9fbfcffdfd36946e08cf84f84181a5265a74ef796c
6
+ metadata.gz: ec9aa8b1ee6fe44b71583c9ed1d2d56c18c2cdf139464951cd1fe59eb919ad7f0386bbd09dfb23ce95a594416e0dcb05cf67dcd59ccd1c06c0238cad51913095
7
+ data.tar.gz: ad64557b1b09a325e0d1186e23e3b7a2c41597fa26a72292a2501dc11bbfcc34958b7527f19d975d17c4c76f25f5d8ce0a327b6bc5a9102726c2052a02f7f5b1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
data/kj.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: kj 0.0.4 ruby lib
5
+ # stub: kj 0.0.5 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "kj"
9
- s.version = "0.0.4"
9
+ s.version = "0.0.5"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["David John"]
14
- s.date = "2015-07-13"
14
+ s.date = "2015-07-21"
15
15
  s.description = "kj is a simple rubygem for accessing the King James Bible. It uses an embedded sqlite data store."
16
16
  s.email = "djohn@arch-no.org"
17
17
  s.extra_rdoc_files = [
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "db/kjb.db",
31
31
  "kj.gemspec",
32
32
  "lib/kj.rb",
33
+ "lib/kj/base.rb",
33
34
  "lib/kj/book.rb",
34
35
  "lib/kj/chapter.rb",
35
36
  "lib/kj/db.rb",
data/lib/kj.rb CHANGED
@@ -1,35 +1,30 @@
1
- require "sqlite3"
2
- require 'kj/db'
3
- require 'kj/book'
1
+ require_relative 'kj/base'
2
+ require_relative 'kj/book'
3
+ require_relative 'kj/chapter'
4
+ require_relative 'kj/verse'
4
5
 
5
6
  module Kj
6
7
 
7
8
  class Bible
8
9
 
9
10
  def book(name_or_number)
10
- if name_or_number.is_a?(Integer)
11
- book = Db.query("SELECT id, name FROM books WHERE id = ?", [name_or_number], true)
12
- else
13
- book = Db.query("SELECT id, name FROM books WHERE name = ? OR abbreviations LIKE ?", [name_or_number.to_s.downcase, "%#{name_or_number.to_s}%"], true)
14
- end
15
- Book.new(id: book['id'], name: book['name'])
11
+ Book.from_name_or_number(name_or_number)
16
12
  end
17
13
 
18
14
  def books(*names_or_numbers)
19
- if names_or_numbers.empty?
20
- @books = begin
21
- results = Db.query("SELECT id, name FROM books")
22
- results.map{ |book| Book.new(id: book['id'], name: book['name']) }
23
- end
24
- else
25
- names_or_numbers.flatten!
26
- numbers = names_or_numbers.uniq.select{|n| n.is_a?(Integer)}
27
- names = (names_or_numbers - numbers).uniq.map{|name| name.to_s.downcase}
28
- results = []
29
- results << Db.query("SELECT id, name FROM books WHERE id IN (#{numbers.join(',')})") if numbers.any?
30
- names.each{ |name| results << Db.query("SELECT id, name FROM books WHERE abbreviations LIKE ?", ["%#{name.to_s}%"]) }
31
- results.flatten.map!{|book| Book.new(id: book['id'], name: book['name'])}.uniq.sort!{ |a,b| a.id <=> b.id }
32
- end
15
+ names_or_numbers.empty? ? Book.all : Book.from_names_or_numbers(names_or_numbers)
16
+ end
17
+
18
+ def random_book
19
+ Book.random
20
+ end
21
+
22
+ def random_chapter
23
+ Chapter.random
24
+ end
25
+
26
+ def random_verse
27
+ Verse.random
33
28
  end
34
29
 
35
30
  end
@@ -0,0 +1,10 @@
1
+ require "sqlite3"
2
+ require 'kj/db'
3
+
4
+ module Kj
5
+
6
+ class Base
7
+
8
+ end
9
+
10
+ end
@@ -1,10 +1,8 @@
1
- require_relative 'chapter'
2
-
3
1
  module Kj
4
2
 
5
- class Book
3
+ class Book < Base
6
4
 
7
- attr_reader :id, :name
5
+ attr_accessor :id, :name
8
6
 
9
7
  def initialize(args)
10
8
  args.each do |k,v|
@@ -20,20 +18,54 @@ module Kj
20
18
  name
21
19
  end
22
20
 
21
+ def self.from_name_or_number(name_or_number)
22
+ if name_or_number.is_a?(Integer)
23
+ book = Db.query("SELECT id, name FROM books WHERE id = ?", [name_or_number], true)
24
+ else
25
+ book = Db.query("SELECT id, name FROM books WHERE name = ? OR abbreviations LIKE ?", [name_or_number.to_s.downcase, "%#{name_or_number.to_s}%"], true)
26
+ end
27
+ new(id: book['id'], name: book['name'])
28
+ end
29
+
30
+ def self.from_names_or_numbers(names_or_numbers)
31
+ names_or_numbers.flatten!
32
+ numbers = names_or_numbers.uniq.select{|n| n.is_a?(Integer)}
33
+ names = (names_or_numbers - numbers).uniq.map{|name| name.to_s.downcase}
34
+ results = []
35
+ results << Db.query("SELECT id, name FROM books WHERE id IN (#{numbers.join(',')})") if numbers.any?
36
+ names.each{ |name| results << Db.query("SELECT id, name FROM books WHERE abbreviations LIKE ?", ["%#{name.to_s}%"]) }
37
+ results.flatten.map!{|book| new(id: book['id'], name: book['name'])}.uniq.sort!{ |a,b| a.id <=> b.id }
38
+ end
39
+
40
+ def self.all
41
+ @all ||= begin
42
+ books = Db.query("SELECT id, name FROM books")
43
+ books.map{ |book| new(id: book['id'], name: book['name']) }
44
+ end
45
+ end
46
+
47
+ def self.count
48
+ 66
49
+ end
50
+
51
+ def self.random
52
+ from_name_or_number(rand(1..count))
53
+ end
54
+
23
55
  def chapter(number)
24
56
  chapter = Db.query("SELECT id FROM chapters WHERE book_id = ? AND number = ?", [@id, number], true)
25
- Chapter.new(id: chapter['id'], book_id: @id, book_name: name, number: number)
57
+ Chapter.new(id: chapter['id'], book: self, number: number)
26
58
  end
27
59
 
28
60
  def chapters(*numbers)
29
61
  if numbers.empty?
30
62
  @chapters ||= begin
31
63
  results = Db.query("SELECT id, number FROM chapters WHERE book_id = ?", [@id])
32
- results.map{|chapter| Chapter.new(id: chapter['id'], book_id: @id, book_name: name, number: chapter['number'])}
64
+ results.map{|chapter| Chapter.new(id: chapter['id'], book: self, number: chapter['number'])}
33
65
  end
34
66
  else
35
67
  results = Db.query("SELECT id, number FROM chapters WHERE book_id = #{@id} AND number IN (#{numbers.flatten.join(',')})")
36
- results.map{|chapter| Chapter.new(id: chapter['id'], book_id: @id, book_name: name, number: chapter['number'])}.sort!{ |a,b| a.id <=> b.id }
68
+ results.map{|chapter| Chapter.new(id: chapter['id'], book: self, number: chapter['number'])}.sort!{ |a,b| a.id <=> b.id }
37
69
  end
38
70
  end
39
71
 
@@ -1,10 +1,9 @@
1
- require_relative 'verse'
2
-
3
1
  module Kj
4
2
 
5
- class Chapter
3
+ class Chapter < Base
6
4
 
7
- attr_reader :id, :book_id, :book_name, :number
5
+ attr_accessor :id, :book_id, :number
6
+ attr_writer :book
8
7
 
9
8
  def initialize(args)
10
9
  args.each do |k,v|
@@ -16,24 +15,44 @@ module Kj
16
15
  "#{book_name} #{number}"
17
16
  end
18
17
 
18
+ def book
19
+ @book ||= begin
20
+ b = Db.query("SELECT id, name FROM books WHERE id = ?", [@book_id], true)
21
+ Book.new(id: b['id'], name: b['name'])
22
+ end
23
+ end
24
+
25
+ def book_name
26
+ book.name
27
+ end
28
+
19
29
  def to_s
20
30
  title
21
31
  end
22
32
 
33
+ def self.count
34
+ 1184
35
+ end
36
+
37
+ def self.random
38
+ chapter = Db.query("SELECT id, book_id, number FROM chapters WHERE id = ?", [rand(1..count)], true)
39
+ new(id: chapter['id'], book_id: chapter['book_id'], number: chapter['number'])
40
+ end
41
+
23
42
  def verse(verse_number)
24
43
  verse = Db.query("SELECT id FROM verses WHERE chapter_id = ? AND number = ?", [@id, verse_number], true)
25
- Verse.new(id: verse['id'], book_name: book_name, chapter_id: @id, chapter_number: @number, number: verse_number)
44
+ Verse.new(id: verse['id'], book_name: book_name, chapter: self, number: verse_number)
26
45
  end
27
46
 
28
47
  def verses(*numbers)
29
48
  if numbers.empty?
30
49
  @verses ||= begin
31
50
  results = Db.query("SELECT id, number FROM verses WHERE chapter_id = ?", [@id])
32
- results.map{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter_id: @id, chapter_number: number, number: verse['number'])}
51
+ results.map{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter: self, number: verse['number'])}
33
52
  end
34
53
  else
35
54
  results = Db.query("SELECT id, number FROM verses WHERE chapter_id = #{@id} AND number IN (#{numbers.flatten.join(',')})")
36
- results.map!{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter_id: @id, chapter_number: number, number: verse['number'])}.sort!{ |a,b| a.id <=> b.id }
55
+ results.map!{|verse| Verse.new(id: verse['id'], book_name: book_name, chapter: self, number: verse['number'])}.sort!{ |a,b| a.id <=> b.id }
37
56
  end
38
57
  end
39
58
 
@@ -2,7 +2,8 @@ module Kj
2
2
 
3
3
  class Verse
4
4
 
5
- attr_reader :id, :book_name, :chapter_id, :chapter_number, :number
5
+ attr_accessor :id, :chapter_id, :number
6
+ attr_writer :chapter
6
7
 
7
8
  def initialize(args)
8
9
  args.each do |k,v|
@@ -14,6 +15,30 @@ module Kj
14
15
  "#{book_name} #{chapter_number}:#{number}"
15
16
  end
16
17
 
18
+ def self.count
19
+ 31102
20
+ end
21
+
22
+ def self.random
23
+ verse = Db.query("SELECT id, chapter_id, number FROM verses WHERE id = ?", [rand(1..count)], true)
24
+ new(id: verse['id'], chapter_id: verse['chapter_id'], number: verse['number'])
25
+ end
26
+
27
+ def chapter
28
+ @chapter ||= begin
29
+ c = Db.query("SELECT id, book_id, number FROM chapters WHERE id = ?", [@chapter_id], true)
30
+ Chapter.new(id: c['id'], book_id: c['book_id'], number: c['number'])
31
+ end
32
+ end
33
+
34
+ def chapter_number
35
+ chapter.number
36
+ end
37
+
38
+ def book_name
39
+ chapter.book_name
40
+ end
41
+
17
42
  def to_s
18
43
  text
19
44
  end
@@ -22,6 +22,24 @@ describe "Kj" do
22
22
  expect(bible.book(:genesis)).to be_kind_of(Kj::Book)
23
23
  end
24
24
  end
25
+
26
+ describe "#random_book" do
27
+ it 'returns a Book' do
28
+ expect(bible.random_book).to be_kind_of(Kj::Book)
29
+ end
30
+ end
31
+
32
+ describe "#random_chapter" do
33
+ it 'returns a Chapter' do
34
+ expect(bible.random_chapter).to be_kind_of(Kj::Chapter)
35
+ end
36
+ end
37
+
38
+ describe "#random_verse" do
39
+ it 'returns a Verse' do
40
+ expect(bible.random_verse).to be_kind_of(Kj::Verse)
41
+ end
42
+ end
25
43
  end
26
44
 
27
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David John
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-13 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -86,6 +86,7 @@ files:
86
86
  - db/kjb.db
87
87
  - kj.gemspec
88
88
  - lib/kj.rb
89
+ - lib/kj/base.rb
89
90
  - lib/kj/book.rb
90
91
  - lib/kj/chapter.rb
91
92
  - lib/kj/db.rb