scriptura 0.0.2 → 0.0.3
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/README.md +13 -12
- data/lib/scriptura.rb +0 -5
- data/lib/scriptura/metadata.yml +4024 -0
- data/lib/scriptura/scripture.rb +12 -0
- data/lib/scriptura/scripture_book.rb +31 -19
- data/lib/scriptura/scripture_chapter.rb +25 -13
- data/lib/scriptura/scripture_reference.rb +25 -27
- data/lib/scriptura/scripture_verse.rb +30 -17
- data/lib/scriptura/version.rb +5 -0
- metadata +58 -16
- data/lib/scriptura/data.rb +0 -1576
data/lib/scriptura/scripture.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
module Scriptura
|
2
4
|
module Scripture
|
3
5
|
def self.old_testament_books
|
@@ -23,5 +25,15 @@ module Scriptura
|
|
23
25
|
def self.book_names
|
24
26
|
books.map(&:name)
|
25
27
|
end
|
28
|
+
|
29
|
+
def self.metadata
|
30
|
+
@metadata ||= begin
|
31
|
+
YAML.load_file('lib/scriptura/metadata.yml')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.find_book_hash attribute, value
|
36
|
+
metadata.values.find { |book| book[attribute.to_s] == value }
|
37
|
+
end
|
26
38
|
end
|
27
39
|
end
|
@@ -1,21 +1,26 @@
|
|
1
|
+
require 'scriptura/scripture'
|
2
|
+
|
1
3
|
module Scriptura
|
2
4
|
class ScriptureBook
|
5
|
+
attr_reader :book_number
|
6
|
+
alias_method :number, :book_number
|
7
|
+
|
3
8
|
def initialize(number)
|
4
|
-
|
5
|
-
|
6
|
-
@
|
9
|
+
fail ArgumentError, 'book number cannot be converted to an integer' unless number.respond_to?(:to_i)
|
10
|
+
fail DoesNotExist, 'Book number should be within 1-66' unless (1..66).cover?(number.to_i)
|
11
|
+
@book_number = number.to_i
|
7
12
|
end
|
8
13
|
|
9
|
-
def self.find_by_name
|
10
|
-
hash =
|
11
|
-
|
12
|
-
|
14
|
+
def self.find_by_name(name)
|
15
|
+
hash = Scripture.find_book_hash(:name, name)
|
16
|
+
fail "Book by the name #{name} was not found! Check if there was a spelling error.. or try initializing it with a book number" if hash.nil?
|
17
|
+
new(hash['number'])
|
13
18
|
end
|
14
19
|
|
15
|
-
def self.find
|
16
|
-
hash =
|
17
|
-
|
18
|
-
|
20
|
+
def self.find(string_id)
|
21
|
+
hash = Scripture.find_book_hash(:string_id, string_id)
|
22
|
+
fail "Book by the string_id #{string_id} was not found! Check if there was a spelling error.. or try initializing it with a book number" if hash.nil?
|
23
|
+
new(hash['number'])
|
19
24
|
end
|
20
25
|
|
21
26
|
def name
|
@@ -30,16 +35,12 @@ module Scriptura
|
|
30
35
|
book_hash['chapters'].count
|
31
36
|
end
|
32
37
|
|
33
|
-
def number
|
34
|
-
book_hash['number']
|
35
|
-
end
|
36
|
-
|
37
38
|
def first_chapter
|
38
|
-
@first_chapter ||= ScriptureChapter.new(
|
39
|
+
@first_chapter ||= ScriptureChapter.new(number, 1)
|
39
40
|
end
|
40
41
|
|
41
42
|
def last_chapter
|
42
|
-
@last_chapter ||= ScriptureChapter.new(
|
43
|
+
@last_chapter ||= ScriptureChapter.new(number, number_of_chapters)
|
43
44
|
end
|
44
45
|
|
45
46
|
def first_chapter_number
|
@@ -57,11 +58,22 @@ module Scriptura
|
|
57
58
|
def string_id
|
58
59
|
book_hash['string_id']
|
59
60
|
end
|
60
|
-
|
61
|
+
|
62
|
+
def to_s
|
63
|
+
name
|
64
|
+
end
|
65
|
+
|
66
|
+
def ==(other)
|
67
|
+
return false unless other.is_a?(ScriptureBook)
|
68
|
+
book_number == other.book_number
|
69
|
+
end
|
70
|
+
|
61
71
|
private
|
62
72
|
|
63
73
|
def book_hash
|
64
|
-
@book_hash ||=
|
74
|
+
@book_hash ||= Scripture.metadata[@book_number.to_i]
|
65
75
|
end
|
76
|
+
|
77
|
+
class DoesNotExist < StandardError; end
|
66
78
|
end
|
67
79
|
end
|
@@ -1,17 +1,17 @@
|
|
1
|
+
require 'scriptura/scripture_book'
|
2
|
+
|
1
3
|
module Scriptura
|
2
4
|
class ScriptureChapter
|
3
|
-
|
5
|
+
attr_reader :scripture_book
|
6
|
+
attr_reader :chapter_number
|
7
|
+
alias_method :number, :chapter_number
|
4
8
|
|
5
|
-
def initialize
|
9
|
+
def initialize(book_number, chapter_number)
|
6
10
|
@scripture_book = ScriptureBook.new(book_number)
|
7
|
-
|
8
|
-
|
9
|
-
@
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def number
|
14
|
-
chapter_hash['number']
|
11
|
+
fail ArgumentError, 'chapter number cannot be converted to an integer' unless chapter_number.respond_to?(:to_i)
|
12
|
+
fail 'book number should be within 1-66' unless (1..66).cover?(book_number.to_i)
|
13
|
+
@chapter_number = chapter_number.to_i
|
14
|
+
fail DoesNotExist, 'chapter does not exist' if chapter_hash.nil?
|
15
15
|
end
|
16
16
|
|
17
17
|
def number_of_verses
|
@@ -19,11 +19,11 @@ module Scriptura
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def first_verse
|
22
|
-
@first_verse = ScriptureVerse.new(scripture_book.number,
|
22
|
+
@first_verse = ScriptureVerse.new(scripture_book.number, number, 1)
|
23
23
|
end
|
24
24
|
|
25
25
|
def last_verse
|
26
|
-
@first_verse = ScriptureVerse.new(scripture_book.number,
|
26
|
+
@first_verse = ScriptureVerse.new(scripture_book.number, number, number_of_verses)
|
27
27
|
end
|
28
28
|
|
29
29
|
def first_verse_number
|
@@ -34,10 +34,22 @@ module Scriptura
|
|
34
34
|
last_verse.number
|
35
35
|
end
|
36
36
|
|
37
|
+
def to_s
|
38
|
+
"#{scripture_book} #{@chapter_number}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def ==(other)
|
42
|
+
return false unless other.is_a?(ScriptureChapter)
|
43
|
+
scripture_book == other.scripture_book &&
|
44
|
+
chapter_number == other.chapter_number
|
45
|
+
end
|
46
|
+
|
37
47
|
private
|
38
48
|
|
39
49
|
def chapter_hash
|
40
|
-
@chapter_hash ||= @scripture_book.to_hash['chapters']
|
50
|
+
@chapter_hash ||= @scripture_book.to_hash['chapters'][@chapter_number.to_i]
|
41
51
|
end
|
52
|
+
|
53
|
+
class DoesNotExist < StandardError; end
|
42
54
|
end
|
43
55
|
end
|
@@ -1,55 +1,53 @@
|
|
1
|
+
require 'scriptura/scripture_verse'
|
2
|
+
|
1
3
|
module Scriptura
|
2
4
|
class ScriptureReference
|
3
|
-
|
4
|
-
|
5
|
+
attr_reader :start_verse
|
6
|
+
attr_reader :end_verse
|
5
7
|
|
6
|
-
def initialize
|
8
|
+
def initialize(start_verse, end_verse)
|
7
9
|
@start_verse = start_verse
|
8
10
|
@end_verse = end_verse
|
9
11
|
end
|
10
12
|
|
11
13
|
def within_same_book?
|
12
|
-
start_verse.scripture_book
|
14
|
+
start_verse.scripture_book == end_verse.scripture_book
|
13
15
|
end
|
14
16
|
|
15
17
|
def within_same_chapter?
|
16
|
-
|
17
|
-
start_verse.scripture_chapter.number == end_verse.scripture_chapter.number
|
18
|
+
start_verse.scripture_chapter == end_verse.scripture_chapter
|
18
19
|
end
|
19
|
-
|
20
|
+
|
20
21
|
def spans_entire_book?
|
21
|
-
|
22
|
-
start_verse
|
23
|
-
|
24
|
-
end_verse.scripture_chapter.number == end_verse.scripture_book.last_chapter.number &&
|
25
|
-
end_verse.number == end_verse.scripture_chapter.last_verse.number
|
22
|
+
scripture_book = start_verse.scripture_book
|
23
|
+
start_verse == scripture_book.first_chapter.first_verse &&
|
24
|
+
end_verse == scripture_book.last_chapter.last_verse
|
26
25
|
end
|
27
26
|
|
28
27
|
def spans_entire_chapter?
|
29
|
-
|
30
|
-
start_verse
|
31
|
-
|
28
|
+
scripture_chapter = start_verse.scripture_chapter
|
29
|
+
start_verse == scripture_chapter.first_verse &&
|
30
|
+
end_verse == scripture_chapter.last_verse
|
32
31
|
end
|
33
32
|
|
34
33
|
def spans_single_verse?
|
35
|
-
|
36
|
-
start_verse.number == end_verse.number
|
34
|
+
start_verse == end_verse
|
37
35
|
end
|
38
36
|
|
39
37
|
def to_s
|
40
|
-
case
|
41
|
-
when
|
42
|
-
start_verse.scripture_book.
|
43
|
-
when
|
44
|
-
|
45
|
-
when
|
46
|
-
|
38
|
+
case
|
39
|
+
when spans_entire_book?
|
40
|
+
start_verse.scripture_book.to_s
|
41
|
+
when spans_entire_chapter?
|
42
|
+
start_verse.scripture_chapter.to_s
|
43
|
+
when spans_single_verse?
|
44
|
+
start_verse.to_s
|
47
45
|
when within_same_chapter?
|
48
|
-
"#{start_verse
|
46
|
+
"#{start_verse}-#{end_verse.number}"
|
49
47
|
when within_same_book?
|
50
|
-
"#{start_verse
|
48
|
+
"#{start_verse} - #{end_verse.scripture_chapter.number}:#{end_verse.number}"
|
51
49
|
else
|
52
|
-
"#{start_verse
|
50
|
+
"#{start_verse} - #{end_verse}"
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
@@ -1,37 +1,50 @@
|
|
1
|
+
require 'scriptura/scripture_chapter'
|
2
|
+
|
1
3
|
module Scriptura
|
2
4
|
class ScriptureVerse
|
3
|
-
|
4
|
-
|
5
|
+
attr_reader :scripture_book
|
6
|
+
attr_reader :scripture_chapter
|
7
|
+
attr_reader :verse_number
|
8
|
+
alias_method :number, :verse_number
|
5
9
|
|
6
|
-
def initialize
|
10
|
+
def initialize(*args)
|
7
11
|
case
|
8
12
|
when args.count == 1 && args[0].is_a?(Fixnum)
|
9
|
-
|
10
|
-
book_number, chapter_number, verse_number = de_normalize(args[0])
|
11
|
-
when args.count == 3
|
13
|
+
fail ArgumentError, 'normalized value of scripture verse cannot be converted to an integer' unless args[0].respond_to?(:to_i)
|
14
|
+
book_number, chapter_number, verse_number = de_normalize(args[0])
|
15
|
+
when args.count == 3
|
12
16
|
book_number, chapter_number, verse_number = args
|
13
17
|
end
|
14
18
|
@scripture_chapter = ScriptureChapter.new(book_number, chapter_number)
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
@scripture_book = @scripture_chapter.scripture_book
|
20
|
+
fail ArgumentError, 'verse number cannot be converted to an integer' unless verse_number.respond_to?(:to_i)
|
21
|
+
fail DoesNotExist, 'verse number does not exist' unless (1..@scripture_chapter.number_of_verses).cover? verse_number.to_i
|
22
|
+
@verse_number = verse_number.to_i
|
18
23
|
end
|
19
24
|
|
20
|
-
def
|
21
|
-
|
25
|
+
def normalize
|
26
|
+
scripture_book.number * 1_000_000 + scripture_chapter.number * 1000 + @verse_number
|
22
27
|
end
|
23
28
|
|
24
|
-
def
|
25
|
-
|
29
|
+
def to_s
|
30
|
+
"#{scripture_chapter}:#{number}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def ==(other)
|
34
|
+
return false unless other.is_a?(ScriptureVerse)
|
35
|
+
scripture_book == other.scripture_book &&
|
36
|
+
scripture_chapter == other.scripture_chapter &&
|
37
|
+
verse_number == other.verse_number
|
26
38
|
end
|
27
39
|
|
28
|
-
private
|
40
|
+
private
|
29
41
|
|
30
|
-
def de_normalize
|
31
|
-
quotient, verse_number = number.divmod(1000)
|
32
|
-
book_number, chapter_number = quotient.divmod(1000)
|
42
|
+
def de_normalize(number)
|
43
|
+
quotient, verse_number = number.divmod(1000)
|
44
|
+
book_number, chapter_number = quotient.divmod(1000)
|
33
45
|
[book_number, chapter_number, verse_number]
|
34
46
|
end
|
35
47
|
|
48
|
+
class DoesNotExist < StandardError; end
|
36
49
|
end
|
37
50
|
end
|
metadata
CHANGED
@@ -1,46 +1,89 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scriptura
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gagan Awhad
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: safe_yaml
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
|
-
- -
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
18
46
|
- !ruby/object:Gem::Version
|
19
47
|
version: '0'
|
20
48
|
type: :development
|
21
49
|
prerelease: false
|
22
50
|
version_requirements: !ruby/object:Gem::Requirement
|
23
51
|
requirements:
|
24
|
-
- -
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
25
60
|
- !ruby/object:Gem::Version
|
26
61
|
version: '0'
|
27
|
-
|
28
|
-
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: A ruby library that attempts to provide an intuitive API for operations
|
70
|
+
on meta information about the Bible
|
29
71
|
email:
|
30
72
|
- gagan.a.awhad@gmail.com
|
31
73
|
executables: []
|
32
74
|
extensions: []
|
33
75
|
extra_rdoc_files: []
|
34
76
|
files:
|
35
|
-
-
|
77
|
+
- LICENSE
|
78
|
+
- README.md
|
79
|
+
- lib/scriptura.rb
|
80
|
+
- lib/scriptura/metadata.yml
|
36
81
|
- lib/scriptura/scripture.rb
|
37
82
|
- lib/scriptura/scripture_book.rb
|
38
83
|
- lib/scriptura/scripture_chapter.rb
|
39
84
|
- lib/scriptura/scripture_reference.rb
|
40
85
|
- lib/scriptura/scripture_verse.rb
|
41
|
-
- lib/scriptura.rb
|
42
|
-
- README.md
|
43
|
-
- LICENSE
|
86
|
+
- lib/scriptura/version.rb
|
44
87
|
homepage: https://www.github.com/gaganawhad/scriptura
|
45
88
|
licenses: []
|
46
89
|
metadata: {}
|
@@ -50,20 +93,19 @@ require_paths:
|
|
50
93
|
- lib
|
51
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
52
95
|
requirements:
|
53
|
-
- -
|
96
|
+
- - ">="
|
54
97
|
- !ruby/object:Gem::Version
|
55
98
|
version: '0'
|
56
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
100
|
requirements:
|
58
|
-
- -
|
101
|
+
- - ">="
|
59
102
|
- !ruby/object:Gem::Version
|
60
103
|
version: '0'
|
61
104
|
requirements: []
|
62
105
|
rubyforge_project:
|
63
|
-
rubygems_version: 2.
|
106
|
+
rubygems_version: 2.4.6
|
64
107
|
signing_key:
|
65
108
|
specification_version: 4
|
66
|
-
summary:
|
67
|
-
about the Bible
|
109
|
+
summary: A ruby library that attempts to provide an intuitive API for operations on
|
110
|
+
meta information about the Bible
|
68
111
|
test_files: []
|
69
|
-
has_rdoc:
|