eac_cli 0.16.0 → 0.18.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_cli/config.rb +19 -0
  3. data/lib/eac_cli/config/entry.rb +46 -0
  4. data/lib/eac_cli/config/entry/options.rb +57 -0
  5. data/lib/eac_cli/config/entry/undefined.rb +26 -0
  6. data/lib/eac_cli/default_runner.rb +1 -1
  7. data/lib/eac_cli/definition/base_option.rb +5 -1
  8. data/lib/eac_cli/definition/help_formatter.rb +2 -2
  9. data/lib/eac_cli/docopt/doc_builder.rb +4 -2
  10. data/lib/eac_cli/docopt/doc_builder/alternative.rb +3 -3
  11. data/lib/eac_cli/docopt/runner_extension.rb +2 -2
  12. data/lib/eac_cli/docopt_runner.rb +38 -0
  13. data/lib/eac_cli/docopt_runner/_class_methods.rb +16 -0
  14. data/lib/eac_cli/docopt_runner/_doc.rb +23 -0
  15. data/lib/eac_cli/docopt_runner/_settings.rb +17 -0
  16. data/lib/eac_cli/docopt_runner/_subcommands.rb +152 -0
  17. data/lib/eac_cli/docopt_runner/context.rb +18 -0
  18. data/lib/eac_cli/old_configs.rb +36 -0
  19. data/lib/eac_cli/old_configs/entry_reader.rb +80 -0
  20. data/lib/eac_cli/old_configs/password_entry_reader.rb +16 -0
  21. data/lib/eac_cli/old_configs/read_entry_options.rb +44 -0
  22. data/lib/eac_cli/old_configs/store_passwords_entry_reader.rb +25 -0
  23. data/lib/eac_cli/old_configs_bridge.rb +37 -0
  24. data/lib/eac_cli/patches/module.rb +4 -0
  25. data/lib/eac_cli/patches/module/speaker.rb +10 -0
  26. data/lib/eac_cli/patches/object/runner_with.rb +1 -1
  27. data/lib/eac_cli/runner/context.rb +2 -1
  28. data/lib/eac_cli/runner/instance_methods.rb +8 -1
  29. data/lib/eac_cli/runner_with/subcommands.rb +5 -1
  30. data/lib/eac_cli/runner_with/subcommands/definition_concern.rb +10 -0
  31. data/lib/eac_cli/speaker.rb +131 -0
  32. data/lib/eac_cli/speaker/_class_methods.rb +37 -0
  33. data/lib/eac_cli/speaker/_constants.rb +12 -0
  34. data/lib/eac_cli/speaker/list.rb +61 -0
  35. data/lib/eac_cli/speaker/node.rb +24 -0
  36. data/lib/eac_cli/version.rb +1 -1
  37. metadata +73 -13
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/speaker/node'
4
+
5
+ module EacCli
6
+ module Speaker
7
+ class << self
8
+ def current_node
9
+ nodes_stack.last
10
+ end
11
+
12
+ def on_node(&block)
13
+ push
14
+ yield(*(block.arity.zero? ? [] : [current_node]))
15
+ ensure
16
+ pop
17
+ end
18
+
19
+ def push
20
+ nodes_stack << ::EacCli::Speaker::Node.new
21
+ current_node
22
+ end
23
+
24
+ def pop
25
+ return nodes_stack.pop if nodes_stack.count > 1
26
+
27
+ raise "Cannot remove first node (nodes_stack.count: #{nodes_stack.count})"
28
+ end
29
+
30
+ private
31
+
32
+ def nodes_stack
33
+ @nodes_stack ||= [::EacCli::Speaker::Node.new]
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/by_reference'
4
+
5
+ module EacCli
6
+ # https://github.com/fazibear/colorize
7
+ module Speaker
8
+ STDERR = ::EacRubyUtils::ByReference.new { $stderr }
9
+ STDIN = ::EacRubyUtils::ByReference.new { $stdin }
10
+ STDOUT = ::EacRubyUtils::ByReference.new { $stdout }
11
+ end
12
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/hash_with_indifferent_access'
4
+ require 'ostruct'
5
+
6
+ module EacCli
7
+ module Speaker
8
+ class List
9
+ class << self
10
+ def build(list)
11
+ return List.new(hash_to_values(list)) if list.is_a?(::Hash)
12
+ return List.new(array_to_values(list)) if list.is_a?(::Array)
13
+
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| # rubocop:disable Style/HashEachMethods
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
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/object/if_present'
4
+ require 'eac_cli/speaker/_constants'
5
+
6
+ module EacCli
7
+ module Speaker
8
+ class Node
9
+ attr_accessor :stdin, :stdout, :stderr, :stderr_line_prefix
10
+
11
+ def initialize(parent = nil)
12
+ self.stdin = parent.if_present(::EacCli::Speaker::STDIN, &:stdin)
13
+ self.stdout = parent.if_present(::EacCli::Speaker::STDOUT, &:stdout)
14
+ self.stderr = parent.if_present(::EacCli::Speaker::STDERR, &:stderr)
15
+ self.stderr_line_prefix = parent.if_present('', &:stderr_line_prefix)
16
+ end
17
+
18
+ def configure
19
+ yield(self)
20
+ self
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacCli
4
- VERSION = '0.16.0'
4
+ VERSION = '0.18.0'
5
5
  end
