eac_cli 0.32.0 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1e50e2a284a092f29a86d4ed6871c5f72d60cd0b655f8ab991d281bc0245786
4
- data.tar.gz: 88e1aac4d700544a32debe645752a192f2732ee2e4f248796a952acf33853dab
3
+ metadata.gz: 5669575a2fe583905e0b4f1406102ce97429ecedbfd97e69d737c5198410242c
4
+ data.tar.gz: 0e777a88e237fa1e2d61d9a95d14c0435f0ec3664902fcc896d89bf9edb509f0
5
5
  SHA512:
6
- metadata.gz: 1cfe95828490465373b2cacb1f7a8a087903466b89ec0a7fb208cbe05742c5a8c498834350aa35d606cefe900e088853c9b6f5fd5213c71e4a25bb1843616564
7
- data.tar.gz: 9d38a66bd9b3b1f3dea27c386a50a26c430cc94ed142ab5733297ab499ad4bf718b04f17d81b765e54e6d9c08e3517abc519877b54bf521e2c15e6704c80db75
6
+ metadata.gz: 861a9c0e766b38db24fc8e2dc27b74fa4cd91b2978e0ad01d452acdcaa5fcd3c3fc9012e65b71270c65e8bf69333048f84ce115b1d031d57196586944109aec9
7
+ data.tar.gz: d9d516f186575069712a9d33673ef26021dc2ed2644b347ee05549861cbceca023b2541658cf5730e8446b8abebddb9261e0f616b8255c7a959a8c5fabdf6559
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_cli/definition/default_value'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module EacCli
6
7
  class Definition
7
8
  class BaseOption
8
9
  require_sub __FILE__
10
+ include ::EacCli::Definition::DefaultValue
9
11
 
10
12
  class << self
11
13
  def from_args(args)
@@ -17,7 +19,7 @@ module EacCli
17
19
  DEFAULT_REQUIRED = false
18
20
 
19
21
  enable_listable
20
- enable_abstract_methods :build_value, :default_value
22
+ enable_abstract_methods :build_value
21
23
  lists.add_symbol :option, :default, :optional, :usage, :repeat, :required
22
24
  common_constructor :short, :long, :description, :options, default: [{}] do
23
25
  raise 'Nor short neither long selector was set' if short.blank? && long.blank?
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ class Definition
7
+ module DefaultValue
8
+ def default_value
9
+ default_value? ? options[OPTION_DEFAULT] : default_default_value
10
+ end
11
+
12
+ def default_value?
13
+ options.key?(OPTION_DEFAULT)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -18,19 +18,22 @@ module EacCli
18
18
  # Call a method in the runner or in one of it ancestors.
19
19
  def call(method_name, *args)
20
20
  return runner.send(method_name, *args) if runner.respond_to?(method_name)
21
- return parent_call(method_name, *args) if parent.present?
21
+ return parent_call(method_name, *args) if parent_respond_to?(method_name)
22
22
 
23
23
  raise ::NameError, "No method \"#{method_name}\" found in #{runner} or in its ancestors"
24
24
  end
25
25
 
26
- def respond_to_call?((method_name))
27
- parent.respond_to?(:runner_context) && parent.runner_context.respond_to_call?(method_name)
28
- end
26
+ # @param method_name [Symbol]
27
+ # @return [Boolean]
28
+ def parent_respond_to?(method_name)
29
+ parent.if_present(false) do |v|
30
+ next true if v.respond_to?(method_name)
29
31
 
30
- protected
32
+ v.if_respond(:runner_context, false) { |w| w.parent_respond_to?(method_name) }
33
+ end
34
+ end
31
35
 
32
36
  def parent_call(method_name, *args)
33
- return parent.context(method_name, *args) if parent.respond_to?(:context)
34
37
  return parent.runner_context.call(method_name, *args) if parent.respond_to?(:runner_context)
35
38
 
36
39
  raise "Parent #{parent} do not respond to .context or .runner_context (Runner: #{runner})"
@@ -30,13 +30,13 @@ module EacCli
30
30
  end
31
31
 
32
32
  def respond_to_missing?(method, include_all = false)
