eac_ruby_utils 0.62.0 → 0.66.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_ruby_utils/context.rb +31 -0
  3. data/lib/eac_ruby_utils/contextualizable.rb +12 -7
  4. data/lib/eac_ruby_utils/envs/command.rb +10 -5
  5. data/lib/eac_ruby_utils/filesystem_cache.rb +6 -0
  6. data/lib/eac_ruby_utils/patches/module/common_concern.rb +0 -1
  7. data/lib/eac_ruby_utils/patches/module/context.rb +11 -0
  8. data/lib/eac_ruby_utils/patches/regexp/to_parser.rb +10 -0
  9. data/lib/eac_ruby_utils/regexp_parser.rb +34 -0
  10. data/lib/eac_ruby_utils/rspec/conditional.rb +1 -4
  11. data/lib/eac_ruby_utils/simple_cache.rb +18 -5
  12. data/lib/eac_ruby_utils/version.rb +1 -1
  13. metadata +8 -74
  14. data/lib/eac_ruby_utils/configs.rb +0 -74
  15. data/lib/eac_ruby_utils/configs/base.rb +0 -43
  16. data/lib/eac_ruby_utils/configs/file.rb +0 -47
  17. data/lib/eac_ruby_utils/console.rb +0 -5
  18. data/lib/eac_ruby_utils/console/configs.rb +0 -38
  19. data/lib/eac_ruby_utils/console/configs/entry_reader.rb +0 -81
  20. data/lib/eac_ruby_utils/console/configs/password_entry_reader.rb +0 -18
  21. data/lib/eac_ruby_utils/console/configs/read_entry_options.rb +0 -46
  22. data/lib/eac_ruby_utils/console/configs/store_passwords_entry_reader.rb +0 -27
  23. data/lib/eac_ruby_utils/console/docopt_runner.rb +0 -45
  24. data/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +0 -18
  25. data/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +0 -25
  26. data/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +0 -19
  27. data/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +0 -154
  28. data/lib/eac_ruby_utils/console/speaker.rb +0 -133
  29. data/lib/eac_ruby_utils/console/speaker/_class_methods.rb +0 -39
  30. data/lib/eac_ruby_utils/console/speaker/_constants.rb +0 -14
  31. data/lib/eac_ruby_utils/console/speaker/list.rb +0 -63
  32. data/lib/eac_ruby_utils/console/speaker/node.rb +0 -26
  33. data/lib/eac_ruby_utils/patches/module/console_speaker.rb +0 -10
  34. data/lib/eac_ruby_utils/patches/module/template.rb +0 -10
  35. data/lib/eac_ruby_utils/patches/object/template.rb +0 -9
  36. data/lib/eac_ruby_utils/paths_hash.rb +0 -56
  37. data/lib/eac_ruby_utils/paths_hash/entry_key_error.rb +0 -8
  38. data/lib/eac_ruby_utils/paths_hash/node.rb +0 -67
  39. data/lib/eac_ruby_utils/paths_hash/path_search.rb +0 -39
  40. data/lib/eac_ruby_utils/templates.rb +0 -9
  41. data/lib/eac_ruby_utils/templates/directory.rb +0 -110
  42. data/lib/eac_ruby_utils/templates/file.rb +0 -50
  43. data/lib/eac_ruby_utils/templates/searcher.rb +0 -55
  44. data/lib/eac_ruby_utils/templates/variable_not_found_error.rb +0 -7
  45. data/lib/eac_ruby_utils/templates/variable_providers.rb +0 -25
  46. data/lib/eac_ruby_utils/templates/variable_providers/base.rb +0 -23
  47. data/lib/eac_ruby_utils/templates/variable_providers/entries_reader.rb +0 -25
  48. data/lib/eac_ruby_utils/templates/variable_providers/generic.rb +0 -25
  49. data/lib/eac_ruby_utils/templates/variable_providers/hash.rb +0 -29
