ehbrs-tools 0.13.0 → 0.13.1

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ehbrs/runner.rb +9 -13
  3. data/lib/ehbrs/runner/fs/used_space.rb +4 -4
  4. data/lib/ehbrs/tools/version.rb +1 -1
  5. data/vendor/eac_cli/eac_cli.gemspec +3 -3
  6. data/vendor/eac_cli/lib/eac_cli/definition.rb +72 -0
  7. data/vendor/eac_cli/lib/eac_cli/definition/argument_option.rb +13 -0
  8. data/vendor/eac_cli/lib/eac_cli/{runner → definition}/base_option.rb +5 -1
  9. data/vendor/eac_cli/lib/eac_cli/definition/boolean_option.rb +13 -0
  10. data/vendor/eac_cli/lib/eac_cli/{runner → definition}/positional_argument.rb +5 -1
  11. data/vendor/eac_cli/lib/eac_cli/{runner/docopt_doc.rb → docopt/doc_builder.rb} +15 -8
  12. data/vendor/eac_cli/lib/eac_cli/docopt/runner_extension.rb +51 -0
  13. data/vendor/eac_cli/lib/eac_cli/parser.rb +14 -0
  14. data/vendor/eac_cli/lib/eac_cli/parser/collector.rb +56 -0
  15. data/vendor/eac_cli/lib/eac_cli/parser/error.rb +15 -0
  16. data/vendor/eac_cli/lib/eac_cli/parser/options_collection.rb +105 -0
  17. data/vendor/eac_cli/lib/eac_cli/parser/parse_result.rb +21 -0
  18. data/vendor/eac_cli/lib/eac_cli/parser/positional_collection.rb +49 -0
  19. data/vendor/eac_cli/lib/eac_cli/runner.rb +25 -5
  20. data/vendor/eac_cli/lib/eac_cli/runner/context.rb +18 -0
  21. data/vendor/eac_cli/lib/eac_cli/version.rb +1 -1
  22. data/vendor/eac_cli/spec/lib/eac_cli/runner_spec.rb +70 -0
  23. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/boolean.rb +31 -0
  24. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner.rb +6 -0
  25. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +2 -2
  26. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +8 -2
  27. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env.rb +12 -9
  28. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/dasho_options.rb +53 -0
  29. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/identity_file.rb +25 -0
  30. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/quiet.rb +24 -0
  31. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env/terminal.rb +34 -0
  32. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/immutable/array_accessor.rb +4 -0
  33. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/immutable/hash_accessor.rb +4 -0
  34. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/inflector.rb +18 -0
  35. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +5 -0
  36. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_respond.rb +22 -0
  37. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/string.rb +4 -0
  38. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/string/inflector.rb +9 -0
  39. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +8 -8
  40. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/struct.rb +47 -0
  41. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  42. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/inflector_spec.rb +15 -0
  43. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/struct_spec.rb +46 -0
  44. metadata +30 -10
  45. data/vendor/eac_cli/lib/eac_cli/runner/argument_option.rb +0 -13
  46. data/vendor/eac_cli/lib/eac_cli/runner/boolean_option.rb +0 -13
  47. data/vendor/eac_cli/lib/eac_cli/runner/definition.rb +0 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a216d21cdcdb218151fbfd96d21d4b378ae35c4071d222707178c48a6f4ad69
4
- data.tar.gz: dec260f1e8ffceb7eaa91fb4052b136d8222525c473e348abd897e86d0ba4e00
3
+ metadata.gz: 9692fcad0f7b1e05f59f98e17e1d1e5042efa22f1bd1e8ada8a2b5b2d4909e66
4
+ data.tar.gz: 606f3be03e5b0f54564aaa78b466e89ed498cf4a7d316e187cb6432b34cd46f6
5
5
  SHA512:
6
- metadata.gz: 000fb54ab3abd785846e2d05802a7d12752109be7a2ac2314ea7804bcc90a4f98f3ee443dd693c6cba1687333c32d2832387f17acc9e32e44a6fb1cb22e23954
7
- data.tar.gz: 8b060bb61da97a62b3fd1648060fb667ea9ed074fd719c194806d15469bae413031f663df10877b0099d109a4d78544f8e3148b842d36841e68f0140daa99b15
6
+ metadata.gz: 4fc3d4a8dc042274ca49de459c5a18d8179cd0b2f1846016c9fcff06d909b5583aa282e645205bc502698b447ae2a8aab3bf53bfc9646e71eea23a9949c5b272
7
+ data.tar.gz: 48d655fe4a28192181f2e40d3f2f9041d7c3f4a41a80168446ee15ec176d54c2f5c0c4428d41fc0a5c3248f5dc3471b408c8f8d58b7ffecd5131d9040e7ef0ce
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_cli/default_runner'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
  require 'eac_ruby_utils/console/docopt_runner'
