bbk-utils 1.1.3.346360 → 1.1.5.353300
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 +10 -6
- data/lib/bbk/utils/cli/env_docs.rb +163 -0
- data/lib/bbk/utils/config.rb +21 -7
- data/lib/bbk/utils/version.rb +1 -1
- metadata +31 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d3f70f9fbf1ff06e4c07e1e250b5cea23ceabc4145b84e7f4a5f78a41d57ccb6
|
|
4
|
+
data.tar.gz: f2617d5dc122177c441a81a55d9737d7138776c3e28768f56527338c6d42d918
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d229edde9688ebdadc548c92a891e5c65075d0cd87ec3b6f050d0b2f4e96d82df660eccfbb57719402f022f4170b3a549e8390018cb6dbbe9e65b1010669b800
|
|
7
|
+
data.tar.gz: f28655757bb8dd10c73e32388d573540c1f910fe895ff4c45a6bab78c74caec3d9e5d896f30bdefe8563b7fc6001b3190d25b3db1a2fad191a542e0a04ad83b2
|
data/Gemfile.lock
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
bbk-utils (1.1.
|
|
4
|
+
bbk-utils (1.1.5)
|
|
5
5
|
activesupport (>= 7.0)
|
|
6
6
|
russian
|
|
7
|
-
securerandom (~> 0.3.2)
|
|
8
7
|
|
|
9
8
|
GEM
|
|
10
9
|
remote: https://rubygems.org/
|
|
@@ -32,12 +31,12 @@ GEM
|
|
|
32
31
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
33
32
|
base64 (0.3.0)
|
|
34
33
|
benchmark (0.5.0)
|
|
35
|
-
bigdecimal (
|
|
34
|
+
bigdecimal (4.0.1)
|
|
36
35
|
byebug (11.1.3)
|
|
37
36
|
coercible (1.0.0)
|
|
38
37
|
descendants_tracker (~> 0.0.1)
|
|
39
38
|
concurrent-ruby (1.2.2)
|
|
40
|
-
connection_pool (2.5.
|
|
39
|
+
connection_pool (2.5.0)
|
|
41
40
|
descendants_tracker (0.0.4)
|
|
42
41
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
43
42
|
diff-lcs (1.6.0)
|
|
@@ -63,13 +62,16 @@ GEM
|
|
|
63
62
|
launchy (2.5.0)
|
|
64
63
|
addressable (~> 2.7)
|
|
65
64
|
logger (1.7.0)
|
|
66
|
-
minitest (
|
|
65
|
+
minitest (6.0.1)
|
|
66
|
+
prism (~> 1.5)
|
|
67
67
|
mutex_m (0.3.0)
|
|
68
68
|
parallel (1.21.0)
|
|
69
69
|
parser (3.0.3.1)
|
|
70
70
|
ast (~> 2.4.1)
|
|
71
71
|
path_expander (1.1.0)
|
|
72
|
+
prism (1.9.0)
|
|
72
73
|
public_suffix (4.0.6)
|
|
74
|
+
racc (1.8.1)
|
|
73
75
|
rainbow (3.0.0)
|
|
74
76
|
rake (12.3.3)
|
|
75
77
|
reek (6.0.6)
|
|
@@ -122,7 +124,7 @@ GEM
|
|
|
122
124
|
virtus (~> 1.0)
|
|
123
125
|
russian (0.6.0)
|
|
124
126
|
i18n (>= 0.5.0)
|
|
125
|
-
securerandom (0.
|
|
127
|
+
securerandom (0.4.1)
|
|
126
128
|
sexp_processor (4.16.0)
|
|
127
129
|
simplecov (0.21.2)
|
|
128
130
|
docile (~> 1.1)
|
|
@@ -159,6 +161,7 @@ DEPENDENCIES
|
|
|
159
161
|
bundler (~> 2.0)
|
|
160
162
|
byebug
|
|
161
163
|
faker (~> 2.4)
|
|
164
|
+
racc
|
|
162
165
|
rake (~> 12.0)
|
|
163
166
|
rspec (~> 3.0)
|
|
164
167
|
rspec_junit_formatter
|
|
@@ -168,6 +171,7 @@ DEPENDENCIES
|
|
|
168
171
|
simplecov
|
|
169
172
|
simplecov-cobertura
|
|
170
173
|
simplecov-console
|
|
174
|
+
terminal-table
|
|
171
175
|
|
|
172
176
|
BUNDLED WITH
|
|
173
177
|
2.2.33
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'optparse'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module BBK
|
|
6
|
+
module Utils
|
|
7
|
+
module Cli
|
|
8
|
+
class EnvDocs
|
|
9
|
+
|
|
10
|
+
def self.run(*args) new.run(*args) end
|
|
11
|
+
|
|
12
|
+
def run(*args)
|
|
13
|
+
options = {
|
|
14
|
+
config: './.env_docs.yml',
|
|
15
|
+
output: './env_docs.md'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
OptionParser.new do |opts|
|
|
19
|
+
opts.banner = "Usage: env_docs [options]"
|
|
20
|
+
|
|
21
|
+
opts.on("-c", "--config CONFIG", "Path to config file (default: #{options[:config]})") do |c|
|
|
22
|
+
options[:config] = c
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
opts.on("-o", "--output OUTPUT", "Path to output file (default: #{options[:output]})") do |o|
|
|
26
|
+
options[:output] = o
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
opts.on("-h", "--help", "Prints this help") do
|
|
30
|
+
puts opts
|
|
31
|
+
exit
|
|
32
|
+
end
|
|
33
|
+
end.parse!(args)
|
|
34
|
+
|
|
35
|
+
output_file = Rails.root.join(options[:output])
|
|
36
|
+
config_file = Rails.root.join(options[:config])
|
|
37
|
+
|
|
38
|
+
if File.exist?(config_file)
|
|
39
|
+
config = YAML.load_file(config_file) || {}
|
|
40
|
+
else
|
|
41
|
+
puts "Config file not found: #{config_file}. Continuing without config."
|
|
42
|
+
config = {}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
cfg = BBK::Utils::Config.instance.as_json.deep_dup
|
|
46
|
+
cfg = cfg[BBK::Utils::Config.instance.name] unless BBK::Utils::Config.instance.name.nil?
|
|
47
|
+
|
|
48
|
+
BBK::Utils::Config.instance.send(:store_with_subconfigs).each do |k, v|
|
|
49
|
+
if v[:default]&.class&.to_s == "Fugit::Duration"
|
|
50
|
+
cfg[k][:default] = v[:default].original
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if v[:default]
|
|
54
|
+
cfg[k][:class] = "#{v[:default].class}"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
env_prefix_order = config.fetch('env_prefix_order', [])
|
|
59
|
+
|
|
60
|
+
matching, remaining = separate(cfg, env_prefix_order)
|
|
61
|
+
|
|
62
|
+
File.open(output_file, 'w') do |file|
|
|
63
|
+
file.puts "# Переменные окружения\n\n"
|
|
64
|
+
file.puts to_markdown(matching)
|
|
65
|
+
file.puts "\n\n"
|
|
66
|
+
file.puts to_markdown(remaining.sort)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
puts "Documentation saved to: #{output_file}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def separate(cfg, env_prefix_order)
|
|
73
|
+
matching = {}
|
|
74
|
+
remaining = {}
|
|
75
|
+
|
|
76
|
+
cfg.each do |key, value|
|
|
77
|
+
matched = env_prefix_order.any? do |prefix|
|
|
78
|
+
key == prefix || key.start_with?(prefix + '_')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if matched
|
|
82
|
+
matching[key] = value
|
|
83
|
+
else
|
|
84
|
+
remaining[key] = value
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
[matching, remaining]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def to_markdown(cfg, columns = { :env => "Название", :desc => "Описание", :default => "По умолчанию", :class => "Тип"} )
|
|
92
|
+
rows = cfg_to_array(cfg, columns.keys)
|
|
93
|
+
|
|
94
|
+
create_markdown_table(rows, columns.values)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def cfg_to_array(cfg, keys)
|
|
99
|
+
cfg.each_with_object([]) do |entry, rows|
|
|
100
|
+
rows << keys.each_with_object([]) do |key, row|
|
|
101
|
+
row << entry[1][key]
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def create_markdown_table(rows, headers = [])
|
|
107
|
+
return "| No data |" if rows.empty?
|
|
108
|
+
|
|
109
|
+
column_widths = if headers.size != 0
|
|
110
|
+
headers.map(&:size)
|
|
111
|
+
else
|
|
112
|
+
Array.new(rows[0].count, 0)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
rows.each do |row|
|
|
116
|
+
row.each_with_index do |string, i|
|
|
117
|
+
column_widths[i] = string.to_s.size if string.present? && string.to_s.size > column_widths[i]
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
markdown_table = []
|
|
122
|
+
|
|
123
|
+
# Создаем заголовок таблицы, если он есть
|
|
124
|
+
if headers.size != 0
|
|
125
|
+
header_string = "|"
|
|
126
|
+
separator_string = "|"
|
|
127
|
+
|
|
128
|
+
headers.each_with_index do |header, col|
|
|
129
|
+
header_string += " #{header.ljust(column_widths[col])} |"
|
|
130
|
+
separator_string += "-#{'-' * column_widths[col]}-|"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
markdown_table << header_string
|
|
134
|
+
markdown_table << separator_string
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Создаем строки данных
|
|
138
|
+
rows_string = []
|
|
139
|
+
rows.each do |row|
|
|
140
|
+
row_string = "|"
|
|
141
|
+
row.each_with_index do |data, col|
|
|
142
|
+
value = (data || '').to_s
|
|
143
|
+
row_string += " #{value.ljust(column_widths[col])} |"
|
|
144
|
+
end
|
|
145
|
+
rows_string << row_string
|
|
146
|
+
end
|
|
147
|
+
markdown_table += rows_string
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# "BILLING_ENABLED"=>
|
|
156
|
+
# {:env=>"BILLING_ENABLED",
|
|
157
|
+
# :file=>nil,
|
|
158
|
+
# :required=>false,
|
|
159
|
+
# :default=>false,
|
|
160
|
+
# :desc=>"Send data to billing by api",
|
|
161
|
+
# :bool=>true,
|
|
162
|
+
# :type=>
|
|
163
|
+
# #<Method: BBK::Utils::Config::BooleanCaster.cast(value) /home/user/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/bbk-utils-1.1.2.304819/lib/bbk/utils/config.rb:27
|
data/lib/bbk/utils/config.rb
CHANGED
|
@@ -5,6 +5,7 @@ module BBK
|
|
|
5
5
|
class Config
|
|
6
6
|
|
|
7
7
|
PREFIX_SEP = '_'
|
|
8
|
+
FILTERED_VALUE = '[FILTERED]'
|
|
8
9
|
|
|
9
10
|
attr_accessor :store, :name
|
|
10
11
|
attr_reader :prefix, :env_prefix, :parent
|
|
@@ -78,7 +79,7 @@ module BBK
|
|
|
78
79
|
}
|
|
79
80
|
end
|
|
80
81
|
|
|
81
|
-
def require(env, desc: nil, bool: false, type: nil, key: nil, rewrite: true)
|
|
82
|
+
def require(env, desc: nil, bool: false, type: nil, key: nil, rewrite: true, secure: false)
|
|
82
83
|
raise ArgumentError.new('Specified type and bool') if bool && type.present?
|
|
83
84
|
|
|
84
85
|
type = BBK::Config::BooleanCaster.singleton_method(:cast) if bool
|
|
@@ -91,11 +92,12 @@ module BBK
|
|
|
91
92
|
required: true,
|
|
92
93
|
desc: desc,
|
|
93
94
|
bool: bool,
|
|
94
|
-
type: type
|
|
95
|
+
type: type,
|
|
96
|
+
secure: secure
|
|
95
97
|
}
|
|
96
98
|
end
|
|
97
99
|
|
|
98
|
-
def optional(env, default: nil, desc: nil, bool: false, type: nil, key: nil, rewrite: true)
|
|
100
|
+
def optional(env, default: nil, desc: nil, bool: false, type: nil, key: nil, rewrite: true, secure: false)
|
|
99
101
|
raise ArgumentError.new('Specified type and bool') if bool && type.present?
|
|
100
102
|
|
|
101
103
|
type = BBK::Utils::Config::BooleanCaster.singleton_method(:cast) if bool
|
|
@@ -109,7 +111,8 @@ module BBK
|
|
|
109
111
|
default: default,
|
|
110
112
|
desc: desc,
|
|
111
113
|
bool: true,
|
|
112
|
-
type: type
|
|
114
|
+
type: type,
|
|
115
|
+
secure: secure
|
|
113
116
|
}
|
|
114
117
|
end
|
|
115
118
|
|
|
@@ -313,15 +316,26 @@ module BBK
|
|
|
313
316
|
|
|
314
317
|
def print_item(item, padding)
|
|
315
318
|
line = padding + wrap_required(item)
|
|
316
|
-
|
|
319
|
+
if item[:default].present?
|
|
320
|
+
def_value = if item[:secure]
|
|
321
|
+
FILTERED_VALUE
|
|
322
|
+
else
|
|
323
|
+
item[:default]
|
|
324
|
+
end
|
|
325
|
+
line += " (=#{def_value})"
|
|
326
|
+
end
|
|
317
327
|
|
|
318
328
|
line = if item[:desc].present?
|
|
319
329
|
"#{line.ljust(50)} #{item[:desc]}"
|
|
320
330
|
else
|
|
321
331
|
line
|
|
322
332
|
end
|
|
323
|
-
|
|
324
|
-
|
|
333
|
+
value = if item[:secure]
|
|
334
|
+
FILTERED_VALUE
|
|
335
|
+
else
|
|
336
|
+
item[:value].inspect
|
|
337
|
+
end
|
|
338
|
+
"#{line}\n#{padding * 2}-> #{value}"
|
|
325
339
|
end
|
|
326
340
|
|
|
327
341
|
def wrap_required(item)
|
data/lib/bbk/utils/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bbk-utils
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.5.353300
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samoilenko Yuri
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -24,20 +24,6 @@ dependencies:
|
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '7.0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: securerandom
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.3.2
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.3.2
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
28
|
name: russian
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,6 +94,20 @@ dependencies:
|
|
|
108
94
|
- - "~>"
|
|
109
95
|
- !ruby/object:Gem::Version
|
|
110
96
|
version: '3.0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: terminal-table
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: byebug
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,6 +164,20 @@ dependencies:
|
|
|
164
164
|
- - ">="
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: '0'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: racc
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - ">="
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
182
|
name: rubycritic
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -233,6 +247,7 @@ files:
|
|
|
233
247
|
- bin/console
|
|
234
248
|
- bin/setup
|
|
235
249
|
- lib/bbk/utils.rb
|
|
250
|
+
- lib/bbk/utils/cli/env_docs.rb
|
|
236
251
|
- lib/bbk/utils/combined_logger.rb
|
|
237
252
|
- lib/bbk/utils/config.rb
|
|
238
253
|
- lib/bbk/utils/crypt.rb
|