eac_ruby_utils 0.60.0 → 0.64.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_ruby_utils/envs/command.rb +10 -5
  3. data/lib/eac_ruby_utils/filesystem_cache.rb +6 -0
  4. data/lib/eac_ruby_utils/fs/logs.rb +63 -0
  5. data/lib/eac_ruby_utils/inflector.rb +9 -1
  6. data/lib/eac_ruby_utils/listable/list.rb +3 -2
  7. data/lib/eac_ruby_utils/patches/kernel/nyi.rb +4 -2
  8. data/lib/eac_ruby_utils/patches/module/common_concern.rb +0 -1
  9. data/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  10. data/lib/eac_ruby_utils/patches/string/inflector.rb +4 -2
  11. data/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  12. data/lib/eac_ruby_utils/rspec/conditional.rb +1 -4
  13. data/lib/eac_ruby_utils/simple_cache.rb +18 -5
  14. data/lib/eac_ruby_utils/version.rb +1 -1
  15. metadata +13 -66
  16. data/lib/eac_ruby_utils/configs.rb +0 -74
  17. data/lib/eac_ruby_utils/configs/base.rb +0 -43
  18. data/lib/eac_ruby_utils/configs/file.rb +0 -47
  19. data/lib/eac_ruby_utils/console.rb +0 -5
  20. data/lib/eac_ruby_utils/console/configs.rb +0 -38
  21. data/lib/eac_ruby_utils/console/configs/entry_reader.rb +0 -81
  22. data/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +0 -18
  23. data/lib/eac_ruby_utils/console/configs/read_entry_options.rb +0 -46
  24. data/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +0 -27
  25. data/lib/eac_ruby_utils/console/docopt_runner.rb +0 -45
  26. data/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +0 -18
  27. data/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +0 -25
  28. data/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +0 -19
  29. data/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +0 -154
  30. data/lib/eac_ruby_utils/console/speaker.rb +0 -133
  31. data/lib/eac_ruby_utils/console/speaker/_class_methods.rb +0 -39
  32. data/lib/eac_ruby_utils/console/speaker/_constants.rb +0 -14
  33. data/lib/eac_ruby_utils/console/speaker/list.rb +0 -63
  34. data/lib/eac_ruby_utils/console/speaker/node.rb +0 -26
  35. data/lib/eac_ruby_utils/patches/module/console_speaker.rb +0 -10
  36. data/lib/eac_ruby_utils/patches/module/template.rb +0 -10
  37. data/lib/eac_ruby_utils/patches/object/template.rb +0 -9
  38. data/lib/eac_ruby_utils/paths_hash.rb +0 -56
  39. data/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +0 -8
  40. data/lib/eac_ruby_utils/paths_hash/node.rb +0 -67
  41. data/lib/eac_ruby_utils/paths_hash/path_search.rb +0 -39
  42. data/lib/eac_ruby_utils/templates.rb +0 -9
  43. data/lib/eac_ruby_utils/templates/directory.rb +0 -110
  44. data/lib/eac_ruby_utils/templates/file.rb +0 -50
  45. data/lib/eac_ruby_utils/templates/searcher.rb +0 -55
  46. data/lib/eac_ruby_utils/templates/variable_not_found_error.rb +0 -7
  47. data/lib/eac_ruby_utils/templates/variable_providers.rb +0 -25
  48. data/lib/eac_ruby_utils/templates/variable_providers/base.rb +0 -23
  49. data/lib/eac_ruby_utils/templates/variable_providers/entries_reader.rb +0 -25
  50. data/lib/eac_ruby_utils/templates/variable_providers/generic.rb +0 -25
  51. data/lib/eac_ruby_utils/templates/variable_providers/hash.rb +0 -29
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/string'
4
- require 'yaml'
5
- require 'eac_ruby_utils/configs/file'
6
- require 'eac_ruby_utils/patches/hash/sym_keys_hash'
7
- require 'eac_ruby_utils/paths_hash'
8
- require 'eac_ruby_utils/simple_cache'
9
-
10
- module EacRubyUtils
11
- class Configs
12
- include ::EacRubyUtils::SimpleCache
13
-
14
- attr_reader :configs_key, :options
15
-
16
- # Valid options: [:storage_path]
17
- def initialize(configs_key, options = {})
18
- @configs_key = configs_key
19
- @options = options.to_sym_keys_hash.freeze
20
- load
21
- end
22
-
23
- delegate :clear, to: :file
24
-
25
- delegate :save, to: :file
26
-
27
- delegate :load, to: :file
28
-
29
- def []=(entry_key, entry_value)
30
- write_entry(entry_key, entry_value)
31
- end
32
-
33
- def write_entry(entry_key, entry_value)
34
- file.write(entry_key, entry_value)
35
- end
36
-
37
- def [](entry_key)
38
- read_entry(entry_key)
39
- end
40
-
41
- def read_entry(entry_key)
42
- file.read(entry_key)
43
- end
44
-
45
- delegate :autosave?, to: :file
46
-
47
- private
48
-
49
- attr_accessor :data
50
-
51
- def file_uncached
52
- ::EacRubyUtils::Configs::File.new(
53
- storage_path, options
54
- )
55
- end
56
-
57
- def storage_path_uncached
58
- path = options_storage_path || default_storage_path
59
- return path if ::File.exist?(path) && ::File.size(path).positive?
60
-
61
- ::FileUtils.mkdir_p(::File.dirname(path))
62
- ::File.write(path, {}.to_yaml)
63
- path
64
- end
65
-
66
- def options_storage_path
67
- options[:storage_path]
68
- end
69
-
70
- def default_storage_path
71
- ::File.join(ENV['HOME'], '.config', configs_key, 'settings.yml')
72
- end
73
- end
74
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/blank_not_blank'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/paths_hash'
6
-
7
- module EacRubyUtils
8
- class Configs
9
- class Base
10
- enable_simple_cache
11
-
12
- common_constructor :data, default: [{}] do
13
- self.data = ::EacRubyUtils::PathsHash.new(data)
14
- end
15
-
16
- def []=(entry_key, entry_value)
17
- write(entry_key, entry_value)
18
- end
19
-
20
- def [](entry_key)
21
- read(entry_key)
22
- end
23
-
24
- def clear
25
- replace({})
26
- end
27
-
28
- def read(entry_key)
29
- return nil unless data.key?(entry_key)
30
-
31
- data.fetch(entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
32
- end
33
-
34
- def replace(new_data)
35
- self.data = ::EacRubyUtils::PathsHash.new(new_data)
36
- end
37
-
38
- def write(entry_key, entry_value)
39
- data[entry_key] = entry_value
40
- end
41
- end
42
- end
43
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/configs/base'
4
- require 'yaml'
5
-
6
- module EacRubyUtils
7
- class Configs
8
- class File < ::EacRubyUtils::Configs::Base
9
- attr_reader :path, :options
10
-
11
- # Valid options: [:autosave]
12
- def initialize(path, options = {})
13
- @path = path
14
- @options = options.to_sym_keys_hash.freeze
15
- super(raw_data_from_file)
16
- end
17
-
18
- def save
19
- ::FileUtils.mkdir_p(::File.dirname(path))
20
- ::File.write(path, data.to_h.to_yaml)
21
- end
22
-
23
- def load
24
- replace(raw_data_from_file)
25
- end
26
-
27
- def write(entry_key, entry_value)
28
- super
29
- save if autosave?
30
- end
31
-
32
- def autosave?
33
- options[:autosave] ? true : false
34
- end
35
-
36
- private
37
-
38
- def raw_data_from_file
39
- if ::File.exist?(path) && ::File.size(path).positive?
40
- ::YAML.load_file(path)
41
- else
42
- {}
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/console/configs'
4
- require 'eac_ruby_utils/console/docopt_runner'
5
- require 'eac_ruby_utils/console/speaker'
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/configs'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module EacRubyUtils
7
- module Console
8
- class Configs
9
- require_sub __FILE__
10
- enable_console_speaker
11
-
12
- class << self
13
- def entry_key_to_envvar_name(entry_key)
14
- ::EacRubyUtils::Console::Configs::EntryReader.entry_key_to_envvar_name(entry_key)
15
- end
16
- end
17
-
18
- attr_reader :configs
19
-
20
- def initialize(configs_key, options = {})
21
- options.assert_argument(::Hash, 'options')
22
- @configs = ::EacRubyUtils::Configs.new(configs_key, options.merge(autosave: true))
23
- end
24
-
25
- def read_password(entry_key, options = {})
26
- ::EacRubyUtils::Console::Configs::PasswordEntryReader.new(self, entry_key, options).read
27
- end
28
-
29
- def read_entry(entry_key, options = {})
30
- ::EacRubyUtils::Console::Configs::EntryReader.new(self, entry_key, options).read
31
- end
32
-
33
- def store_passwords?
34
- ::EacRubyUtils::Console::Configs::StorePasswordsEntryReader.new(self) == 'yes'
35
- end
36
- end
37
- end
38
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/console/configs/read_entry_options'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module EacRubyUtils
7
- module Console
8
- class Configs
9
- class EntryReader
10
- enable_console_speaker
11
-
12
- class << self
13
- def entry_key_to_envvar_name(entry_key)
14
- path = if entry_key.is_a?(::Array)
15
- entry_key
16
- else
17
- ::EacRubyUtils::PathsHash.parse_entry_key(entry_key)
18
- end
19
- path.join('_').gsub(/[^a-z0-9_]/i, '').gsub(/\A_+/, '').gsub(/_+\z/, '')
20
- .gsub(/_{2,}/, '_').upcase
21
- end
22
- end
23
-
24
- common_constructor :console_configs, :entry_key, :options do
25
- self.options = ::EacRubyUtils::Console::Configs::ReadEntryOptions.new(options)
26
- end
27
-
28
- def read
29
- %w[envvars storage console].each do |suffix|
30
- value = send("read_from_#{suffix}")
31
- return value if value.present?
32
- end
33
- return nil unless options[:required]
34
-
35
- raise "No value found for entry \"#{entry_key}\""
36
- end
37
-
38
- def read_from_storage
39
- console_configs.configs.read_entry(entry_key)
40
- end
41
-
42
- def read_from_envvars
43
- return if options[:noenv]
44
-
45
- env_entry_key = self.class.entry_key_to_envvar_name(entry_key)
46
- return unless ENV.key?(env_entry_key)
47
-
48
- ENV.fetch(env_entry_key).if_present(::EacRubyUtils::BlankNotBlank.instance)
49
- end
50
-
51
- def read_from_console
52
- return if options[:noinput]
53
-
54
- options[:before_input].if_present(&:call)
55
- entry_value = looped_entry_value_from_input
56
- console_configs.configs.write_entry(entry_key, entry_value) if options[:store]
57
- entry_value
58
- end
59
-
60
- private
61
-
62
- def looped_entry_value_from_input
63
- loop do
64
- entry_value = entry_value_from_input(entry_key, options)
65
- next if entry_value.blank?
66
- next if options[:validator] && !options[:validator].call(entry_value)
67
-
68
- return entry_value
69
- end
70
- end
71
-
72
- def entry_value_from_input(entry_key, options)
73
- entry_value = request_input("Value for entry \"#{entry_key}\"",
74
- options.request_input_options)
75
- warn('Entered value is blank') if entry_value.blank?
76
- entry_value
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -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