eac_ruby_utils 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|