5
6
  require 'ehbrs/tools/version'
@@ -7,20 +8,15 @@ require 'ehbrs/tools/version'
7
8
  module Ehbrs
8
9
  class Runner < ::EacRubyUtils::Console::DocoptRunner
9
10
  require_sub __FILE__
10
- enable_console_speaker
11
+ include ::EacCli::DefaultRunner
11
12
 
12
- DOC = <<~DOCOPT
13
- Tools for EHB/RS.
14
-
15
- Usage:
16
- __PROGRAM__ [options] __SUBCOMMANDS__
17
- __PROGRAM__ --version
18
- __PROGRAM__ -h | --help
19
-
20
- Options:
21
- -h --help Show this screen.
22
- -V --version Show version.
23
- DOCOPT
13
+ runner_definition do
14
+ desc 'Tools for EHB/RS.'
15
+ subcommands
16
+ alt do
17
+ bool_opt '-V', '--version', 'Show version.'
18
+ end
19
+ end
24
20
 
25
21
  def run
26
22
  if options.fetch('--version')
@@ -6,7 +6,7 @@ require 'filesize'
6
6
  module Ehbrs
7
7
  class Runner < ::EacRubyUtils::Console::DocoptRunner
8
8
  class Fs < ::EacRubyUtils::Console::DocoptRunner
9
- class UsedSpace < ::EacRubyUtils::Console::DocoptRunner
9
+ class UsedSpace
10
10
  include ::EacCli::DefaultRunner
11
11
 
12
12
  runner_definition do
@@ -22,7 +22,7 @@ module Ehbrs
22
22
  end
23
23
 
24
24
  def check?
25
- options.fetch('--check')
25
+ parsed.check
26
26
  end
27
27
 
28
28
  private
@@ -40,11 +40,11 @@ module Ehbrs
40
40
  end
41
41
 
42
42
  def paths_uncached
43
- options.fetch('<paths>').map { |path| path_class.new(self, path) }
43
+ parsed.paths.map { |path| path_class.new(self, path) }
44
44
  end
45
45
 
46
46
  def verbose?
47
- options.fetch('--verbose')
47
+ parsed.verbose
48
48
  end
49
49
 
50
50
  class PathBase
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ehbrs
4
4
  module Tools
5
- VERSION = '0.13.0'
5
+ VERSION = '0.13.1'
6
6
  end
7
7
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = Dir['{lib}/**/*', 'Gemfile']
14
14
 
15
- s.add_dependency 'eac_ruby_utils', '~> 0.23
16
- '
17
- s.add_development_dependency 'eac_ruby_gem_support', '~> 0.1'
15
+ s.add_dependency 'eac_ruby_utils', '~> 0.45'
16
+
17
+ s.add_development_dependency 'eac_ruby_gem_support', '~> 0.1', '>= 0.1.2'
18
18
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/definition/argument_option'
4
+ require 'eac_cli/definition/boolean_option'
5
+ require 'eac_cli/definition/positional_argument'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module EacCli
9
+ class Definition
10
+ require_sub __FILE__
11
+ attr_accessor :description
12
+ attr_accessor :options_argument
13
+
14
+ def initialize
15
+ self.description = '-- NO DESCRIPTION SET --'
16
+ self.options_argument = true
17
+ end
18
+
19
+ def alt(&block)
20
+ r = ::EacCli::Definition.new
21
+ r.instance_eval(&block)
22
+ alternatives << r
23
+ r
24
+ end
25
+
26
+ def alternatives
27
+ @alternatives ||= []
28
+ end
29
+
30
+ def arg_opt(short, long, description, option_options = {})
31
+ options << ::EacCli::Definition::ArgumentOption.new(
32
+ short, long, description, option_options
33
+ )
34
+ end
35
+
36
+ def bool_opt(short, long, description, option_options = {})
37
+ options << ::EacCli::Definition::BooleanOption.new(short, long, description, option_options)
38
+ end
39
+
40
+ def desc(description)
41
+ self.description = description
42
+ end
43
+
44
+ def options_arg(options_argument)
45
+ self.options_argument = options_argument
46
+ end
47
+
48
+ def options
49
+ @options ||= []
50
+ end
51
+
52
+ def pos_arg(name, arg_options = {})
53
+ positional << ::EacCli::Definition::PositionalArgument.new(name, arg_options)
54
+ end
55
+
56
+ def positional
57
+ @positional ||= []
58
+ end
59
+
60
+ def subcommands
61
+ positional << ::EacCli::Definition::PositionalArgument.new('subcommand', subcommand: true)
62
+ end
63
+
64
+ def options_first(enable = true)
65
+ @options_first = enable
66
+ end
67
+
68
+ def options_first?
69
+ @options_first ? true : false
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/definition/base_option'
4
+
5
+ module EacCli
6
+ class Definition
7
+ class ArgumentOption < ::EacCli::Definition::BaseOption
8
+ def argument?
9
+ true
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,7 +3,7 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module EacCli
6
- module Runner
6
+ class Definition
7
7
  class BaseOption
