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 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