@@ -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
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/console/speaker/node'
4
-
5
- module EacRubyUtils
6
- module Console
7
- module Speaker
8
- class << self
9
- def current_node
10
- nodes_stack.last
11
- end
12
-
13
- def on_node(&block)
14
- push
15
- yield(*(block.arity.zero? ? [] : [current_node]))
16
- ensure
17
- pop
18
- end
19
-
20
- def push
21
- nodes_stack << ::EacRubyUtils::Console::Speaker::Node.new
22
- current_node
23
- end
24
-
25
- def pop
26
- return nodes_stack.pop if nodes_stack.count > 1
27
-
28
- raise "Cannot remove first node (nodes_stack.count: #{nodes_stack.count})"
29
- end
30
-
31
- private
32
-
33
- def nodes_stack
34
- @nodes_stack ||= [::EacRubyUtils::Console::Speaker::Node.new]
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/by_reference'
4
-
5
- module EacRubyUtils
6
- module Console
7
- # https://github.com/fazibear/colorize
8
- module Speaker
9
- STDERR = ::EacRubyUtils::ByReference.new { $stderr }
10
- STDIN = ::EacRubyUtils::ByReference.new { $stdin }
11
- STDOUT = ::EacRubyUtils::ByReference.new { $stdout }
12
- end
13
- end
14
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/hash_with_indifferent_access'
4
- require 'ostruct'
5
-
6
- module EacRubyUtils
7
- module Console
8
- module Speaker
9
- class List
10
- class << self
11
- def build(list)
12
- return List.new(hash_to_values(list)) if list.is_a?(::Hash)
13
- return List.new(array_to_values(list)) if list.is_a?(::Array)
14
-
15
- raise "Invalid list: #{list} (#{list.class})"
16
- end
17
-
18
- private
19
-
20
- def hash_to_values(list)
21
- list.map { |key, value| ::OpenStruct.new(key: key, label: key, value: value) }
22
- end
23
-
24
- def array_to_values(list)
25
- list.map { |value| ::OpenStruct.new(key: value, label: value, value: value) }
26
- end
27
- end
28
-
29
- attr_reader :values
30
-
31
- def initialize(values)
32
- @values = values.map do |v|
33
- ::OpenStruct.new(key: to_key(v.key), label: to_label(v.label), value: v.value)
34
- end
35
- end
36
-
37
- def valid_labels
38
- values.map(&:label)
39
- end
40
-
41
- def valid_value?(value)
42
- values.any? { |v| v.key == to_key(value) }
43
- end
44
-
45
- def to_key(value)
46
- to_label(value).downcase
47
- end
48
-
49
- def to_label(value)
50
- value.to_s.strip
51
- end
52
-
53
- def build_value(value)
54
- key = to_key(value)
55
- values.each do |v|
56
- return v.value if v.key == key
57
- end
58
- raise "Value not found: \"#{value}\" (#{values})"
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/patches/object/if_present'
4
- require 'eac_ruby_utils/console/speaker/_constants'
5
-
6
- module EacRubyUtils
7
- module Console
8
- module Speaker
9
- class Node
10
- attr_accessor :stdin, :stdout, :stderr, :stderr_line_prefix
11
-
12
- def initialize(parent = nil)
13
- self.stdin = parent.if_present(::EacRubyUtils::Console::Speaker::STDIN, &:stdin)
14
- self.stdout = parent.if_present(::EacRubyUtils::Console::Speaker::STDOUT, &:stdout)
15
- self.stderr = parent.if_present(::EacRubyUtils::Console::Speaker::STDERR, &:stderr)
16
- self.stderr_line_prefix = parent.if_present('', &:stderr_line_prefix)
17
- end
18
-
19
- def configure
20
- yield(self)
21
- self
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/patch'
4
- require 'eac_ruby_utils/console/speaker'
5
-
6
- class Module
7
- def enable_console_speaker
8
- ::EacRubyUtils.patch(self, ::EacRubyUtils::Console::Speaker)
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_support/core_ext/string/inflections'
4
- require 'eac_ruby_utils/templates/searcher'
5
-
6
- class Module
7
- def template
8
- @template ||= ::EacRubyUtils::Templates::Searcher.default.template(name.underscore)
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/patches/module/template'
4
-
5
- class Object
6
- def template
7
- self.class.template
8
- end
9
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module EacRubyUtils
6
- class PathsHash
7
- require_sub __FILE__
8
-
9
- class << self
10
- def parse_entry_key(entry_key)
11
- r = entry_key.to_s.strip
12
- raise ::EacRubyUtils::PathsHash::EntryKeyError, 'Entry key cannot start or end with dot' if
13
- r.start_with?('.') || r.end_with?('.')
14
-
15
- r = r.split('.').map(&:strip)
16
- if r.empty?
17
- raise ::EacRubyUtils::PathsHash::EntryKeyError, "Entry key \"#{entry_key}\" is empty"
18
- end
19
- return r.map(&:to_sym) unless r.any?(&:blank?)
20
-
21
- raise ::EacRubyUtils::PathsHash::EntryKeyError,
22
- "Entry key \"#{entry_key}\" has at least one blank part"
23
- end
24
- end
25
-
26
- attr_reader :root
27
-
28
- def initialize(source_hash = {})
29
- @root = Node.new(source_hash)
30
- end
31
-
32
- def [](entry_key)
33
- root.read_entry(::EacRubyUtils::PathsHash::PathSearch.parse_entry_key(entry_key))
34
- end
35
-
36
- def []=(entry_key, entry_value)
37
- root.write_entry(
38
- ::EacRubyUtils::PathsHash::PathSearch.parse_entry_key(entry_key), entry_value
39
- )
40
- end
41
-
42
- def fetch(entry_key)
43
- root.fetch(::EacRubyUtils::PathsHash::PathSearch.parse_entry_key(entry_key))
44
- end
45
-
46
- def key?(entry_key)
47
- root.entry?(::EacRubyUtils::PathsHash::PathSearch.parse_entry_key(entry_key))
48
- end
49
-
50
- delegate :to_h, to: :root
51
-
52
- private
53
-
54
- attr_reader :data
55
- end
56
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacRubyUtils
4
- class PathsHash
5
- class EntryKeyError < StandardError
6
- end
7
- end
8
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_ruby_utils/paths_hash/entry_key_error'
5
-
6
- module EacRubyUtils
7
- class PathsHash
8
- class Node
9
- PATH_SEARCH_UNENDED_ERROR_MESSAGE = 'Path search is not a Node and is not ended'
10
-
11
- def initialize(source_hash)
12
- source_hash.assert_argument(Hash, 'source_hash')
13
- @data = source_hash.map { |k, v| [k.to_sym, v.is_a?(Hash) ? Node.new(v) : v] }.to_h
14
- end
15
-
16
- def entry?(path_search)
17
- return false unless data.key?(path_search.cursor)
18
- return true if path_search.ended?
19
- return data.fetch(path_search.cursor).entry?(path_search.succeeding) if
20
- data.fetch(path_search.cursor).is_a?(Node)
21
-
22
- false # Paths continue and there is not available nodes
23
- end
24
-
25
- def fetch(path_search)
26
- if data.key?(path_search.cursor)
27
- node = data.fetch(path_search.cursor)
28
- return (node.is_a?(Node) ? node.to_h : node) if path_search.ended?
29
- return nil if node.blank?
30
- return node.fetch(path_search.succeeding) if node.is_a?(Node)
31
- end
32
-
33
- path_search.raise_error(PATH_SEARCH_UNENDED_ERROR_MESSAGE)
34
- end
35
-
36
- def to_h
37
- data.map { |k, v| [k, v.is_a?(Node) ? v.to_h : v] }.to_h
38
- end
39
-
40
- def read_entry(path_search)
41
- node = data[path_search.cursor]
42
- return (node.is_a?(Node) ? node.to_h : node) if path_search.ended?
43
- return nil if node.blank?
44
- return node.read_entry(path_search.succeeding) if node.is_a?(Node)
45
-
46
- path_search.raise_error(PATH_SEARCH_UNENDED_ERROR_MESSAGE)
47
- end
48
-
49
- def write_entry(path_search, value)
50
- if path_search.ended?
51
- data[path_search.cursor] = value.is_a?(Hash) ? self.class.new(value) : value
52
- else
53
- assert_data_node(path_search.cursor).write_entry(path_search.succeeding, value)
54
- end
55
- end
56
-
57
- private
58
-
59
- attr_reader :data
60
-
61
- def assert_data_node(key)
62
- data[key] = self.class.new({}) unless data[key].is_a?(Node)
63
- data[key]
64
- end
65
- end
66
- end
67
- end