eac_ruby_utils 0.10.1 → 0.11.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/console/speaker/list.rb +62 -0
- data/lib/eac_ruby_utils/console/speaker.rb +50 -6
- data/lib/eac_ruby_utils/options_consumer.rb +4 -0
- data/lib/eac_ruby_utils/patch.rb +10 -0
- data/lib/eac_ruby_utils/require_sub.rb +11 -0
- data/lib/eac_ruby_utils/version.rb +1 -1
- data/lib/eac_ruby_utils.rb +2 -0
- 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: 36ad6529aeb2cd18a50fdd7ee4af8be6e3cd7157d41ff48352e5bc82b32fefc9
|
4
|
+
data.tar.gz: 32503898f9f75eebcd106a990ac11560b32ef0a6f6b2511e9a62e05bc0ce42e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6e09038246c4300dc4c087cfbd8501f18e528bc988be179fd11ec7675a5dfa8ec0f04fb9e588265d46fa96fb76f5639b74eec4bb5e49f1f1b133213dfdd6841
|
7
|
+
data.tar.gz: cde052825e985ffb6be03b9aadae9344edf612536a248cb1cb5a57df8dc1226fee5df2c20e497d3913ed3ad33e39ff907155799a0b7303b5edc4e6cec500117e
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/hash_with_indifferent_access'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
module EacRubyUtils
|
7
|
+
module Console
|
8
|
+
module Speaker
|
9
|
+
class List
|
10
|
+
class << self
|
11
|
+
def build(list)
|
12
|
+
return List.new(hash_to_values(list)) if list.is_a?(::Hash)
|
13
|
+
return List.new(array_to_values(list)) if list.is_a?(::Array)
|
14
|
+
raise "Invalid list: #{list} (#{list.class})"
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def hash_to_values(list)
|
20
|
+
list.map { |key, value| ::OpenStruct.new(key: key, label: key, value: value) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def array_to_values(list)
|
24
|
+
list.map { |value| ::OpenStruct.new(key: value, label: value, value: value) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :values
|
29
|
+
|
30
|
+
def initialize(values)
|
31
|
+
@values = values.map do |v|
|
32
|
+
::OpenStruct.new(key: to_key(v.key), label: to_label(v.label), value: v.value)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_labels
|
37
|
+
values.map(&:label)
|
38
|
+
end
|
39
|
+
|
40
|
+
def valid_value?(value)
|
41
|
+
values.any? { |v| v.key == to_key(value) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_key(value)
|
45
|
+
to_label(value).downcase
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_label(value)
|
49
|
+
value.to_s.strip
|
50
|
+
end
|
51
|
+
|
52
|
+
def build_value(value)
|
53
|
+
key = to_key(value)
|
54
|
+
values.each do |v|
|
55
|
+
return v.value if v.key == key
|
56
|
+
end
|
57
|
+
raise "Value not found: \"#{value}\" (#{values})"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'colorize'
|
4
4
|
require 'io/console'
|
5
|
+
require 'eac_ruby_utils/options_consumer'
|
6
|
+
require 'eac_ruby_utils/console/speaker/list'
|
5
7
|
|
6
8
|
module EacRubyUtils
|
7
9
|
module Console
|
@@ -41,13 +43,15 @@ module EacRubyUtils
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def request_input(question, options = {})
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
options = ::EacRubyUtils::OptionsConsumer.new(options)
|
47
|
+
bool, list, noecho = options.consume_all(:bool, :list, :noecho)
|
48
|
+
options.validate
|
49
|
+
if list
|
50
|
+
request_from_list(question, list, noecho)
|
51
|
+
elsif bool
|
52
|
+
request_from_bool(question, noecho)
|
49
53
|
else
|
50
|
-
|
54
|
+
request_string(question, noecho)
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
@@ -66,6 +70,46 @@ module EacRubyUtils
|
|
66
70
|
def success(string)
|
67
71
|
puts string.to_s.green
|
68
72
|
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def list_value(list, input)
|
77
|
+
values = list_values(list)
|
78
|
+
return input, true unless values
|
79
|
+
return input, false unless values.include?(input)
|
80
|
+
end
|
81
|
+
|
82
|
+
def list_values(list)
|
83
|
+
if list.is_a?(::Hash)
|
84
|
+
list.keys.map(&:to_s)
|
85
|
+
elsif list.is_a?(::Array)
|
86
|
+
list.map(&:to_s)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def request_from_bool(question, noecho)
|
91
|
+
request_from_list(question, { yes: true, y: true, no: false, n: false }, noecho)
|
92
|
+
end
|
93
|
+
|
94
|
+
def request_from_list(question, list, noecho)
|
95
|
+
list = ::EacRubyUtils::Console::Speaker::List.build(list)
|
96
|
+
loop do
|
97
|
+
input = request_string("#{question} [#{list.valid_labels.join('/')}]", noecho)
|
98
|
+
return list.build_value(input) if list.valid_value?(input)
|
99
|
+
warn "Invalid input: \"#{input}\" (Valid: #{list.valid_labels.join(', ')})"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def request_string(question, noecho)
|
104
|
+
STDERR.write "#{question}: ".to_s.yellow
|
105
|
+
if noecho
|
106
|
+
r = STDIN.noecho(&:gets).chomp.strip
|
107
|
+
STDERR.write("\n")
|
108
|
+
r
|
109
|
+
else
|
110
|
+
STDIN.gets.chomp.strip
|
111
|
+
end
|
112
|
+
end
|
69
113
|
end
|
70
114
|
end
|
71
115
|
end
|
data/lib/eac_ruby_utils.rb
CHANGED
@@ -8,8 +8,10 @@ module EacRubyUtils
|
|
8
8
|
require 'eac_ruby_utils/envs'
|
9
9
|
require 'eac_ruby_utils/listable'
|
10
10
|
require 'eac_ruby_utils/options_consumer'
|
11
|
+
require 'eac_ruby_utils/patch'
|
11
12
|
require 'eac_ruby_utils/patches'
|
12
13
|
require 'eac_ruby_utils/paths_hash'
|
14
|
+
require 'eac_ruby_utils/require_sub'
|
13
15
|
require 'eac_ruby_utils/simple_cache'
|
14
16
|
require 'eac_ruby_utils/yaml'
|
15
17
|
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.11.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-08-
|
11
|
+
date: 2019-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- lib/eac_ruby_utils/console/docopt_runner/_settings.rb
|
113
113
|
- lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb
|
114
114
|
- lib/eac_ruby_utils/console/speaker.rb
|
115
|
+
- lib/eac_ruby_utils/console/speaker/list.rb
|
115
116
|
- lib/eac_ruby_utils/contextualizable.rb
|
116
117
|
- lib/eac_ruby_utils/envs.rb
|
117
118
|
- lib/eac_ruby_utils/envs/base_env.rb
|
@@ -129,6 +130,7 @@ files:
|
|
129
130
|
- lib/eac_ruby_utils/listable/string_list.rb
|
130
131
|
- lib/eac_ruby_utils/listable/value.rb
|
131
132
|
- lib/eac_ruby_utils/options_consumer.rb
|
133
|
+
- lib/eac_ruby_utils/patch.rb
|
132
134
|
- lib/eac_ruby_utils/patches.rb
|
133
135
|
- lib/eac_ruby_utils/patches/hash.rb
|
134
136
|
- lib/eac_ruby_utils/patches/hash/options_consumer.rb
|
@@ -136,6 +138,7 @@ files:
|
|
136
138
|
- lib/eac_ruby_utils/patches/object.rb
|
137
139
|
- lib/eac_ruby_utils/patches/object/asserts.rb
|
138
140
|
- lib/eac_ruby_utils/paths_hash.rb
|
141
|
+
- lib/eac_ruby_utils/require_sub.rb
|
139
142
|
- lib/eac_ruby_utils/simple_cache.rb
|
140
143
|
- lib/eac_ruby_utils/version.rb
|
141
144
|
- lib/eac_ruby_utils/yaml.rb
|