metadata CHANGED
@@ -1,49 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.18.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: 2021-02-27 00:00:00.000000000 Z
11
+ date: 2021-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: docopt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.6.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.6.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: eac_config
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.3'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: eac_ruby_utils
15
57
  requirement: !ruby/object:Gem::Requirement
16
58
  requirements:
17
59
  - - "~>"
18
60
  - !ruby/object:Gem::Version
19
- version: '0.55'
61
+ version: '0.64'
20
62
  type: :runtime
21
63
  prerelease: false
22
64
  version_requirements: !ruby/object:Gem::Requirement
23
65
  requirements:
24
66
  - - "~>"
25
67
  - !ruby/object:Gem::Version
26
- version: '0.55'
68
+ version: '0.64'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: eac_ruby_gem_support
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '0.1'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 0.1.2
75
+ version: '0.2'
37
76
  type: :development
38
77
  prerelease: false
39
78
  version_requirements: !ruby/object:Gem::Requirement
40
79
  requirements:
41
80
  - - "~>"
42
81
  - !ruby/object:Gem::Version
43
- version: '0.1'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 0.1.2
82
+ version: '0.2'
47
83
  description:
48
84
  email:
49
85
  executables: []
@@ -52,6 +88,10 @@ extra_rdoc_files: []
52
88
  files:
53
89
  - Gemfile
54
90
  - lib/eac_cli.rb
91
+ - lib/eac_cli/config.rb
92
+ - lib/eac_cli/config/entry.rb
93
+ - lib/eac_cli/config/entry/options.rb
94
+ - lib/eac_cli/config/entry/undefined.rb
55
95
  - lib/eac_cli/core_ext.rb
56
96
  - lib/eac_cli/default_runner.rb
57
97
  - lib/eac_cli/definition.rb
@@ -66,6 +106,18 @@ files:
66
106
  - lib/eac_cli/docopt/doc_builder/alternative.rb
67
107
  - lib/eac_cli/docopt/runner_context_replacement.rb
68
108
  - lib/eac_cli/docopt/runner_extension.rb
109
+ - lib/eac_cli/docopt_runner.rb
110
+ - lib/eac_cli/docopt_runner/_class_methods.rb
111
+ - lib/eac_cli/docopt_runner/_doc.rb
112
+ - lib/eac_cli/docopt_runner/_settings.rb
113
+ - lib/eac_cli/docopt_runner/_subcommands.rb
114
+ - lib/eac_cli/docopt_runner/context.rb
115
+ - lib/eac_cli/old_configs.rb
116
+ - lib/eac_cli/old_configs/entry_reader.rb
117
+ - lib/eac_cli/old_configs/password_entry_reader.rb
118
+ - lib/eac_cli/old_configs/read_entry_options.rb
119
+ - lib/eac_cli/old_configs/store_passwords_entry_reader.rb
120
+ - lib/eac_cli/old_configs_bridge.rb
69
121
  - lib/eac_cli/parser.rb
70
122
  - lib/eac_cli/parser/alternative.rb
71
123
  - lib/eac_cli/parser/alternative/argv.rb
@@ -78,6 +130,8 @@ files:
78
130
  - lib/eac_cli/parser/collector.rb
79
131
  - lib/eac_cli/parser/error.rb
80
132
  - lib/eac_cli/patches.rb
133
+ - lib/eac_cli/patches/module.rb
134
+ - lib/eac_cli/patches/module/speaker.rb
81
135
  - lib/eac_cli/patches/object.rb
82
136
  - lib/eac_cli/patches/object/runner_with.rb
83
137
  - lib/eac_cli/runner.rb
@@ -88,7 +142,13 @@ files:
88
142
  - lib/eac_cli/runner_with.rb
89
143
  - lib/eac_cli/runner_with/help.rb
90
144
  - lib/eac_cli/runner_with/subcommands.rb
145
+ - lib/eac_cli/runner_with/subcommands/definition_concern.rb
91
146
  - lib/eac_cli/runner_with_set.rb
147
+ - lib/eac_cli/speaker.rb
148
+ - lib/eac_cli/speaker/_class_methods.rb
149
+ - lib/eac_cli/speaker/_constants.rb
150
+ - lib/eac_cli/speaker/list.rb
151
+ - lib/eac_cli/speaker/node.rb
92
152
  - lib/eac_cli/version.rb
93
153
  homepage:
94
154
  licenses: []
@@ -108,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
168
  - !ruby/object:Gem::Version
109
169
  version: '0'
110
170
  requirements: []
111
- rubygems_version: 3.0.8
171
+ rubygems_version: 3.0.9
112
172
  signing_key:
113
173
  specification_version: 4
114
174
  summary: Utilities to build CLI applications with Ruby.