eac_ruby_utils 0.14.0 → 0.15.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/common_constructor.rb +48 -0
- data/lib/eac_ruby_utils/console/speaker/_class_methods.rb +1 -0
- data/lib/eac_ruby_utils/console/speaker.rb +17 -11
- data/lib/eac_ruby_utils/options_consumer.rb +26 -1
- data/lib/eac_ruby_utils/patches/class/common_constructor.rb +9 -0
- data/lib/eac_ruby_utils/patches/class.rb +4 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0ddfde05215993f63e4489e1b54cb4434d0dce6f9c7d401d985c229461ca106
|
4
|
+
data.tar.gz: 7f06d22a45ed253237e0033da8e07f90a327858352bc1cd99ac8396127a094af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d28f2608835e09ce813974309bbb87742118f71d294e907699575d99ed422a33d87d0af0528c8bdc8f200141fee74db6a9b54799fa55dd52c21c37981995d103
|
7
|
+
data.tar.gz: 507b28c0c90e84105ab30b62038857ea01b4f8b46de4d012a41e58b8fb31f63dce03f22ce3cb0a7387b77b7c4bd7c74f96f8262df6185e7d13d8284d45e966e0
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EacRubyUtils
|
4
|
+
class CommonConstructor
|
5
|
+
attr_reader :args, :options
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
@args = args
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_class(klass)
|
12
|
+
setup_class_attr_readers(klass)
|
13
|
+
setup_class_attr_writers(klass)
|
14
|
+
setup_class_initialize(klass)
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_class_attr_readers(klass)
|
18
|
+
klass.send(:attr_reader, *args)
|
19
|
+
klass.send(:public, *args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup_class_attr_writers(klass)
|
23
|
+
klass.send(:attr_writer, *args)
|
24
|
+
klass.send(:private, *args.map { |a| "#{a}=" })
|
25
|
+
end
|
26
|
+
|
27
|
+
def setup_class_initialize(klass)
|
28
|
+
klass.class_eval initialize_method_code, __FILE__, __LINE__
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize_method_code
|
32
|
+
b = "def initialize(#{initialize_method_args_code})\n"
|
33
|
+
initialize_method_args.each do |arg|
|
34
|
+
b += " self.#{arg} = #{arg}\n"
|
35
|
+
end
|
36
|
+
b += "end\n"
|
37
|
+
b
|
38
|
+
end
|
39
|
+
|
40
|
+
def initialize_method_args_code
|
41
|
+
initialize_method_args.join(', ')
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize_method_args
|
45
|
+
args
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'colorize'
|
4
4
|
require 'io/console'
|
5
|
-
require 'eac_ruby_utils/options_consumer'
|
5
|
+
require 'eac_ruby_utils/patches/hash/options_consumer'
|
6
6
|
require 'eac_ruby_utils/console/speaker/_class_methods'
|
7
7
|
require 'eac_ruby_utils/console/speaker/list'
|
8
8
|
require 'eac_ruby_utils/console/speaker/node'
|
@@ -44,10 +44,12 @@ module EacRubyUtils
|
|
44
44
|
puts string.to_s.yellow
|
45
45
|
end
|
46
46
|
|
47
|
+
# Options:
|
48
|
+
# +bool+ ([Boolean], default: +false+): requires a answer "yes" or "no".
|
49
|
+
# +list+ ([Hash] or [Array], default: +nil+): requires a answer from a list.
|
50
|
+
# +noecho+ ([Boolean], default: +false+): does not output answer.
|
47
51
|
def request_input(question, options = {})
|
48
|
-
|
49
|
-
bool, list, noecho = options.consume_all(:bool, :list, :noecho)
|
50
|
-
options.validate
|
52
|
+
bool, list, noecho = options.to_options_consumer.consume_all(:bool, :list, :noecho)
|
51
53
|
if list
|
52
54
|
request_from_list(question, list, noecho)
|
53
55
|
elsif bool
|
@@ -105,13 +107,17 @@ module EacRubyUtils
|
|
105
107
|
|
106
108
|
def request_string(question, noecho)
|
107
109
|
current_node.stderr.write "#{question}: ".to_s.yellow
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
110
|
+
noecho ? request_string_noecho : request_string_echo
|
111
|
+
end
|
112
|
+
|
113
|
+
def request_string_noecho
|
114
|
+
r = current_node.stdin.noecho(&:gets).chomp.strip
|
115
|
+
current_node.stderr.write("\n")
|
116
|
+
r
|
117
|
+
end
|
118
|
+
|
119
|
+
def request_string_echo
|
120
|
+
current_node.stdin.gets.chomp.strip
|
115
121
|
end
|
116
122
|
|
117
123
|
def current_node
|
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_support/core_ext/hash/indifferent_access'
|
4
|
+
require 'ostruct'
|
4
5
|
|
5
6
|
module EacRubyUtils
|
6
7
|
class OptionsConsumer
|
8
|
+
DEFAULT_OPTIONS = { validate: true, ostruct: false }.with_indifferent_access.freeze
|
9
|
+
|
7
10
|
def initialize(data)
|
8
11
|
@data = data.with_indifferent_access
|
9
12
|
end
|
@@ -16,8 +19,16 @@ module EacRubyUtils
|
|
16
19
|
value
|
17
20
|
end
|
18
21
|
|
22
|
+
# If last argument is a Hash it is used a options.
|
23
|
+
# Options:
|
24
|
+
# * +validate+: validate after consume.
|
25
|
+
# * +ostruct+: return a [OpenStruct] instead a [Hash].
|
26
|
+
# @return [Hash] (Default) or [OpenStruct].
|
19
27
|
def consume_all(*keys)
|
20
|
-
|
28
|
+
options = consume_all_extract_options(keys)
|
29
|
+
result = consume_all_build_result(keys, options.fetch(:ostruct))
|
30
|
+
validate if options.fetch(:validate)
|
31
|
+
result
|
21
32
|
end
|
22
33
|
|
23
34
|
def validate
|
@@ -33,5 +44,19 @@ module EacRubyUtils
|
|
33
44
|
private
|
34
45
|
|
35
46
|
attr_reader :data
|
47
|
+
|
48
|
+
def consume_all_extract_options(keys)
|
49
|
+
options = DEFAULT_OPTIONS
|
50
|
+
options = options.merge(keys.pop.with_indifferent_access) if keys.last.is_a?(Hash)
|
51
|
+
options
|
52
|
+
end
|
53
|
+
|
54
|
+
def consume_all_build_result(keys, ostruct)
|
55
|
+
if ostruct
|
56
|
+
::OpenStruct.new(keys.map { |key| [key, consume(key)] }.to_h)
|
57
|
+
else
|
58
|
+
keys.map { |key| consume(key) }
|
59
|
+
end
|
60
|
+
end
|
36
61
|
end
|
37
62
|
end
|
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.15.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: 2019-10-
|
11
|
+
date: 2019-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -117,6 +117,7 @@ files:
|
|
117
117
|
- README.rdoc
|
118
118
|
- lib/eac_ruby_utils.rb
|
119
119
|
- lib/eac_ruby_utils/arguments_consumer.rb
|
120
|
+
- lib/eac_ruby_utils/common_constructor.rb
|
120
121
|
- lib/eac_ruby_utils/configs.rb
|
121
122
|
- lib/eac_ruby_utils/console.rb
|
122
123
|
- lib/eac_ruby_utils/console/configs.rb
|
@@ -152,6 +153,8 @@ files:
|
|
152
153
|
- lib/eac_ruby_utils/options_consumer.rb
|
153
154
|
- lib/eac_ruby_utils/patch.rb
|
154
155
|
- lib/eac_ruby_utils/patches.rb
|
156
|
+
- lib/eac_ruby_utils/patches/class.rb
|
157
|
+
- lib/eac_ruby_utils/patches/class/common_constructor.rb
|
155
158
|
- lib/eac_ruby_utils/patches/hash.rb
|
156
159
|
- lib/eac_ruby_utils/patches/hash/options_consumer.rb
|
157
160
|
- lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb
|