33
- runner_context.respond_to_call?(method) || super
33
+ runner_context.parent_respond_to?(method) || super
34
34
  end
35
35
 
36
36
  def method_missing(method, *args, &block)
37
- return super unless runner_context.respond_to_call?(method)
37
+ return super unless runner_context.parent_respond_to?(method)
38
38
 
39
- runner_context.call(method, *args, &block)
39
+ runner_context.parent_call(method, *args, &block)
40
40
  end
41
41
  end
42
42
  end
@@ -1,18 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_cli/runner_with/help/list_section'
3
+ require 'eac_cli/runner_with/help/layout'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module EacCli
7
7
  module RunnerWith
8
8
  module Help
9
9
  class Builder
10
+ include ::EacCli::RunnerWith::Help::Layout
10
11
  require_sub __FILE__, require_dependency: true
11
12
  common_constructor :runner
12
13
 
13
- OPTION_DESC_SEP = ::EacCli::RunnerWith::Help::ListSection::IDENTATION * 2
14
- SECTION_SEPARATOR = "\n"
15
-
16
14
  class << self
17
15
  def option_long(option)
18
16
  b = option.long
@@ -35,7 +33,7 @@ module EacCli
35
33
  end
36
34
 
37
35
  def word_separator
38
- ::EacCli::RunnerWith::Help::ListSection::WORD_SEPARATOR
36
+ WORD_SEPARATOR
39
37
  end
40
38
  end
41
39
 
@@ -45,36 +43,22 @@ module EacCli
45
43
  runner.class.runner_definition
46
44
  end
47
45
 
48
- # @return [String, nil]
49
- def extra_section
50
- ess = extra_sections
51
- return nil if ess.none?
52
-
53
- ess.join(SECTION_SEPARATOR)
54
- end
55
-
56
46
  # @return [Enumerable<String>]
57
47
  def extra_sections
58
48
  runner.if_respond(:help_extra_text, []) do |v|
59
- if v.is_a?(::Hash)
60
- v.map do |title, lines|
61
- ::EacCli::RunnerWith::Help::ListSection.new(title, lines)
62
- end
63
- else
64
- [v.to_s]
65
- end
49
+ [v.to_s]
66
50
  end
67
51
  end
68
52
 
69
53
  def option_definition(option)
70
54
  [self.class.option_usage_full(option), option.description,
71
55
  option.default_value? ? "[Default: \"#{option.default_value}\"]" : nil]
72
- .reject(&:blank?).join(OPTION_DESC_SEP)
56
+ .reject(&:blank?).join(OPTION_DESCRIPTION_SEPARATOR)
73
57
  end
74
58
 
75
59
  # @return [String]
76
60
  def options_section
