eac_ruby_utils 0.49.1 → 0.53.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/lib/eac_ruby_utils/abstract_methods.rb +60 -0
- data/lib/eac_ruby_utils/console/configs.rb +4 -69
- data/lib/eac_ruby_utils/console/configs/entry_reader.rb +81 -0
- data/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +18 -0
- data/lib/eac_ruby_utils/console/configs/read_entry_options.rb +7 -2
- data/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +27 -0
- data/lib/eac_ruby_utils/patches/enumerator.rb +4 -0
- data/lib/eac_ruby_utils/patches/enumerator/current.rb +9 -0
- data/lib/eac_ruby_utils/patches/enumerator/stopped.rb +14 -0
- data/lib/eac_ruby_utils/patches/module/abstract_methods.rb +10 -0
- data/lib/eac_ruby_utils/patches/object/debug.rb +17 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- data/lib/eac_ruby_utils/yaml.rb +3 -2
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a940f8552466eaafa352add89628375c73a4bc93132d6a85308ed8734806112
|
4
|
+
data.tar.gz: ee918b5a6e350bfff2e835fbc36c4167c06c13ae264039b2e6281d217538029f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55d385b536020ab4a7f295e88eeccb2baa93cb329d0d7fa4e8c968ba2e1f89f4412e1c6d497614a6433f78a95fce27889f1062d6cfd9fbe95dbae6317bee70b3
|
7
|
+
data.tar.gz: b06d996d30f1d6db36d9d2b3d4f67ba6a730f6afb1d41f08e6be4718cb063b2b4171bc609b8e07f0b304ee09440c60eca798e10b8957d1ee0d3f5505e9fdf2f4
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/patches/module/common_concern'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
# Support to abstract methods.
|
7
|
+
#
|
8
|
+
# Usage:
|
9
|
+
#
|
10
|
+
# require 'eac_ruby_utils/abstract_methods'
|
11
|
+
#
|
12
|
+
# class BaseClass
|
13
|
+
# include EacRubyUtils::AbstractMethods
|
14
|
+
#
|
15
|
+
# abstract_methods :mymethod
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# BaseClass.new.mymethod # raise "Abstract method: mymethod"
|
19
|
+
#
|
20
|
+
# class SubClass
|
21
|
+
# def mymethod
|
22
|
+
# "Implemented"
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# SubClass.new.mymethod # return "Implemented"
|
27
|
+
module AbstractMethods
|
28
|
+
common_concern
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
def abstract_methods(*methods_names)
|
32
|
+
methods_names.each do |method_name|
|
33
|
+
define_method method_name do
|
34
|
+
raise_abstract_method(method_name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module InstanceMethods
|
41
|
+
def respond_to_missing?(method_name, include_private = false)
|
42
|
+
super || abstract_method?(method_name)
|
43
|
+
end
|
44
|
+
|
45
|
+
def method_missing(method_name, *arguments, &block)
|
46
|
+
raise_abstract_method(method_name) if abstract_method?(method_name)
|
47
|
+
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
51
|
+
def abstract_method?(method_name)
|
52
|
+
self.class.abstract_methods.include?(method_name.to_sym)
|
53
|
+
end
|
54
|
+
|
55
|
+
def raise_abstract_method(method_name)
|
56
|
+
raise ::NoMethodError, "Abstract method \"#{method_name}\" hit in \"#{self}\""
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -11,18 +11,10 @@ module EacRubyUtils
|
|
11
11
|
|
12
12
|
class << self
|
13
13
|
def entry_key_to_envvar_name(entry_key)
|
14
|
-
|
15
|
-
entry_key
|
16
|
-
else
|
17
|
-
::EacRubyUtils::PathsHash.parse_entry_key(entry_key)
|
18
|
-
end
|
19
|
-
path.join('_').gsub(/[^a-z0-9_]/i, '').gsub(/\A_+/, '').gsub(/_+\z/, '')
|
20
|
-
.gsub(/_{2,}/, '_').upcase
|
14
|
+
::EacRubyUtils::Console::Configs::EntryReader.entry_key_to_envvar_name(entry_key)
|
21
15
|
end
|
22
16
|
end
|
23
17
|
|
24
|
-
STORE_PASSWORDS_KEY = 'core.store_passwords'
|
25
|
-
|
26
18
|
attr_reader :configs
|
27
19
|
|
28
20
|
def initialize(configs_key, options = {})
|
@@ -31,72 +23,15 @@ module EacRubyUtils
|
|
31
23
|
end
|
32
24
|
|
33
25
|
def read_password(entry_key, options = {})
|
34
|
-
|
35
|
-
if store_passwords?
|
36
|
-
read_entry(entry_key, options)
|
37
|
-
else
|
38
|
-
looped_entry_value_from_input(entry_key, options)
|
39
|
-
end
|
26
|
+
::EacRubyUtils::Console::Configs::PasswordEntryReader.new(self, entry_key, options).read
|
40
27
|
end
|
41
28
|
|
42
29
|
def read_entry(entry_key, options = {})
|
43
|
-
|
44
|
-
unless options[:noenv]
|
45
|
-
envvar_value = envvar_read_entry(entry_key)
|
46
|
-
return envvar_value if envvar_value.present?
|
47
|
-
end
|
48
|
-
stored_value = configs.read_entry(entry_key)
|
49
|
-
return stored_value if stored_value
|
50
|
-
return read_entry_from_console(entry_key, options) unless options[:noinput]
|
51
|
-
|
52
|
-
raise "No value found for entry \"#{entry_key}\"" if options[:required]
|
30
|
+
::EacRubyUtils::Console::Configs::EntryReader.new(self, entry_key, options).read
|
53
31
|
end
|
54
32
|
|
55
33
|
def store_passwords?
|
56
|
-
|
57
|
-
STORE_PASSWORDS_KEY,
|
58
|
-
before_input: -> { store_password_banner },
|
59
|
-
validator: ->(entry_value) { %w[yes no].include?(entry_value) }
|
60
|
-
) == 'yes'
|
61
|
-
end
|
62
|
-
|
63
|
-
protected
|
64
|
-
|
65
|
-
def envvar_read_entry(entry_key)
|
66
|
-
env_entry_key = self.class.entry_key_to_envvar_name(entry_key)
|
67
|
-
return nil unless ENV.key?(env_entry_key)
|
68
|
-
|
69
|
-
ENV.fetch(env_entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
|
70
|
-
end
|
71
|
-
|
72
|
-
def read_entry_from_console(entry_key, options)
|
73
|
-
options[:before_input].call if options[:before_input].present?
|
74
|
-
entry_value = looped_entry_value_from_input(entry_key, options)
|
75
|
-
configs.write_entry(entry_key, entry_value)
|
76
|
-
entry_value
|
77
|
-
end
|
78
|
-
|
79
|
-
def store_password_banner
|
80
|
-
infom 'Do you wanna to store passwords?'
|
81
|
-
infom "Warning: the passwords will be store in clear text in \"#{configs.storage_path}\""
|
82
|
-
infom 'Enter "yes" or "no"'
|
83
|
-
end
|
84
|
-
|
85
|
-
def looped_entry_value_from_input(entry_key, options)
|
86
|
-
loop do
|
87
|
-
entry_value = entry_value_from_input(entry_key, options)
|
88
|
-
next if entry_value.blank?
|
89
|
-
next if options[:validator] && !options[:validator].call(entry_value)
|
90
|
-
|
91
|
-
return entry_value
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def entry_value_from_input(entry_key, options)
|
96
|
-
entry_value = request_input("Value for entry \"#{entry_key}\"",
|
97
|
-
options.request_input_options)
|
98
|
-
warn('Entered value is blank') if entry_value.blank?
|
99
|
-
entry_value
|
34
|
+
::EacRubyUtils::Console::Configs::StorePasswordsEntryReader.new(self) == 'yes'
|
100
35
|
end
|
101
36
|
end
|
102
37
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/configs/read_entry_options'
|
4
|
+
require 'eac_ruby_utils/core_ext'
|
5
|
+
|
6
|
+
module EacRubyUtils
|
7
|
+
module Console
|
8
|
+
class Configs
|
9
|
+
class EntryReader
|
10
|
+
enable_console_speaker
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def entry_key_to_envvar_name(entry_key)
|
14
|
+
path = if entry_key.is_a?(::Array)
|
15
|
+
entry_key
|
16
|
+
else
|
17
|
+
::EacRubyUtils::PathsHash.parse_entry_key(entry_key)
|
18
|
+
end
|
19
|
+
path.join('_').gsub(/[^a-z0-9_]/i, '').gsub(/\A_+/, '').gsub(/_+\z/, '')
|
20
|
+
.gsub(/_{2,}/, '_').upcase
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
common_constructor :console_configs, :entry_key, :options do
|
25
|
+
self.options = ::EacRubyUtils::Console::Configs::ReadEntryOptions.new(options)
|
26
|
+
end
|
27
|
+
|
28
|
+
def read
|
29
|
+
%w[envvars storage console].each do |suffix|
|
30
|
+
value = send("read_from_#{suffix}")
|
31
|
+
return value if value.present?
|
32
|
+
end
|
33
|
+
return nil unless options[:required]
|
34
|
+
|
35
|
+
raise "No value found for entry \"#{entry_key}\""
|
36
|
+
end
|
37
|
+
|
38
|
+
def read_from_storage
|
39
|
+
console_configs.configs.read_entry(entry_key)
|
40
|
+
end
|
41
|
+
|
42
|
+
def read_from_envvars
|
43
|
+
return if options[:noenv]
|
44
|
+
|
45
|
+
env_entry_key = self.class.entry_key_to_envvar_name(entry_key)
|
46
|
+
return unless ENV.key?(env_entry_key)
|
47
|
+
|
48
|
+
ENV.fetch(env_entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
|
49
|
+
end
|
50
|
+
|
51
|
+
def read_from_console
|
52
|
+
return if options[:noinput]
|
53
|
+
|
54
|
+
options[:before_input].if_present(&:call)
|
55
|
+
entry_value = looped_entry_value_from_input
|
56
|
+
console_configs.configs.write_entry(entry_key, entry_value) if options[:store]
|
57
|
+
entry_value
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def looped_entry_value_from_input
|
63
|
+
loop do
|
64
|
+
entry_value = entry_value_from_input(entry_key, options)
|
65
|
+
next if entry_value.blank?
|
66
|
+
next if options[:validator] && !options[:validator].call(entry_value)
|
67
|
+
|
68
|
+
return entry_value
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def entry_value_from_input(entry_key, options)
|
73
|
+
entry_value = request_input("Value for entry \"#{entry_key}\"",
|
74
|
+
options.request_input_options)
|
75
|
+
warn('Entered value is blank') if entry_value.blank?
|
76
|
+
entry_value
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/configs/entry_reader'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
module Console
|
7
|
+
class Configs
|
8
|
+
class PasswordEntryReader < ::EacRubyUtils::Console::Configs::EntryReader
|
9
|
+
ENTRY_KEY = 'core.store_passwords'
|
10
|
+
|
11
|
+
def initialize(console_configs, entry_key, options = {})
|
12
|
+
super(console_configs, entry_key, options.merge(noecho: true,
|
13
|
+
store: console_configs.store_passwords?))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -7,13 +7,18 @@ module EacRubyUtils
|
|
7
7
|
class Configs
|
8
8
|
class ReadEntryOptions
|
9
9
|
enable_simple_cache
|
10
|
-
common_constructor :options
|
10
|
+
common_constructor :options do
|
11
|
+
self.options = options.to_h.symbolize_keys
|
12
|
+
.assert_valid_keys(DEFAULT_VALUES.keys).freeze
|
13
|
+
end
|
11
14
|
|
12
15
|
DEFAULT_VALUES = {
|
13
16
|
before_input: nil, bool: false, list: false, noecho: false, noenv: false, noinput: false,
|
14
|
-
required: true, validator: nil
|
17
|
+
required: true, store: true, validator: nil
|
15
18
|
}.freeze
|
16
19
|
|
20
|
+
delegate :to_h, to: :options
|
21
|
+
|
17
22
|
def [](key)
|
18
23
|
values.fetch(key.to_sym)
|
19
24
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/console/configs/entry_reader'
|
4
|
+
|
5
|
+
module EacRubyUtils
|
6
|
+
module Console
|
7
|
+
class Configs
|
8
|
+
class StorePasswordsEntryReader < ::EacRubyUtils::Console::Configs::EntryReader
|
9
|
+
ENTRY_KEY = 'core.store_passwords'
|
10
|
+
|
11
|
+
def initialize(console_configs)
|
12
|
+
super(console_configs, ENTRY_KEY,
|
13
|
+
before_input: -> { banner },
|
14
|
+
validator: ->(entry_value) { %w[yes no].include?(entry_value) }
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def banner
|
19
|
+
infom 'Do you wanna to store passwords?'
|
20
|
+
infom 'Warning: the passwords will be store in clear text in ' \
|
21
|
+
"\"#{console_configs.configs.storage_path}\""
|
22
|
+
infom 'Enter "yes" or "no"'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/eac_ruby_utils/yaml.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'date'
|
3
4
|
require 'yaml'
|
4
5
|
|
5
6
|
module EacRubyUtils
|
6
7
|
# A safe YAML loader/dumper with common types included.
|
7
8
|
class Yaml
|
8
9
|
class << self
|
9
|
-
DEFAULT_PERMITTED_CLASSES = [::Array, ::Date, ::FalseClass, ::Hash, ::NilClass,
|
10
|
-
::String, ::Symbol, ::Time, ::TrueClass].freeze
|
10
|
+
DEFAULT_PERMITTED_CLASSES = [::Array, ::Date, ::DateTime, ::FalseClass, ::Hash, ::NilClass,
|
11
|
+
::Numeric, ::String, ::Symbol, ::Time, ::TrueClass].freeze
|
11
12
|
|
12
13
|
def dump(object)
|
13
14
|
::YAML.dump(sanitize(object))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_ruby_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.53.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esquilo Azul Company
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -108,6 +108,7 @@ extra_rdoc_files: []
|
|
108
108
|
files:
|
109
109
|
- README.rdoc
|
110
110
|
- lib/eac_ruby_utils.rb
|
111
|
+
- lib/eac_ruby_utils/abstract_methods.rb
|
111
112
|
- lib/eac_ruby_utils/arguments_consumer.rb
|
112
113
|
- lib/eac_ruby_utils/blank_not_blank.rb
|
113
114
|
- lib/eac_ruby_utils/boolean.rb
|
@@ -119,7 +120,10 @@ files:
|
|
119
120
|
- lib/eac_ruby_utils/configs/file.rb
|
120
121
|
- lib/eac_ruby_utils/console.rb
|
121
122
|
- lib/eac_ruby_utils/console/configs.rb
|
123
|
+
- lib/eac_ruby_utils/console/configs/entry_reader.rb
|
124
|
+
- lib/eac_ruby_utils/console/configs/password_entry_reader.rb
|
122
125
|
- lib/eac_ruby_utils/console/configs/read_entry_options.rb
|
126
|
+
- lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb
|
123
127
|
- lib/eac_ruby_utils/console/docopt_runner.rb
|
124
128
|
- lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb
|
125
129
|
- lib/eac_ruby_utils/console/docopt_runner/_doc.rb
|
@@ -183,10 +187,14 @@ files:
|
|
183
187
|
- lib/eac_ruby_utils/patches/class/common_constructor.rb
|
184
188
|
- lib/eac_ruby_utils/patches/enumerable.rb
|
185
189
|
- lib/eac_ruby_utils/patches/enumerable/boolean_combinations.rb
|
190
|
+
- lib/eac_ruby_utils/patches/enumerator.rb
|
191
|
+
- lib/eac_ruby_utils/patches/enumerator/current.rb
|
192
|
+
- lib/eac_ruby_utils/patches/enumerator/stopped.rb
|
186
193
|
- lib/eac_ruby_utils/patches/hash.rb
|
187
194
|
- lib/eac_ruby_utils/patches/hash/options_consumer.rb
|
188
195
|
- lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb
|
189
196
|
- lib/eac_ruby_utils/patches/module.rb
|
197
|
+
- lib/eac_ruby_utils/patches/module/abstract_methods.rb
|
190
198
|
- lib/eac_ruby_utils/patches/module/common_concern.rb
|
191
199
|
- lib/eac_ruby_utils/patches/module/console_speaker.rb
|
192
200
|
- lib/eac_ruby_utils/patches/module/immutable.rb
|
@@ -196,6 +204,7 @@ files:
|
|
196
204
|
- lib/eac_ruby_utils/patches/module/simple_cache.rb
|
197
205
|
- lib/eac_ruby_utils/patches/object.rb
|
198
206
|
- lib/eac_ruby_utils/patches/object/asserts.rb
|
207
|
+
- lib/eac_ruby_utils/patches/object/debug.rb
|
199
208
|
- lib/eac_ruby_utils/patches/object/if_present.rb
|
200
209
|
- lib/eac_ruby_utils/patches/object/if_respond.rb
|
201
210
|
- lib/eac_ruby_utils/patches/object/template.rb
|