sqlbible 1.1.0 → 1.3.0
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 +1 -1
- data/bin/sqlbible +28 -14
- data/lib/sqlbible/version.rb +1 -1
- data/lib/sqlbible.rb +29 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '095b3bc9b6735cd1df572c88d96117b96a60ebfc2bd928c01d8ef1bf5b2c5881'
|
4
|
+
data.tar.gz: 2c9cd72e62e96e81bb210e1416c660e974a24fc17018edc8165b383c74e73083
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7abadece71c1c11a3fddf7d5949e78c507ca6b74d309030d15cdd840329b08fb40af572440e3fa36430604e66ad95e952e2e46b4f3305495c5031384a869ddc
|
7
|
+
data.tar.gz: 7c568ebde272045cba9b9f8b2a23a06d2d1b8ee381ca3abeb853e7b123beaeb1598ab6323ac485e8b59d5330545e9350189975f3c11d5092a97271c480f005eb
|
data/README.md
CHANGED
@@ -19,7 +19,7 @@ bible = Sqlbible.new('kjv.sqlite')
|
|
19
19
|
# simple search
|
20
20
|
bible.search(/Jesus/)
|
21
21
|
|
22
|
-
# Sqlbible is designed to
|
22
|
+
# Sqlbible is designed to work well with Scripref references and passages
|
23
23
|
require 'scripref'
|
24
24
|
|
25
25
|
# define a reference for the gospels
|
data/bin/sqlbible
CHANGED
@@ -7,17 +7,21 @@ require 'scripref'
|
|
7
7
|
require 'sqlbible'
|
8
8
|
|
9
9
|
result = OptimistXL.options do
|
10
|
-
synopsis 'Usage:
|
10
|
+
synopsis 'Usage: sqlbible [options] [<command> [suboptions] <filename>]'
|
11
11
|
subcmd :convert, 'Convert a bible from OSIS-XML to Sqlbible format' do
|
12
|
-
opt :
|
12
|
+
opt :name, 'Name of the converted bible module or output filename of the generated .sqlbible file', type: String, required: true
|
13
|
+
opt :overwrite, 'Overwrite existing module or output file if exist', type: :Boolean, default: false
|
13
14
|
end
|
15
|
+
subcmd :list, 'Show a list of the names of the bibles in central directory'
|
14
16
|
subcmd :search, 'Search with regular expressions' do
|
17
|
+
opt :name, 'Name of the bible module filename of an .sqlbible file', type: String
|
15
18
|
opt :search, 'Regular expression to search (multiple allowed)', type: String, multi: true, required: true
|
16
19
|
opt :lang, 'Language for parsing and formatting scripture references', type: String, permitted: %w(de en), default: 'en'
|
17
20
|
opt :output, 'Output filename', type: String
|
18
21
|
opt :range, 'Search range, example: "John 1-10"', type: String
|
19
22
|
end
|
20
23
|
subcmd :text, 'Show text of references' do
|
24
|
+
opt :name, 'Name of the bible module filename of an .sqlbible file', type: String
|
21
25
|
opt :lang, 'Language for parsing and formatting scripture references', type: String, permitted: %w(de en), default: 'en'
|
22
26
|
opt :output, 'Output filename', type: String
|
23
27
|
opt :reference, 'Reference to show, example: "John 3:16; 10:27-30"', type: String, required: true
|
@@ -25,11 +29,6 @@ result = OptimistXL.options do
|
|
25
29
|
version format("sqlbible %s\nschema version %s", Sqlbible::VERSION, Sqlbible.schema_version)
|
26
30
|
end
|
27
31
|
|
28
|
-
unless filename = result.leftovers.first
|
29
|
-
$stderr.puts 'no filename given'
|
30
|
-
exit 1
|
31
|
-
end
|
32
|
-
|
33
32
|
def determine_lang_mod subopts
|
34
33
|
case l = subopts[:lang]
|
35
34
|
when 'en', nil
|
@@ -57,14 +56,29 @@ subopts = result.subcommand_options
|
|
57
56
|
|
58
57
|
case result.subcommand
|
59
58
|
when 'convert'
|
59
|
+
require 'fileutils'
|
60
60
|
require 'sqlbible/convert'
|
61
|
-
osis_fn =
|
62
|
-
|
61
|
+
unless osis_fn = result.leftovers.first
|
62
|
+
$stderr.puts 'no filename given'
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
sqlbible_fn = Sqlbible.resolve_db_filename(subopts[:name])
|
66
|
+
if !subopts[:overwrite] && File.exist?(sqlbible_fn)
|
67
|
+
$stderr.puts format('file %s exist, conversion aborted', sqlbible_fn)
|
68
|
+
exit 1
|
69
|
+
end
|
70
|
+
unless File.exist?(dir = Sqlbible.bibles_dir)
|
71
|
+
puts format('create directory %s', dir)
|
72
|
+
FileUtils.mkdir_p dir
|
73
|
+
end
|
63
74
|
if $stdout.tty?
|
64
|
-
puts "convert #{osis_fn} to #{
|
75
|
+
puts "convert #{osis_fn} to #{sqlbible_fn} ..."
|
65
76
|
end
|
66
|
-
Sqlbible.convert osis_fn,
|
77
|
+
Sqlbible.convert osis_fn, sqlbible_fn
|
67
78
|
exit
|
79
|
+
when 'list'
|
80
|
+
puts 'Available bible names:'
|
81
|
+
puts Sqlbible.bible_names.join("\n")
|
68
82
|
when 'search'
|
69
83
|
searches = subopts[:search]
|
70
84
|
lang_mod = determine_lang_mod(subopts)
|
@@ -74,8 +88,8 @@ when 'search'
|
|
74
88
|
else
|
75
89
|
range = nil
|
76
90
|
end
|
77
|
-
out = determine_out
|
78
|
-
bible = Sqlbible.new(
|
91
|
+
out = determine_out(subopts)
|
92
|
+
bible = Sqlbible.new(subopts[:name])
|
79
93
|
regexes = searches.map {|s| Regexp.new(s)}
|
80
94
|
f = Scripref::Formatter.new(lang_mod, bookformat: :abbrev)
|
81
95
|
bible.search(regexes, range: range).each do |v|
|
@@ -86,7 +100,7 @@ when 'text'
|
|
86
100
|
p = Scripref::Parser.new(lang_mod)
|
87
101
|
f = Scripref::Formatter.new(lang_mod, bookformat: :abbrev)
|
88
102
|
ref = p.parse(subopts[:reference])
|
89
|
-
bible = Sqlbible.new(
|
103
|
+
bible = Sqlbible.new(subopts[:name])
|
90
104
|
out = determine_out subopts
|
91
105
|
bible.reference(ref).flatten.each do |v|
|
92
106
|
out.puts format_verse(f, v)
|
data/lib/sqlbible/version.rb
CHANGED
data/lib/sqlbible.rb
CHANGED
@@ -8,8 +8,14 @@ require_relative 'sqlbible/version'
|
|
8
8
|
|
9
9
|
class Sqlbible
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
attr_reader :db_filename
|
12
|
+
|
13
|
+
def initialize db_name
|
14
|
+
@db_filename = Sqlbible.resolve_db_filename(db_name)
|
15
|
+
unless File.exist? @db_filename
|
16
|
+
fail ArgumentError, format('database %s not found, file %s does not exist', db_name, @db_filename)
|
17
|
+
end
|
18
|
+
@db = SQLite3::Database.new(@db_filename)
|
13
19
|
@db.enable_load_extension(true)
|
14
20
|
pcre_extension_file = ENV['SQLITE_PCRE_EXTENSION']
|
15
21
|
@db.load_extension(pcre_extension_file) if pcre_extension_file
|
@@ -37,7 +43,7 @@ class Sqlbible
|
|
37
43
|
if range
|
38
44
|
passages = Array(range).select {|e| e.kind_of? Scripref::Passage}
|
39
45
|
passages.size.times {where_arr << 'rowid between ? and ?'}
|
40
|
-
where_arr
|
46
|
+
where_arr = [or_join_where(where_arr)]
|
41
47
|
args = passages.map {|p| passage2rowids(p)}.flatten
|
42
48
|
end
|
43
49
|
searches.flatten.each do |o|
|
@@ -66,13 +72,24 @@ class Sqlbible
|
|
66
72
|
end
|
67
73
|
end
|
68
74
|
|
75
|
+
@bibles_dir = File.join(Dir.home, '.sqlbible/bibles')
|
76
|
+
|
69
77
|
class << self
|
70
78
|
|
79
|
+
attr_reader :bibles_dir
|
80
|
+
|
71
81
|
# Get the database schema as string
|
72
82
|
def db_schema
|
73
83
|
File.read(File.join(__dir__, '../schema.sql'))
|
74
84
|
end
|
75
85
|
|
86
|
+
# Get a list of the names of the bibles in bibles_dir
|
87
|
+
def bible_names
|
88
|
+
Dir.chdir bibles_dir do
|
89
|
+
Dir['*.sqlbible'].map {|fn| fn.sub(/\.sqlbible$/, '')}.sort
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
76
93
|
# Get an array of the major and minor version of the database schema of the
|
77
94
|
# actual version of the lib
|
78
95
|
def schema_major_minor
|
@@ -96,6 +113,15 @@ class Sqlbible
|
|
96
113
|
select_schema_major_minor(db).join('.')
|
97
114
|
end
|
98
115
|
|
116
|
+
def resolve_db_filename db_name
|
117
|
+
fn = db_name.to_s
|
118
|
+
if File.basename(fn) == fn
|
119
|
+
File.join(bibles_dir, format('%s.sqlbible', fn.sub(/\.sqlbible$/, '')))
|
120
|
+
else
|
121
|
+
fn
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
99
125
|
end
|
100
126
|
|
101
127
|
private
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqlbible
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
|
+
original_platform: ''
|
6
7
|
authors:
|
7
8
|
- Jan Friedrich
|
8
9
|
bindir: bin
|
9
10
|
cert_chain: []
|
10
|
-
date: 2024-
|
11
|
+
date: 2024-12-13 00:00:00.000000000 Z
|
11
12
|
dependencies:
|
12
13
|
- !ruby/object:Gem::Dependency
|
13
14
|
name: nokogiri
|