bomdb 0.5.0 → 0.6.1
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/Gemfile.lock +1 -1
- data/README.md +66 -8
- data/lib/bomdb/cli/application.rb +34 -13
- data/lib/bomdb/query.rb +21 -3
- data/lib/bomdb/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6045b00d06ff5e4d4ae162ef54fe995df71ab90b
|
4
|
+
data.tar.gz: f252a2454c9a02f8db6e45ebcded298c1a52ef57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40de7880d7173f51e6505b5ca829ffdd056a81122b30561cd931f49f70c970800cbcbdf88fbd7835adc4ff90eabd50d43fb51020dc9a997ca2babf630b3cfa83
|
7
|
+
data.tar.gz: c9f8a9bcae9d097675516cea81320f18c22b3f605ab3401b1222675d15a600301ebeffc5eb5b41b28ed44621fbb23887d3654e6733550a630f990d40f8600eb6
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -8,7 +8,7 @@ BomDB is a command-line tool (packaged as a Ruby gem) that provides multiple edi
|
|
8
8
|
Let's show the 1992 edition of the Book of Mormon:
|
9
9
|
|
10
10
|
```bash
|
11
|
-
$ bomdb show 1992
|
11
|
+
$ bomdb show --edition=1992
|
12
12
|
|
13
13
|
1 Nephi 1:1 I, Nephi, having been born of goodly parents, therefore I was taught somewhat in all the learning of my father...
|
14
14
|
# ... etc ...
|
@@ -18,7 +18,7 @@ Moroni 10:34 And now I bid unto all, farewell. I soon go to rest in the paradis
|
|
18
18
|
Or the 1829 printer's manuscript:
|
19
19
|
|
20
20
|
```bash
|
21
|
-
$ bomdb show 1829
|
21
|
+
$ bomdb show --edition=1829
|
22
22
|
|
23
23
|
1 Nephi 1:1 I Nephi having been born of goodly parents, therefore I was taught somewhat in all the learning of my father...
|
24
24
|
# ... etc ...
|
@@ -27,7 +27,7 @@ Moroni 10:34 And now I bid unto all farewell. I soon go to rest in the paradise
|
|
27
27
|
Suppose we want to remove the book, chapter, and verse headings from the output:
|
28
28
|
|
29
29
|
```bash
|
30
|
-
$ bomdb show 1829 --no-verses
|
30
|
+
$ bomdb show --edition=1829 --no-verses
|
31
31
|
|
32
32
|
I Nephi having been born of goodly parents, therefore I was taught somewhat in all the learning of my father...
|
33
33
|
# ... etc ...
|
@@ -37,16 +37,32 @@ And now I bid unto all farewell. I soon go to rest in the paradise of God...
|
|
37
37
|
Exclude verses in the Book of Mormon that are biblical inclusions:
|
38
38
|
|
39
39
|
```bash
|
40
|
-
$ bomdb show 1829 --exclude Bible-OT
|
40
|
+
$ bomdb show --edition=1829 --exclude Bible-OT
|
41
41
|
# ... shows 6080 verses instead of the usual 6604
|
42
42
|
```
|
43
43
|
|
44
|
+
Or, show only 1 Nephi, without Old Testament references:
|
45
|
+
|
46
|
+
```bash
|
47
|
+
$ bomdb show '1 Nephi 1-22' --exclude Bible-OT
|
48
|
+
# ... shows 563 verses in 1st Nephi (1st Nephi has 618 verses,
|
49
|
+
# but some are from the Old Testament)
|
50
|
+
```
|
51
|
+
|
52
|
+
BomDB uses the [Mericope](https://github.com/wordtreefoundation/mericope) gem to parse scriptural ranges ("pericopes"), so it is quite flexible:
|
53
|
+
|
54
|
+
```bash
|
55
|
+
$ bomdb show 'Mosiah 5:1-2,6'
|
56
|
+
Mosiah 5:1 And now it came to pass that when king Benjamin had thus spoken...
|
57
|
+
Mosiah 5:2 And they all cried with one voice, saying: Yea, we believe...
|
58
|
+
Mosiah 5:6 And now these are the words which king Benjamin desired of them...
|
59
|
+
```
|
44
60
|
|
45
61
|
### IMPORT and EXPORT portions of the database
|
46
62
|
|
47
63
|
You can import and export any part of the database, such as the books, verses, editions, and contents (text) of the database.
|
48
64
|
|
49
|
-
The github repository contains a set of "starter" json
|
65
|
+
The github repository contains a set of "starter" json files that are used to seed the database with some reasonable structure and data; however, these json files are absent in the packaged Gem. If you've cloned the github repo, you can use these files to re-create the database from scratch:
|
50
66
|
|
51
67
|
```bash
|
52
68
|
$ bundle exec bin/bomdb create
|
@@ -141,13 +157,17 @@ Note that `align` requires the [dwdiff](http://linux.die.net/man/1/dwdiff) comma
|
|
141
157
|
|
142
158
|
### Custom Queries
|
143
159
|
|
144
|
-
Here's a simple way to analyze the Book of Mormon to see the wherefore/therefore divergence leading to the [Mosiah Priority](http://signaturebookslibrary.org/new-approaches-to-the-book-of-mormon-10/) (Mosiah was written before 1 Nephi)
|
160
|
+
Here's a simple way to analyze the Book of Mormon to see the wherefore/therefore divergence leading to the [Mosiah Priority](http://signaturebookslibrary.org/new-approaches-to-the-book-of-mormon-10/) hypothesis (Mosiah was written before 1 Nephi):
|
145
161
|
|
146
162
|
```ruby
|
147
163
|
$ bundle exec irb -rbomdb
|
148
164
|
irb(main):001:0> q = BomDB::Query.new(exclude: 'Bible-OT')
|
149
165
|
=> #<BomDB::Query:0x007f90ad1cb408 @edition=1829, @exclude="Bible-OT", @headings=false>
|
150
|
-
irb(main):002:0> q.books.map
|
166
|
+
irb(main):002:0> q.books.map do |book,content|
|
167
|
+
[book,
|
168
|
+
content.scan(/wherefore/i).size,
|
169
|
+
content.scan(/therefore/i).size]
|
170
|
+
end
|
151
171
|
=> [
|
152
172
|
["1 Nephi", 99, 13], ["2 Nephi", 126, 6], ["Jacob", 53, 1],
|
153
173
|
["Enos", 6, 0], ["Jarom", 3, 0], ["Omni", 6, 0], ["Words of Mormon", 5, 0],
|
@@ -187,12 +207,48 @@ end
|
|
187
207
|
# Moroni WWWWWWWWWWWW
|
188
208
|
```
|
189
209
|
|
190
|
-
Other possible enumerables on a Query include:
|
210
|
+
Other possible enumerables on a Query object include:
|
191
211
|
|
192
212
|
- books: enumerate on each book of the Book of Mormon
|
193
213
|
- chapters: enumerate on each book and chapter of the Book of Mormon
|
194
214
|
- wordgroups(N): enumerate on consecutive N words, e.g. each 1000 words
|
195
215
|
|
216
|
+
### Custom Queries and Charts
|
217
|
+
|
218
|
+
Let's zoom in on the interesting book, Ether, where the Wherefore/Therefore crossover occurs:
|
219
|
+
|
220
|
+
```ruby
|
221
|
+
require 'bomdb'
|
222
|
+
require 'google_chart' # gem is called 'gchartrb'
|
223
|
+
|
224
|
+
q = BomDB::Query.new(range: 'Ether 1-15')
|
225
|
+
|
226
|
+
data = q.chapters.map do |(book, chapter), content|
|
227
|
+
words = content.scan(/ +/).size
|
228
|
+
wh = content.scan(/wherefore/i).size.to_f / words
|
229
|
+
th = content.scan(/therefore/i).size.to_f / words
|
230
|
+
[chapter, wh, th]
|
231
|
+
end
|
232
|
+
|
233
|
+
axis_labels = data.map(&:first)
|
234
|
+
wherefores = data.map{ |d| d[1] }
|
235
|
+
therefores = data.map{ |d| d[2] }
|
236
|
+
y_max = [wherefores.max, therefores.max].max
|
237
|
+
title = 'Wherefores/Therefores Per Word in Ether'
|
238
|
+
|
239
|
+
GoogleChart::LineChart.new('600x400', title, false) do |chart|
|
240
|
+
chart.data "Wherefores", wherefores, '2200ff'
|
241
|
+
chart.show_legend = true
|
242
|
+
chart.data "Therefores", therefores, 'ff2200'
|
243
|
+
chart.axis :y, range: [0.0, y_max], font_size: 16
|
244
|
+
chart.axis :x, range: axis_labels, font_size: 16
|
245
|
+
chart.grid x_step: 20.0, y_step: 30.0, length_segment: 1, length_blank: 0
|
246
|
+
puts chart.to_url
|
247
|
+
end
|
248
|
+
```
|
249
|
+
|
250
|
+

|
251
|
+
|
196
252
|
## Installation
|
197
253
|
|
198
254
|
Ruby 2.1 is required. You should also have a normal build environment set up, e.g. command line tools on the mac, or GCC on Linux.
|
@@ -201,6 +257,8 @@ To install BomDB for use on the command line, use `gem install`:
|
|
201
257
|
|
202
258
|
$ gem install bomdb
|
203
259
|
|
260
|
+
To install `dwdiff` on your Mac OS X system: `brew install dwdiff`, or on Ubuntu: `sudo apt-get install dwdiff`.
|
261
|
+
|
204
262
|
To include bomdb in another Ruby app, add this line to your application's `Gemfile`:
|
205
263
|
|
206
264
|
```ruby
|
@@ -10,9 +10,12 @@ module BomDB
|
|
10
10
|
|
11
11
|
|
12
12
|
desc "import FILE", "import data from FILE into database, e.g. books.json"
|
13
|
-
option :type, :type => :string, :default => nil
|
14
|
-
|
15
|
-
option :
|
13
|
+
option :type, :type => :string, :default => nil,
|
14
|
+
:description => "type of data to import, i.e. one of: books, verses, editions, contents, refs"
|
15
|
+
option :format, :type => :string, :default => 'json',
|
16
|
+
:description => "format of the data being imported. One of: json, text"
|
17
|
+
option :edition, :type => :string, :default => nil,
|
18
|
+
:description => "edition of the Book of Mormon in which to import (assumes type=contents) (required when format=text)"
|
16
19
|
def import(file)
|
17
20
|
type = (options[:type] || type_from_file(file)).downcase
|
18
21
|
format = (options[:format] || format_from_file(file)).downcase
|
@@ -40,9 +43,11 @@ module BomDB
|
|
40
43
|
|
41
44
|
|
42
45
|
|
43
|
-
desc "export TYPE", "export data from the database, e.
|
44
|
-
option :format, :type => :string, :default => 'json'
|
45
|
-
|
46
|
+
desc "export TYPE", "export data from the database, i.e. one of: books, verses, editions, contents"
|
47
|
+
option :format, :type => :string, :default => 'json',
|
48
|
+
:description => "format of the data being imported. One of: json, text"
|
49
|
+
option :editions, :type => :string, :default => :all,
|
50
|
+
:description => "edition(s) of the Book of Mormon to export. Defaults to 'all' editions."
|
46
51
|
def export(type)
|
47
52
|
format = options[:format].downcase
|
48
53
|
|
@@ -116,11 +121,13 @@ module BomDB
|
|
116
121
|
|
117
122
|
|
118
123
|
|
119
|
-
desc "show
|
124
|
+
desc "show RANGE", "show a RANGE of verses in the Book of Mormon (defaults to 1829 edition)"
|
120
125
|
option :verses, :type => :boolean, :default => true,
|
121
126
|
:description => "show book, chapter, verse annotations"
|
122
127
|
option :exclude, :type => :string, :aliases => [:x],
|
123
128
|
:description => "exclude verses that are references, e.g. Bible-OT references"
|
129
|
+
option :"exclude-only-quotations", :type => :boolean, :aliases => [:q],
|
130
|
+
:description => "don't exclude verses with references that are non-quotations"
|
124
131
|
option :sep, :type => :string, :default => " ",
|
125
132
|
:description => "separator between annotations and content, defaults to ' '"
|
126
133
|
option :linesep, :type => :string, :default => "\n",
|
@@ -131,7 +138,11 @@ module BomDB
|
|
131
138
|
:description => "show output in 'alignment' mode. Useful for debugging 'align' subcommand issues."
|
132
139
|
option :clean, :type => :boolean, :default => false,
|
133
140
|
:description => "remove punctuation and normalize text by sentence"
|
134
|
-
|
141
|
+
option :edition, :type => :string, :default => '1829',
|
142
|
+
:description => "show verses from a specific edition (see 'editions' command for list)"
|
143
|
+
option :search, :type => :string, :default => nil,
|
144
|
+
:description => "show only verses that contain the search term"
|
145
|
+
def show(range = nil)
|
135
146
|
body_format = nil
|
136
147
|
wordsep = options[:sep]
|
137
148
|
linesep = options[:linesep]
|
@@ -161,9 +172,11 @@ module BomDB
|
|
161
172
|
end
|
162
173
|
end
|
163
174
|
BomDB::Query.new(
|
164
|
-
edition: edition,
|
165
|
-
|
166
|
-
|
175
|
+
edition: options[:edition],
|
176
|
+
range: range,
|
177
|
+
search: options[:search],
|
178
|
+
exclude: options[:exclude],
|
179
|
+
exclude_only_quotations: options[:"exclude-only-quotations"]
|
167
180
|
).print(
|
168
181
|
verse_format: verse_format,
|
169
182
|
body_format: body_format,
|
@@ -222,8 +235,16 @@ module BomDB
|
|
222
235
|
map { |r| "#{r[:ref_name]} (#{r[:count]} refs)" }
|
223
236
|
puts rts.join("\n")
|
224
237
|
else
|
225
|
-
rts = BomDB.db[:refs].
|
226
|
-
|
238
|
+
rts = BomDB.db[:refs].
|
239
|
+
where(:ref_name => type).
|
240
|
+
join(:verses, :verse_id => :verse_id).
|
241
|
+
join(:books, :book_id => :book_id).
|
242
|
+
map do |r|
|
243
|
+
asterisk = r[:ref_is_quotation] ? '*' : ''
|
244
|
+
"#{r[:ref_book]} #{r[:ref_chapter]}:#{r[:ref_verse]} => " +
|
245
|
+
"#{r[:book_name]} #{r[:verse_chapter]}:#{r[:verse_number]}" +
|
246
|
+
"#{asterisk}"
|
247
|
+
end
|
227
248
|
puts rts.join("\n")
|
228
249
|
end
|
229
250
|
end
|
data/lib/bomdb/query.rb
CHANGED
@@ -2,9 +2,12 @@ require 'bomdb/models/edition'
|
|
2
2
|
|
3
3
|
module BomDB
|
4
4
|
class Query
|
5
|
-
def initialize(edition: 1829, exclude: nil, headings: false)
|
5
|
+
def initialize(edition: 1829, range: nil, search: nil, exclude: nil, exclude_only_quotations: false, headings: false)
|
6
6
|
@edition = edition
|
7
|
+
@range = range
|
8
|
+
@search = search
|
7
9
|
@exclude = exclude
|
10
|
+
@exclude_only_quotations = exclude_only_quotations
|
8
11
|
@headings = headings
|
9
12
|
end
|
10
13
|
|
@@ -23,9 +26,20 @@ module BomDB
|
|
23
26
|
select(:book_name, :verse_chapter, :verse_number, :content_body)
|
24
27
|
q.where!(:editions__edition_id => edition[:edition_id]) if @edition
|
25
28
|
q.where!(:verse_heading => nil) unless @headings
|
29
|
+
if @range
|
30
|
+
pericope = Mericope.new(@range)
|
31
|
+
pairs = pericope.ranges.map{ |r| [:verse_range_id, r] }
|
32
|
+
q.where!(Sequel::SQL::BooleanExpression.from_value_pairs(pairs, :OR))
|
33
|
+
end
|
34
|
+
if @search
|
35
|
+
q.where!(Sequel.like(Sequel.function(:LOWER, :content_body), "%#{@search.downcase}%"))
|
36
|
+
end
|
26
37
|
if @exclude
|
27
38
|
excluded_verse_ids = db[:refs].select(:verse_id).
|
28
39
|
where(:ref_name => @exclude.split(/\s*,\s*/))
|
40
|
+
if @exclude_only_quotations
|
41
|
+
excluded_verse_ids.where!(ref_is_quotation: true)
|
42
|
+
end
|
29
43
|
q.exclude!(:verses__verse_id => excluded_verse_ids)
|
30
44
|
end
|
31
45
|
q
|
@@ -83,12 +97,16 @@ module BomDB
|
|
83
97
|
io.print sep
|
84
98
|
end
|
85
99
|
begin
|
86
|
-
|
100
|
+
content_body = row[:content_body]
|
101
|
+
if @search
|
102
|
+
content_body.gsub!(@search, @search.red)
|
103
|
+
end
|
104
|
+
io.print body_format[ content_body ]
|
87
105
|
rescue TypeError
|
88
106
|
next
|
89
107
|
end
|
90
108
|
end
|
91
|
-
io.puts "Nothing
|
109
|
+
io.puts "Nothing to show" unless shown
|
92
110
|
end
|
93
111
|
end
|
94
112
|
end
|
data/lib/bomdb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bomdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Duane Johnson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|