eac_ruby_utils 0.63.0 → 0.64.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_ruby_utils/envs/command.rb +10 -5
  3. data/lib/eac_ruby_utils/patches/module/common_concern.rb +0 -1
  4. data/lib/eac_ruby_utils/rspec/conditional.rb +1 -4
  5. data/lib/eac_ruby_utils/version.rb +1 -1
  6. metadata +2 -66
  7. data/lib/eac_ruby_utils/configs.rb +0 -74
  8. data/lib/eac_ruby_utils/configs/base.rb +0 -43
  9. data/lib/eac_ruby_utils/configs/file.rb +0 -47
  10. data/lib/eac_ruby_utils/console.rb +0 -5
  11. data/lib/eac_ruby_utils/console/configs.rb +0 -38
  12. data/lib/eac_ruby_utils/console/configs/entry_reader.rb +0 -81
  13. data/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +0 -18
  14. data/lib/eac_ruby_utils/console/configs/read_entry_options.rb +0 -46
  15. data/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +0 -27
  16. data/lib/eac_ruby_utils/console/docopt_runner.rb +0 -45
  17. data/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +0 -18
  18. data/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +0 -25
  19. data/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +0 -19
  20. data/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +0 -154
  21. data/lib/eac_ruby_utils/console/speaker.rb +0 -133
  22. data/lib/eac_ruby_utils/console/speaker/_class_methods.rb +0 -39
  23. data/lib/eac_ruby_utils/console/speaker/_constants.rb +0 -14
  24. data/lib/eac_ruby_utils/console/speaker/list.rb +0 -63
  25. data/lib/eac_ruby_utils/console/speaker/node.rb +0 -26
  26. data/lib/eac_ruby_utils/patches/module/console_speaker.rb +0 -10
  27. data/lib/eac_ruby_utils/patches/module/template.rb +0 -10
  28. data/lib/eac_ruby_utils/patches/object/template.rb +0 -9
  29. data/lib/eac_ruby_utils/paths_hash.rb +0 -56
  30. data/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +0 -8
  31. data/lib/eac_ruby_utils/paths_hash/node.rb +0 -67
  32. data/lib/eac_ruby_utils/paths_hash/path_search.rb +0 -39
  33. data/lib/eac_ruby_utils/templates.rb +0 -9
  34. data/lib/eac_ruby_utils/templates/directory.rb +0 -110
  35. data/lib/eac_ruby_utils/templates/file.rb +0 -50
  36. data/lib/eac_ruby_utils/templates/searcher.rb +0 -55
  37. data/lib/eac_ruby_utils/templates/variable_not_found_error.rb +0 -7
  38. data/lib/eac_ruby_utils/templates/variable_providers.rb +0 -25
  39. data/lib/eac_ruby_utils/templates/variable_providers/base.rb +0 -23
  40. data/lib/eac_ruby_utils/templates/variable_providers/entries_reader.rb +0 -25
  41. data/lib/eac_ruby_utils/templates/variable_providers/generic.rb +0 -25
  42. data/lib/eac_ruby_utils/templates/variable_providers/hash.rb +0 -29
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/console/configs/entry_reader'
4
-
5
- module EacRubyUtils
6
- module Console
7
- class Configs
8
- class PasswordEntryReader < ::EacRubyUtils::Console::Configs::EntryReader
9
- ENTRY_KEY = 'core.store_passwords'
10
-
11
- def initialize(console_configs, entry_key, options = {})
12
- super(console_configs, entry_key, options.merge(noecho: true,
13
- store: console_configs.store_passwords?))
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacRubyUtils
6
- module Console
7
- class Configs
8
- class ReadEntryOptions
9
- enable_simple_cache
10
- common_constructor :options do
11
- self.options = options.to_h.symbolize_keys
12
- .assert_valid_keys(DEFAULT_VALUES.keys).freeze
13
- end
14
-
15
- DEFAULT_VALUES = {
16
- before_input: nil, bool: false, list: false, noecho: false, noenv: false, noinput: false,
17
- required: true, store: true, validator: nil
18
- }.freeze
19
-
20
- delegate :to_h, to: :options
21
-
22
- def [](key)
23
- values.fetch(key.to_sym)
24
- end
25
-
26
- def request_input_options
27
- values.slice(:bool, :list, :noecho)
28
- end
29
-
30
- private
31
-
32
- def values_uncached
33
- consumer = options.to_options_consumer
34
- r = {}
35
- DEFAULT_VALUES.each do |key, default_value|
36
- value = consumer.consume(key)
37
- value = default_value if value.nil?
38
- r[key] = value
39
- end
40
- consumer.validate
41
- r
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/console/configs/entry_reader'
4
-
5
- module EacRubyUtils
6
- module Console
7
- class Configs
8
- class StorePasswordsEntryReader < ::EacRubyUtils::Console::Configs::EntryReader
9
- ENTRY_KEY = 'core.store_passwords'
10
-
11
- def initialize(console_configs)
12
- super(console_configs, ENTRY_KEY,
13
- before_input: -> { banner },
14
- validator: ->(entry_value) { %w[yes no].include?(entry_value) }
15
- )
16
- end
17
-
18
- def banner
19
- infom 'Do you wanna to store passwords?'
20
- infom 'Warning: the passwords will be store in clear text in ' \
21
- "\"#{console_configs.configs.storage_path}\""
22
- infom 'Enter "yes" or "no"'
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/hash/indifferent_access'
4
- require 'active_support/core_ext/hash/slice'
5
- require 'docopt'
6
- require 'eac_ruby_utils/contextualizable'
7
- require 'eac_ruby_utils/patches/hash/sym_keys_hash'
8
- Dir["#{__dir__}/#{::File.basename(__FILE__, '.*')}/_*.rb"].sort.each do |partial|
9
- require partial
10
- end
11
-
12
- module EacRubyUtils
13
- module Console
14
- class DocoptRunner
15
- include ::EacRubyUtils::Contextualizable
16
-
17
- class << self
18
- def create(settings = {})
19
- new(settings)
20
- end
21
- end
22
-
23
- attr_reader :settings
24
-
25
- def initialize(settings = {})
26
- @settings = settings.with_indifferent_access.freeze
27
- check_subcommands
28
- end
29
-
30
- def options
31
- @options ||= Docopt.docopt(target_doc, docopt_options)
32
- end
33
-
34
- def parent
35
- settings[:parent]
36
- end
37
-
38
- protected
39
-
40
- def docopt_options
41
- settings.slice(:version, :argv, :help, :options_first).to_sym_keys_hash
42
- end
43
- end
44
- end
45
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacRubyUtils
4
- module Console
5
- class DocoptRunner
6
- DOCOPT_ERROR_EXIT_CODE = 0xC0
7
-
8
- class << self
9
- def run(options = {})
10
- create(options).send(:run)
11
- rescue Docopt::Exit => e
12
- STDERR.write(e.message + "\n")
13
- ::Kernel.exit(DOCOPT_ERROR_EXIT_CODE) # rubocop:disable Rails/Exit
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacRubyUtils
4
- module Console
5
- class DocoptRunner
6
- PROGRAM_MACRO = '__PROGRAM__'
7
-
8
- def source_doc
9
- setting_value(:doc)
10
- end
11
-
12
- def target_doc
13
- source_doc.gsub(PROGRAM_MACRO, target_program_name).strip + "\n"
14
- end
15
-
16
- def source_program_name
17
- setting_value(:program_name, false)
18
- end
19
-
20
- def target_program_name
21
- [source_program_name, ENV['PROGRAM_NAME'], $PROGRAM_NAME].find(&:present?)
22
- end
23
- end
24
- end
25
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/settings_provider'
4
-
5
- module EacRubyUtils
6
- module Console
7
- class DocoptRunner
8
- include ::EacRubyUtils::SettingsProvider
9
-
10
- attr_reader :settings
11
-
12
- private
13
-
14
- def setting_value(key, required = true)
15
- super(key, required: required, order: %w[method settings_object constant])
16
- end
17
- end
18
- end
19
- end
@@ -1,154 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/string/inflections'
4
- require 'shellwords'
5
-
6
- module EacRubyUtils
7
- module Console
8
- class DocoptRunner
9
- SUBCOMMAND_ARG = '<subcommand>'
10
- SUBCOMMAND_ARGS_ARG = '<subcommand-args>'
11
- SUBCOMMANDS_MACRO = '__SUBCOMMANDS__'
12
-
13
- def subcommands?
14
- source_doc.include?(SUBCOMMANDS_MACRO)
15
- end
16
-
17
- def check_subcommands
18
- return unless subcommands?
19
-
20
- singleton_class.include(SubcommandsSupport)
21
- check_subcommands_arg
22
- return if singleton_class.method_defined?(:run)
23
-
24
- singleton_class.send(:alias_method, :run, :run_with_subcommand)
25
- end
26
-
27
- module SubcommandsSupport
28
- EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME = :extra_available_subcommands
29
-
30
- def check_subcommands_arg
31
- if subcommand_arg_as_list?
32
- singleton_class.include(SubcommandsSupport::SubcommandArgAsList)
33
- else
34
- singleton_class.include(SubcommandsSupport::SubcommandArgAsArg)
35
- end
36
- end
37
-
38
- def run_with_subcommand
39
- if subcommand_name
40
- check_valid_subcommand
41
- subcommand_run
42
- else
43
- run_without_subcommand
44
- end
45
- end
46
-
47
- def subcommand
48
- @subcommand ||= subcommand_class_name(subcommand_name).constantize.create(
49
- argv: subcommand_args,
50
- program_name: subcommand_program,
51
- parent: self
52
- )
53
- end
54
-
55
- def subcommand_run
56
- if !subcommand.is_a?(::EacRubyUtils::Console::DocoptRunner) &&
57
- subcommand.respond_to?(:run_run)
58
- subcommand.run_run
59
- else
60
- subcommand.run
61
- end
62
- end
63
-
64
- def target_doc
65
- super.gsub(SUBCOMMANDS_MACRO,
66
- "#{target_doc_subcommand_arg} [#{SUBCOMMAND_ARGS_ARG}...]") +
67
- "\n" + subcommands_target_doc
68
- end
69
-
70
- def docopt_options
71
- super.merge(options_first: true)
72
- end
73
-
74
- def subcommand_class_name(subcommand)
75
- "#{self.class.name}::#{subcommand.underscore.camelize}"
76
- end
77
-
78
- def subcommand_arg_as_list?
79
- setting_value(:subcommand_arg_as_list, false) || false
80
- end
81
-
82
- def subcommand_args
83
- options.fetch(SUBCOMMAND_ARGS_ARG)
84
- end
85
-
86
- def subcommand_program
87
- subcommand_name
88
- end
89
-
90
- def available_subcommands
91
- r = ::Set.new(setting_value(:subcommands, false) || auto_available_subcommands)
92
- if respond_to?(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME, true)
93
- r += send(EXTRA_AVAILABLE_SUBCOMMANDS_METHOD_NAME)
94
- end
95
- r.sort
96
- end
97
-
98
- def auto_available_subcommands
99
- self.class.constants
100
- .map { |name| self.class.const_get(name) }
101
- .select { |c| c.instance_of? Class }
102
- .select { |c| c < ::EacRubyUtils::Console::DocoptRunner }
103
- .map { |c| c.name.demodulize.underscore.dasherize }
104
- end
105
-
106
- def run_without_subcommand
107
- "Method #{__method__} should be overrided in #{self.class.name}"
108
- end
109
-
110
- protected
111
-
112
- def check_valid_subcommand
113
- return if available_subcommands.include?(subcommand_name)
114
-
115
- raise ::Docopt::Exit, "\"#{subcommand_name}\" is not a valid subcommand" \
116
- " (Valid: #{available_subcommands.join(', ')})"
117
- end
118
-
119
- module SubcommandArgAsArg
120
- def target_doc_subcommand_arg
121
- SUBCOMMAND_ARG
122
- end
123
-
124
- def subcommand_name
125
- options.fetch(SUBCOMMAND_ARG)
126
- end
127
-
128
- def subcommands_target_doc
129
- available_subcommands.inject("Subcommands:\n") do |a, e|
130
- a + " #{e}\n"
131
- end
132
- end
133
- end
134
-
135
- module SubcommandArgAsList
136
- def target_doc_subcommand_arg
137
- '(' + available_subcommands.join('|') + ')'
138
- end
139
-
140
- def subcommand_name
141
- available_subcommands.each do |subcommand|
142
- return subcommand if options.fetch(subcommand)
143
- end
144
- nil
145
- end
146
-
147
- def subcommands_target_doc
148
- "\n"
149
- end
150
- end
151
- end
152
- end
153
- end
154
- end
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'colorize'
4
- require 'io/console'
5
- require 'eac_ruby_utils/patches/hash/options_consumer'
6
- require 'eac_ruby_utils/require_sub'
7
- ::EacRubyUtils.require_sub __FILE__
8
-
9
- module EacRubyUtils
10
- module Console
11
- # https://github.com/fazibear/colorize
12
- module Speaker
13
- def on_speaker_node(&block)
14
- ::EacRubyUtils::Console::Speaker.on_node(&block)
15
- end
16
-
17
- def puts(string = '')
18
- string.to_s.each_line do |line|
19
- current_node.stderr.puts(current_node.stderr_line_prefix.to_s + line)
20
- end
21
- end
22
-
23
- def out(string = '')
24
- current_node.stdout.write(string.to_s)
25
- end
26
-
27
- def fatal_error(string)
28
- puts "ERROR: #{string}".white.on_red
29
- Kernel.exit 1 # rubocop:disable Rails/Exit
30
- end
31
-
32
- def title(string)
33
- string = string.to_s
34
- puts(('-' * (8 + string.length)).green)
35
- puts("--- #{string} ---".green)
36
- puts(('-' * (8 + string.length)).green)
37
- puts
38
- end
39
-
40
- def info(string)
41
- puts string.to_s.white
42
- end
43
-
44
- def infom(string)
45
- puts string.to_s.light_yellow
46
- end
47
-
48
- def warn(string)
49
- puts string.to_s.yellow
50
- end
51
-
52
- # Options:
53
- # +bool+ ([Boolean], default: +false+): requires a answer "yes" or "no".
54
- # +list+ ([Hash] or [Array], default: +nil+): requires a answer from a list.
55
- # +noecho+ ([Boolean], default: +false+): does not output answer.
56
- def request_input(question, options = {})
57
- bool, list, noecho = options.to_options_consumer.consume_all(:bool, :list, :noecho)
58
- if list
59
- request_from_list(question, list, noecho)
60
- elsif bool
61
- request_from_bool(question, noecho)
62
- else
63
- request_string(question, noecho)
64
- end
65
- end
66
-
67
- def infov(*args)
68
- r = []
69
- args.each_with_index do |v, i|
70
- if i.even?
71
- r << "#{v}: ".cyan
72
- else
73
- r.last << v.to_s
74
- end
75
- end
76
- puts r.join(', ')
77
- end
78
-
79
- def success(string)
80
- puts string.to_s.green
81
- end
82
-
83
- private
84
-
85
- def list_value(list, input)
86
- values = list_values(list)
87
- return input, true unless values
88
- return input, false unless values.include?(input)
89
- end
90
-
91
- def list_values(list)
92
- if list.is_a?(::Hash)
93
- list.keys.map(&:to_s)
94
- elsif list.is_a?(::Array)
95
- list.map(&:to_s)
96
- end
97
- end
98
-
99
- def request_from_bool(question, noecho)
100
- request_from_list(question, { yes: true, y: true, no: false, n: false }, noecho)
101
- end
102
-
103
- def request_from_list(question, list, noecho)
104
- list = ::EacRubyUtils::Console::Speaker::List.build(list)
105
- loop do
106
- input = request_string("#{question} [#{list.valid_labels.join('/')}]", noecho)
107
- return list.build_value(input) if list.valid_value?(input)
108
-
109
- warn "Invalid input: \"#{input}\" (Valid: #{list.valid_labels.join(', ')})"
110
- end
111
- end
112
-
113
- def request_string(question, noecho)
114
- current_node.stderr.write "#{question}: ".to_s.yellow
115
- noecho ? request_string_noecho : request_string_echo
116
- end
117
-
118
- def request_string_noecho
119
- r = current_node.stdin.noecho(&:gets).chomp.strip
120
- current_node.stderr.write("\n")
121
- r
122
- end
123
-
124
- def request_string_echo
125
- current_node.stdin.gets.chomp.strip
126
- end
127
-
128
- def current_node
129
- ::EacRubyUtils::Console::Speaker.current_node
130
- end
131
- end
132
- end
133
- end