8
8
  attr_reader :short, :long, :description, :options
9
9
 
@@ -14,6 +14,10 @@ module EacCli
14
14
  @options = options.with_indifferent_access
15
15
  end
16
16
 
17
+ def identifier
18
+ long.to_s.variableize.to_sym
19
+ end
20
+
17
21
  def show_on_usage?
18
22
  options[:usage]
19
23
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/definition/base_option'
4
+
5
+ module EacCli
6
+ class Definition
7
+ class BooleanOption < ::EacCli::Definition::BaseOption
8
+ def argument?
9
+ false
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,10 +3,14 @@
3
3
  require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  module EacCli
6
- module Runner
6
+ class Definition
7
7
  class PositionalArgument
8
8
  common_constructor :name, :options, default: [{}]
9
9
 
10
+ def identifier
11
+ name.to_s.variableize.to_sym
12
+ end
13
+
10
14
  def optional?
11
15
  options[:optional]
12
16
  end
@@ -4,8 +4,8 @@ require 'eac_ruby_utils/core_ext'
4
4
  require 'eac_ruby_utils/console/docopt_runner'
5
5
 
6
6
  module EacCli
7
- module Runner
8
- class DocoptDoc
7
+ module Docopt
8
+ class DocBuilder
9
9
  common_constructor :definition
10
10
 
11
11
  SEP = ' '
@@ -51,15 +51,22 @@ module EacCli
51
51
  end
52
52
 
53
53
  def self_usage
54
- b = IDENT + ::EacRubyUtils::Console::DocoptRunner::PROGRAM_MACRO
55
- b += "#{SEP}[options]" if definition.options_argument
56
- b + self_usage_arguments
54
+ IDENT + self_usage_arguments.join(SEP)
57
55
  end
58
56
 
59
57
  def self_usage_arguments
60
- definition.options.select(&:show_on_usage?)
61
- .map { |option| "#{SEP}#{option_argument(option)}" }.join +
62
- definition.positional.map { |p| "#{SEP}#{positional_argument(p)}" }.join
58
+ [::EacRubyUtils::Console::DocoptRunner::PROGRAM_MACRO] +
59
+ definition.options_argument.if_present([]) { |_v| ['[options]'] } +
60
+ self_usage_arguments_options +
61
+ self_usage_arguments_positional
62
+ end
63
+
64
+ def self_usage_arguments_options
65
+ definition.options.select(&:show_on_usage?).map { |option| option_argument(option) }
66
+ end
67
+
68
+ def self_usage_arguments_positional
69
+ definition.positional.map { |p| positional_argument(p) }
63
70
  end
64
71
 
