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 +4 -4
- data/VERSION +1 -1
- data/kj.gemspec +4 -3
- data/lib/kj.rb +18 -23
- data/lib/kj/base.rb +10 -0
- data/lib/kj/book.rb +39 -7
- data/lib/kj/chapter.rb +26 -7
- data/lib/kj/verse.rb +26 -1
- data/spec/kj_spec.rb +18 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9683cdffefc0ebcfc4f8721ef60e0260d3fcfaf
|
4
|
+
data.tar.gz: 56d48e534011a1a3904ae86c6bf4338363074761
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec9aa8b1ee6fe44b71583c9ed1d2d56c18c2cdf139464951cd1fe59eb919ad7f0386bbd09dfb23ce95a594416e0dcb05cf67dcd59ccd1c06c0238cad51913095
|
7
|
+
data.tar.gz: ad64557b1b09a325e0d1186e23e3b7a2c41597fa26a72292a2501dc11bbfcc34958b7527f19d975d17c4c76f25f5d8ce0a327b6bc5a9102726c2052a02f7f5b1
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
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.
|
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.
|
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-
|
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
|
-
|
2
|
-
|
3
|
-
|
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
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
data/lib/kj/base.rb
ADDED
data/lib/kj/book.rb
CHANGED
@@ -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
|
-
|
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'],
|
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'],
|
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'],
|
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
|
|
data/lib/kj/chapter.rb
CHANGED
@@ -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
|
-
|
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,
|
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,
|
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,
|
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
|
|
data/lib/kj/verse.rb
CHANGED
@@ -2,7 +2,8 @@ module Kj
|
|
2
2
|
|
3
3
|
class Verse
|
4
4
|
|
5
|
-
|
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
|
data/spec/kj_spec.rb
CHANGED
@@ -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
|
+
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-
|
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
|