kj 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|