sqlbible 1.9.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 +164 -84
- data/lib/sqlbible/version.rb +1 -1
- data/lib/sqlbible.rb +2 -1
- metadata +5 -5
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,118 +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
|
|
14
|
-
|
|
15
|
-
$explizit_opts = Set.new
|
|
11
|
+
class Cli
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
22
20
|
end
|
|
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
|
|
30
21
|
|
|
31
|
-
|
|
32
|
-
if !$stdout.tty? || $opts[:output]
|
|
33
|
-
$opts[:color] = false
|
|
34
|
-
end
|
|
35
|
-
end
|
|
22
|
+
private
|
|
36
23
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
else
|
|
44
|
-
fail format('lang option %s is not supported', l)
|
|
45
|
-
end
|
|
46
|
-
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
|
|
47
30
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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)
|
|
52
44
|
end
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
|
|
46
|
+
unless explizit_opts.include? :color
|
|
47
|
+
if !$stdout.tty? || @opts[:output]
|
|
48
|
+
@opts[:color] = false
|
|
49
|
+
end
|
|
56
50
|
end
|
|
57
|
-
else
|
|
58
|
-
yield $stdout
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
51
|
|
|
62
|
-
|
|
63
|
-
ref = f.format(v.scripref_passage)
|
|
64
|
-
if $opts[:color]
|
|
65
|
-
Ansicolor.apply(ref, Sqlbible.color_reference)
|
|
66
|
-
else
|
|
67
|
-
ref
|
|
52
|
+
@regexes = ARGV.map {|s| Regexp.new(s)}
|
|
68
53
|
end
|
|
69
|
-
end
|
|
70
54
|
|
|
71
|
-
def
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
55
|
+
def process_by_opts
|
|
56
|
+
if @opts[:env]
|
|
57
|
+
show_env
|
|
58
|
+
else
|
|
59
|
+
init_processing
|
|
60
|
+
do_processing
|
|
76
61
|
end
|
|
77
62
|
end
|
|
78
|
-
text
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def format_verse_line f, v, regexes=[]
|
|
82
|
-
format('%s: %s', format_verse_ref(f, v), format_text(v, regexes))
|
|
83
|
-
end
|
|
84
63
|
|
|
85
|
-
|
|
86
|
-
if $opts[:info]
|
|
64
|
+
def show_env
|
|
87
65
|
names = Sqlbible.bible_names
|
|
88
66
|
max_size = names.map(&:size).max
|
|
89
67
|
names.each do |n|
|
|
90
68
|
puts format("%-#{max_size}s (schema version: %s)", n, Sqlbible.new(n).schema_version)
|
|
91
69
|
end
|
|
92
|
-
return
|
|
93
70
|
end
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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 = []
|
|
101
91
|
end
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
regexes = ARGV.map {|s| Regexp.new(s)}
|
|
92
|
+
|
|
93
|
+
def do_processing
|
|
105
94
|
open_out do |out|
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
108
103
|
end
|
|
104
|
+
show_stats out
|
|
109
105
|
end
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
|
114
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)
|
|
115
127
|
end
|
|
116
128
|
end
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
+
|
|
120
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 :color, :color_reference, :color_emphasize, :bible, :lang, :pager, :pager_command
|
|
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
|