sqlbible 1.8.0 → 1.10.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/bin/sqlbible +166 -80
- data/lib/sqlbible/version.rb +1 -1
- data/lib/sqlbible.rb +2 -1
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 435728b125a8af87f99d9e0227de96a537f4525274ebdae22191d9de1f2d04a8
|
|
4
|
+
data.tar.gz: bba7f1ceb9626222a92a18773491764be9944261a55f42998cf17328d9034e44
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e3deefdfdd74197c1b95cf1db6c2983694f759f4ffd2abd393ff7d69b7949557e5cacd1057f9cf365dfd6dcefe10c240381ecbe64e3c50664f00cfcd97ff737a
|
|
7
|
+
data.tar.gz: e0eaf3f6270f5feda71c454fe0aa11de540e8081cc180a4027db86ee94ed912426e0ae3a7fd1c860532dae374aa156ab5be7f0d8b90f8da2e6509d788077f9a7
|
data/bin/sqlbible
CHANGED
|
@@ -3,112 +3,198 @@
|
|
|
3
3
|
# frozen_string_literal: false
|
|
4
4
|
|
|
5
5
|
require 'optimist'
|
|
6
|
+
require 'reline'
|
|
6
7
|
require 'scripref'
|
|
7
8
|
require 'sqlbible'
|
|
8
9
|
require 'sqlbible/ansicolor'
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
if b = Sqlbible.bible
|
|
12
|
-
default_bible_param[:default] = b.to_s
|
|
13
|
-
end
|
|
11
|
+
class Cli
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
def run
|
|
14
|
+
parse_args
|
|
15
|
+
process_by_opts
|
|
16
|
+
rescue SystemExit
|
|
17
|
+
rescue Exception => e
|
|
18
|
+
$stderr.puts e.message
|
|
19
|
+
exit 1
|
|
20
|
+
end
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
synopsis 'Usage: sqlbible [options] [search regexes]*'
|
|
21
|
-
opt :bible, 'Name of the bible module filename of an .sqlbible file', type: String, **default_bible_param
|
|
22
|
-
opt :colorize, 'Colorize output', default: Sqlbible.colorize
|
|
23
|
-
opt :info, 'Show infos for installed bibles'
|
|
24
|
-
opt :lang, 'Language for parsing and formatting scripture references', type: String, permitted: %w(de en), default: Sqlbible.lang.to_s
|
|
25
|
-
opt :output, 'Output filename', type: String
|
|
26
|
-
opt :pager, 'Use pager for terminal output', default: Sqlbible.pager
|
|
27
|
-
opt :reference, 'Reference to show or search, example: "John 3:16; 10:27-30"', type: String
|
|
28
|
-
version format("sqlbible %s\nschema version %s", Sqlbible::VERSION, Sqlbible.schema_version)
|
|
29
|
-
end
|
|
22
|
+
private
|
|
30
23
|
|
|
31
|
-
def
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
else
|
|
38
|
-
fail format('lang option %s is not supported', l)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
24
|
+
def parse_args
|
|
25
|
+
default_bible_param = {}
|
|
26
|
+
if b = Sqlbible.bible
|
|
27
|
+
default_bible_param[:default] = b.to_s
|
|
28
|
+
end
|
|
29
|
+
explizit_opts = Set.new
|
|
41
30
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
31
|
+
@opts = Optimist.options do
|
|
32
|
+
synopsis 'Usage: sqlbible [options] [search regexes]*'
|
|
33
|
+
opt :bible, 'Name of the bible module or filename of an .sqlbible file', type: String, **default_bible_param
|
|
34
|
+
opt :color, 'Colorize output', default: Sqlbible.color do |v|
|
|
35
|
+
explizit_opts << :color
|
|
36
|
+
end
|
|
37
|
+
opt :env, 'Show infos of the sqlbible environment: installed bibles with schema versions'
|
|
38
|
+
opt :lang, 'Language for parsing and formatting scripture references', type: String, permitted: %w(de en), default: Sqlbible.lang.to_s
|
|
39
|
+
opt :output, 'Output filename', type: String
|
|
40
|
+
opt :pager, 'Use pager for terminal output', default: Sqlbible.pager
|
|
41
|
+
opt :reference, 'Reference to show or search, example: "John 3:16; 10:27-30"', type: String
|
|
42
|
+
opt :stat, 'Statistics level', type: Integer, permitted: (0..2), default: Sqlbible.stat_level
|
|
43
|
+
version format("sqlbible %s\nschema version %s", Sqlbible::VERSION, Sqlbible.schema_version)
|
|
46
44
|
end
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
|
|
46
|
+
unless explizit_opts.include? :color
|
|
47
|
+
if !$stdout.tty? || @opts[:output]
|
|
48
|
+
@opts[:color] = false
|
|
49
|
+
end
|
|
50
50
|
end
|
|
51
|
-
else
|
|
52
|
-
yield $stdout
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
51
|
|
|
56
|
-
|
|
57
|
-
ref = f.format(v.scripref_passage)
|
|
58
|
-
if opts[:colorize]
|
|
59
|
-
Ansicolor.apply(ref, Sqlbible.color_reference)
|
|
60
|
-
else
|
|
61
|
-
ref
|
|
52
|
+
@regexes = ARGV.map {|s| Regexp.new(s)}
|
|
62
53
|
end
|
|
63
|
-
end
|
|
64
54
|
|
|
65
|
-
def
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
def process_by_opts
|
|
56
|
+
if @opts[:env]
|
|
57
|
+
show_env
|
|
58
|
+
else
|
|
59
|
+
init_processing
|
|
60
|
+
do_processing
|
|
70
61
|
end
|
|
71
62
|
end
|
|
72
|
-
text
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def format_verse_line opts, f, v, regexes=[]
|
|
76
|
-
format('%s: %s', format_verse_ref(opts, f, v), format_text(opts, v, regexes))
|
|
77
|
-
end
|
|
78
63
|
|
|
79
|
-
|
|
80
|
-
if opts[:info]
|
|
64
|
+
def show_env
|
|
81
65
|
names = Sqlbible.bible_names
|
|
82
66
|
max_size = names.map(&:size).max
|
|
83
67
|
names.each do |n|
|
|
84
68
|
puts format("%-#{max_size}s (schema version: %s)", n, Sqlbible.new(n).schema_version)
|
|
85
69
|
end
|
|
86
|
-
return
|
|
87
70
|
end
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
|
|
72
|
+
def init_processing
|
|
73
|
+
m = case l = @opts[:lang]
|
|
74
|
+
when 'en', nil
|
|
75
|
+
Scripref::English
|
|
76
|
+
when 'de'
|
|
77
|
+
Scripref::German
|
|
78
|
+
else
|
|
79
|
+
fail format('lang option %s is not supported', l)
|
|
80
|
+
end
|
|
81
|
+
@parser = Scripref::Parser.new(m)
|
|
82
|
+
@formatter = Scripref::Formatter.new(m, abbrev_level: 1)
|
|
83
|
+
if r = @opts[:reference]
|
|
84
|
+
@reference = @parser.parse(r)
|
|
85
|
+
else
|
|
86
|
+
@reference = nil
|
|
87
|
+
end
|
|
88
|
+
@bible = Sqlbible.new(@opts[:bible])
|
|
89
|
+
@verse_count = 0
|
|
90
|
+
@matches = []
|
|
95
91
|
end
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
92
|
+
|
|
93
|
+
def do_processing
|
|
94
|
+
open_out do |out|
|
|
95
|
+
if @regexes.size > 0
|
|
96
|
+
@bible.search(@regexes, range: @reference).each do |v|
|
|
97
|
+
process_verse out, v
|
|
98
|
+
end
|
|
99
|
+
else
|
|
100
|
+
@bible.reference(Array(@reference)).flatten.each do |v|
|
|
101
|
+
process_verse out, v
|
|
102
|
+
end
|
|
102
103
|
end
|
|
104
|
+
show_stats out
|
|
103
105
|
end
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def open_out
|
|
109
|
+
if fn = @opts[:output]
|
|
110
|
+
File.open(fn, 'w') do |f|
|
|
111
|
+
yield f
|
|
112
|
+
end
|
|
113
|
+
elsif @opts[:pager]
|
|
114
|
+
IO.popen(Sqlbible.pager_command, 'w') do |p|
|
|
115
|
+
yield p
|
|
108
116
|
end
|
|
117
|
+
else
|
|
118
|
+
yield $stdout
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def process_verse out, v
|
|
123
|
+
show_verse out, v
|
|
124
|
+
@verse_count += 1
|
|
125
|
+
@regexes.each do |re|
|
|
126
|
+
@matches += v.plaintext.scan(re)
|
|
109
127
|
end
|
|
110
128
|
end
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
|
|
130
|
+
def show_verse out, v
|
|
131
|
+
out.puts format_verse_line(v)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def format_verse_line v
|
|
135
|
+
format('%s: %s', format_verse_ref(v), format_text(v))
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def format_verse_ref v
|
|
139
|
+
ref = @formatter.format(v.scripref_passage)
|
|
140
|
+
if @opts[:color]
|
|
141
|
+
Ansicolor.apply(ref, Sqlbible.color_reference)
|
|
142
|
+
else
|
|
143
|
+
ref
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def format_text v
|
|
148
|
+
text = v.plaintext.gsub("\n", ' ¶')
|
|
149
|
+
if @opts[:color]
|
|
150
|
+
@regexes.each do |re|
|
|
151
|
+
text = text.gsub(re, Ansicolor.apply('\0', Sqlbible.color_emphasize))
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
text
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def show_stats out
|
|
158
|
+
l = @opts[:stat]
|
|
159
|
+
if l < 1
|
|
160
|
+
return
|
|
161
|
+
end
|
|
162
|
+
if l >= 2 and !@matches.empty?
|
|
163
|
+
h = @matches.tally
|
|
164
|
+
arr = h.to_a.sort_by(&:last).reverse
|
|
165
|
+
unless arr.empty?
|
|
166
|
+
out.puts
|
|
167
|
+
end
|
|
168
|
+
arr.each do |e|
|
|
169
|
+
out.puts format('%s: %d', e[0], e[1])
|
|
170
|
+
end
|
|
171
|
+
if arr.size > 1
|
|
172
|
+
out.puts nil, format('%d total', arr.map(&:last).sum)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
if @verse_count > 0
|
|
176
|
+
out.puts nil, format('%d verses', @verse_count)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
114
180
|
end
|
|
181
|
+
|
|
182
|
+
# interactive mode
|
|
183
|
+
if ARGV.empty?
|
|
184
|
+
begin
|
|
185
|
+
while (l = Reline.readline('> ', false))
|
|
186
|
+
break if l.empty?
|
|
187
|
+
if l =~ /^-/
|
|
188
|
+
l.split(/\s+/, 2).each do |s|
|
|
189
|
+
ARGV << s
|
|
190
|
+
end
|
|
191
|
+
else
|
|
192
|
+
ARGV << l
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
rescue Interrupt
|
|
196
|
+
exit
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
Cli.new.run
|
data/lib/sqlbible/version.rb
CHANGED
data/lib/sqlbible.rb
CHANGED
|
@@ -86,11 +86,12 @@ class Sqlbible
|
|
|
86
86
|
@color_emphasize = :underline
|
|
87
87
|
@lang = :en
|
|
88
88
|
@pager_command = 'less -FRSX'
|
|
89
|
+
@stat_level = 1
|
|
89
90
|
|
|
90
91
|
class << self
|
|
91
92
|
|
|
92
93
|
attr_reader :bibles_dir
|
|
93
|
-
attr_accessor :
|
|
94
|
+
attr_accessor :color, :color_reference, :color_emphasize, :bible, :lang, :pager, :pager_command, :stat_level
|
|
94
95
|
|
|
95
96
|
# Get the database schema as string
|
|
96
97
|
def db_schema
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sqlbible
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jan Friedrich
|
|
@@ -99,28 +99,28 @@ dependencies:
|
|
|
99
99
|
requirements:
|
|
100
100
|
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: 2.5
|
|
102
|
+
version: '2.5'
|
|
103
103
|
type: :development
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 2.5
|
|
109
|
+
version: '2.5'
|
|
110
110
|
- !ruby/object:Gem::Dependency
|
|
111
111
|
name: test-unit
|
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
|
113
113
|
requirements:
|
|
114
114
|
- - "~>"
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: 3.7
|
|
116
|
+
version: '3.7'
|
|
117
117
|
type: :development
|
|
118
118
|
prerelease: false
|
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
120
120
|
requirements:
|
|
121
121
|
- - "~>"
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 3.7
|
|
123
|
+
version: '3.7'
|
|
124
124
|
email: janfri26@gmail.com
|
|
125
125
|
executables:
|
|
126
126
|
- sqlbible
|
|
@@ -155,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
155
155
|
- !ruby/object:Gem::Version
|
|
156
156
|
version: '0'
|
|
157
157
|
requirements: []
|
|
158
|
-
rubygems_version: 4.
|
|
158
|
+
rubygems_version: 4.0.6
|
|
159
159
|
specification_version: 4
|
|
160
160
|
summary: Library for bibles as SQLite databases
|
|
161
161
|
test_files: []
|