65
72
  def to_s
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/docopt/doc_builder'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+
6
+ module EacCli
7
+ module Docopt
8
+ module RunnerExtension
9
+ extend ::ActiveSupport::Concern
10
+
11
+ included do
12
+ singleton_class.prepend ClassMethods
13
+ prepend InstanceMethods
14
+ end
15
+
16
+ class << self
17
+ def check(klass)
18
+ return unless klass < ::EacRubyUtils::Console::DocoptRunner
19
+
20
+ klass.include(self)
21
+ end
22
+ end
23
+
24
+ module ClassMethods
25
+ def create(*context_args)
26
+ r = new(*context_args)
27
+ r.context = ::EacCli::Runner::Context.new(*context_args)
28
+ r
29
+ end
30
+ end
31
+
32
+ module InstanceMethods
33
+ def doc
34
+ ::EacCli::Docopt::DocBuilder.new(self.class.runner_definition).to_s
35
+ end
36
+
37
+ def docopt_options
38
+ super.merge(options_first: self.class.runner_definition.options_first?)
39
+ end
40
+ end
41
+
42
+ def extra_available_subcommands
43
+ self.class.constants
44
+ .map { |name| self.class.const_get(name) }
45
+ .select { |c| c.instance_of? Class }
46
+ .select { |c| c.included_modules.include?(::EacCli::Runner) }
47
+ .map { |c| c.name.demodulize.underscore.dasherize }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ class Parser
7
+ require_sub __FILE__
8
+ common_constructor :definition
9
+
10
+ def parse(argv)
11
+ ::EacCli::Parser::ParseResult.new(definition, argv).result
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/struct'
5
+
6
+ module EacCli
7
+ class Parser
8
+ class Collector
9
+ class << self
10
+ def to_data(definition)
11
+ collector = new(definition)
12
+ yield(collector)
13
+ collector.to_data
14
+ end
15
+ end
16
+
17
+ common_constructor :definition do
18
+ default_values
19
+ end
20
+
21
+ # @return [OpenStruct]
22
+ def to_data
23
+ ::EacRubyUtils::Struct.new(data.transform_keys(&:identifier))
24
+ end
25
+
26
+ def collect(option, value)
27
+ if data[option].is_a?(::Array)
28
+ data[option] << value
29
+ else
30
+ data[option] = value
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def data
37
+ @data ||= {}
38
+ end
39
+
40
+ def default_values
41
+ definition.options.each { |option| data[option] = option_default_value(option) }
42
+ definition.positional.each do |positional|
43
+ data[positional] = positional_default_value(positional)
44
+ end
45
+ end
46
+
47
+ def option_default_value(option)
48
+ option.argument? ? nil : false
49
+ end
50
+
51
+ def positional_default_value(positional)
52
+ positional.repeat? ? [] : nil
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacCli
6
+ class Parser
7
+ class Error < ::StandardError
8
+ def initialize(definition, argv, message)
9
+ @definition = definition
10
+ @argv = argv
11
+ super(message)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'optparse'
5
+
6
+ module EacCli
7
+ class Parser
8
+ class OptionsCollection
9
+ SEP = ' '
10
+ IDENT = SEP * 2
11
+ OPTION_DESC_SEP = IDENT * 2
12
+
13
+ enable_simple_cache
14
+ common_constructor(:definition, :argv, :collector) { collect }
15
+ attr_reader :arguments
16
+
17
+ private
18
+
19
+ def collect
20
+ build_banner
21
+ build_options
22
+ @arguments = option_parser.parse(argv)
23
+ end
24
+
25
+ def option_parser_uncached
26
+ ::OptionParser.new
27
+ end
28
+
29
+ def build_banner
30
+ option_parser.banner = "#{definition.description}\n\n#{section('usage')}"
31
+ end
32
+
33
+ def build_options
34
+ definition.options.each do |option|
35
+ build_option(option)
36
+ end
37
+ end
38
+
39
+ def build_option(option)
40
+ option_parser.on(
41
+ *[option_short(option), option_long(option), option.description].reject(&:blank?)
42
+ ) do |value|
43
+ collector.collect(option, value)
44
+ end
45
+ end
46
+
47
+ def positional_argument(positional)
48
+ if positional.subcommand?
49
+ ::EacRubyUtils::Console::DocoptRunner::SUBCOMMANDS_MACRO
50
+ else
51
+ r = "<#{positional.name}>"
52
+ r += '...' if positional.repeat?
53
+ r = "[#{r}]" if positional.optional?
54
+ r
55
+ end
56
+ end
57
+
58
+ def option_argument(option)
59
+ option_long(option)
60
+ end
61
+
62
+ def option_long(option)
63
+ b = option.long
64
+ b += '=VALUE' if option.argument?
65
+ b
66
+ end
67
+
68
+ def option_short(option)
69
+ b = option.short
70
+ b += 'VALUE' if option.argument?
71
+ b
72
+ end
73
+
74
+ def section(header, include_header = true)
75
+ b = include_header ? "#{header.humanize}:\n" : ''
76
+ b += send("self_#{header}") + "\n"
77
+ # TO-DO: implement alternatives
78
+ b
79
+ end
80
+
81
+ def self_options
82
+ definition.options.map { |option| IDENT + option_definition(option) }.join("\n")
83
+ end
84
+
85
+ def self_usage
86
+ IDENT + self_usage_arguments.join(SEP)
87
+ end
88
+
89
+ def self_usage_arguments
90
+ [::EacRubyUtils::Console::DocoptRunner::PROGRAM_MACRO] +
91
+ definition.options_argument.if_present([]) { |_v| ['[options]'] } +
92
+ self_usage_arguments_options +
93
+ self_usage_arguments_positional
94
+ end
95
+
96
+ def self_usage_arguments_options
97
+ definition.options.select(&:show_on_usage?).map { |option| option_argument(option) }
98
+ end
99
+
100
+ def self_usage_arguments_positional
101
+ definition.positional.map { |p| positional_argument(p) }
102
+ end
103
+ end
104
+ end
105
+ end