77
- ::EacCli::RunnerWith::Help::ListSection.new(
61
+ list_section(
78
62
  'Options',
79
63
  definition.alternatives.flat_map(&:options).map { |option| option_definition(option) }
80
64
  )
@@ -82,16 +66,14 @@ module EacCli
82
66
 
83
67
  # @return [String]
84
68
  def usage_section
85
- ::EacCli::RunnerWith::Help::ListSection.new(
69
+ list_section(
86
70
  'Usage',
87
71
  definition.alternatives.map { |alternative| self.alternative(alternative) }
88
72
  )
89
73
  end
90
74
 
91
75
  def to_s
92
- r = ["#{definition.description}\n", usage_section, options_section]
93
- .map { |s| "#{s}#{SECTION_SEPARATOR}" }.join
94
- extra_section.if_present(r) { |v| r + v }
76
+ join_sections(definition.description, usage_section, options_section, *extra_sections)
95
77
  end
96
78
  end
97
79
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ module RunnerWith
7
+ module Help
8
+ module Layout
9
+ common_concern do
10
+ include InstanceClassMethods
11
+ extend InstanceClassMethods
12
+ end
13
+
14
+ module InstanceClassMethods
15
+ WORD_SEPARATOR = ' '
16
+ IDENTATION = WORD_SEPARATOR * 2
17
+ OPTION_DESCRIPTION_SEPARATOR = IDENTATION * 2
18
+ LINE_BREAK = "\n"
19
+ SECTION_SEPARATOR = LINE_BREAK * 2
20
+
21
+ # @param title String
22
+ # @param items [Enumerable<String>]
23
+ # @return [String]
24
+ def list_section(title, items)
25
+ (["#{title}:"] + items.map { |line| "#{IDENTATION}#{line}" })
26
+ .map { |line| "#{line}\n" }.join
27
+ end
28
+
29
+ # @param sections [Enumerable<String>]
30
+ # @return [String]
31
+ def join_sections(*sections)
32
+ sections.map { |s| s.to_s.strip }.join(SECTION_SEPARATOR) + LINE_BREAK
33
+ end
34
+ end
35
+
36
+ extend InstanceClassMethods
37
+ end
38
+ end
39
+ end
40
+ end
@@ -20,6 +20,18 @@ module EacCli
20
20
  end
21
21
  end
22
22
 
23
+ # @param items [Enumerable<String>]
24
+ # @return [String]
25
+ def help_list_section(title, items)
26
+ ::EacCli::RunnerWith::Help::Layout.list_section(title, items)
27
+ end
28
+
29
+ # @param items [Enumerable<String>]
30
+ # @return [String]
31
+ def help_join_sections(*sections)
32
+ ::EacCli::RunnerWith::Help::Layout.join_sections(*sections)
33
+ end
34
+
23
35
  def help_run
24
36
  return unless show_help?
25
37
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'eac_cli/runner'
4
4
  require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/abstract_methods'
5
+ require 'eac_ruby_utils/acts_as_abstract'
6
6
 
7
7
  module EacCli
8
8
  module RunnerWith
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'eac_cli/runner'
4
4
  require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/abstract_methods'
5
+ require 'eac_ruby_utils/acts_as_abstract'
6
6
 
7
7
  module EacCli
8
8
  module RunnerWith
@@ -53,10 +53,7 @@ module EacCli
53
53
 
54
54
  # @return [Hash<String, Enumerable<String>]
55
55
  def help_extra_text
56
- {
57
- 'Subcommands' =>
58
- available_subcommands.keys.sort
59
- }
56
+ help_list_section('Subcommands', available_subcommands.keys.sort)
60
57
  end
61
58
 
62
59
  def method_missing(method_name, *arguments, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacCli
4
- VERSION = '0.32.0'
4
+ VERSION = '0.34.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.32.0
4
+ version: 0.34.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: 2023-05-10 00:00:00.000000000 Z
11
+ date: 2023-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.113'
53
+ version: '0.116'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0.113'
60
+ version: '0.116'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: eac_ruby_gem_support
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +92,7 @@ files:
92
92
  - lib/eac_cli/definition/base_option.rb
93
93
  - lib/eac_cli/definition/base_option/initialize_args_parser.rb
94
94
  - lib/eac_cli/definition/boolean_option.rb
95
+ - lib/eac_cli/definition/default_value.rb
95
96
  - lib/eac_cli/definition/positional_argument.rb
96
97
  - lib/eac_cli/enum.rb
97
98
  - lib/eac_cli/old_configs.rb
@@ -126,7 +127,7 @@ files:
126
127
  - lib/eac_cli/runner_with/help.rb
127
128
  - lib/eac_cli/runner_with/help/builder.rb
128
129
  - lib/eac_cli/runner_with/help/builder/alternative.rb
129
- - lib/eac_cli/runner_with/help/list_section.rb
130
+ - lib/eac_cli/runner_with/help/layout.rb
130
131
  - lib/eac_cli/runner_with/input.rb
131
132
  - lib/eac_cli/runner_with/output.rb
132
133
  - lib/eac_cli/runner_with/subcommands.rb
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacCli
6
- module RunnerWith
7
- module Help
8
- class ListSection
9
- WORD_SEPARATOR = ' '
10
- IDENTATION = WORD_SEPARATOR * 2
11
-
12
- common_constructor :title, :items
13
-
14
- # @return [String]
15
- def to_s
16
- (["#{title}:"] + items.map { |line| "#{IDENTATION}#{line}" })
17
- .map { |line| "#{line}\n" }.join
18
- end
19
- end
20
- end
21
- end
22
- end