avm-tools 0.121.1 → 0.123.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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/lib/avm/tools/runner/app_src/info.rb +19 -0
- data/lib/avm/tools/runner/application_stereotypes/list.rb +31 -0
- data/lib/avm/tools/runner/application_stereotypes.rb +16 -0
- data/lib/avm/tools/version.rb +1 -1
- metadata +6 -60
- data/sub/avm-eac_rails_base0/Gemfile +0 -5
- data/sub/avm-eac_rails_base0/avm-eac_rails_base0.gemspec +0 -19
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/apache_host.rb +0 -10
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/apache_path.rb +0 -19
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/deploy.rb +0 -53
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/instance.rb +0 -11
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/runners/base.rb +0 -26
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/runners.rb +0 -11
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/sources/base.rb +0 -27
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0/version.rb +0 -7
- data/sub/avm-eac_rails_base0/lib/avm/eac_rails_base0.rb +0 -9
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/apache_host_spec.rb +0 -22
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/apache_host_spec_files/apache_host_spec_no_ssl_content.conf +0 -11
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/apache_path_spec.rb +0 -23
- data/sub/avm-eac_rails_base0/spec/lib/avm/eac_rails_base0/apache_path_spec_files/stub-app_0_apache_path.conf +0 -14
- data/sub/avm-eac_rails_base0/spec/rubocop_spec.rb +0 -3
- data/sub/avm-eac_rails_base0/spec/spec_helper.rb +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/apache_path/extra_content.conf +0 -5
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/deploy/config/database.yml.template +0 -21
- data/sub/avm-eac_rails_base0/template/avm/eac_rails_base0/deploy/config/envvars.d/email.yml.template +0 -11
- data/sub/eac_config/Gemfile +0 -5
- data/sub/eac_config/eac_config.gemspec +0 -19
- data/sub/eac_config/lib/eac_config/entry.rb +0 -53
- data/sub/eac_config/lib/eac_config/entry_path.rb +0 -41
- data/sub/eac_config/lib/eac_config/envvars_node/entry.rb +0 -54
- data/sub/eac_config/lib/eac_config/envvars_node.rb +0 -25
- data/sub/eac_config/lib/eac_config/load_nodes_search.rb +0 -39
- data/sub/eac_config/lib/eac_config/load_path.rb +0 -28
- data/sub/eac_config/lib/eac_config/node.rb +0 -67
- data/sub/eac_config/lib/eac_config/node_entry.rb +0 -22
- data/sub/eac_config/lib/eac_config/node_uri.rb +0 -38
- data/sub/eac_config/lib/eac_config/old_configs/base.rb +0 -43
- data/sub/eac_config/lib/eac_config/old_configs/file.rb +0 -47
- data/sub/eac_config/lib/eac_config/old_configs.rb +0 -75
- data/sub/eac_config/lib/eac_config/paths_hash/entry_key_error.rb +0 -8
- data/sub/eac_config/lib/eac_config/paths_hash/node.rb +0 -67
- data/sub/eac_config/lib/eac_config/paths_hash/path_search.rb +0 -39
- data/sub/eac_config/lib/eac_config/paths_hash.rb +0 -63
- data/sub/eac_config/lib/eac_config/rspec/setup.rb +0 -65
- data/sub/eac_config/lib/eac_config/rspec.rb +0 -9
- data/sub/eac_config/lib/eac_config/version.rb +0 -5
- data/sub/eac_config/lib/eac_config/yaml_file_node/entry.rb +0 -36
- data/sub/eac_config/lib/eac_config/yaml_file_node.rb +0 -47
- data/sub/eac_config/lib/eac_config.rb +0 -7
- data/sub/eac_config/spec/lib/eac_config/entry_path_spec.rb +0 -30
- data/sub/eac_config/spec/lib/eac_config/envvars_node/entry_spec.rb +0 -14
- data/sub/eac_config/spec/lib/eac_config/envvars_node_spec.rb +0 -40
- data/sub/eac_config/spec/lib/eac_config/old_configs_spec.rb +0 -46
- data/sub/eac_config/spec/lib/eac_config/paths_hash_spec.rb +0 -88
- data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec.rb +0 -52
- data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1.yaml +0 -6
- data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_1.yaml +0 -2
- data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2/storage1_2_1.yaml +0 -2
- data/sub/eac_config/spec/lib/eac_config/yaml_file_node_spec_files/storage1_2.yaml +0 -4
- data/sub/eac_config/spec/rubocop_spec.rb +0 -3
- data/sub/eac_config/spec/spec_helper.rb +0 -4
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
|
5
|
-
module EacConfig
|
6
|
-
class EntryPath
|
7
|
-
PART_SEPARATOR = '.'
|
8
|
-
|
9
|
-
class << self
|
10
|
-
def assert(source)
|
11
|
-
source.is_a?(self) ? source : new(build_parts(source))
|
12
|
-
end
|
13
|
-
|
14
|
-
def build_parts(source)
|
15
|
-
return validate_parts!(source.split(PART_SEPARATOR)) if source.is_a?(::String)
|
16
|
-
return validate_parts!(source.flat_map { |part| build_parts(part) }) if
|
17
|
-
source.is_a?(::Enumerable)
|
18
|
-
|
19
|
-
build_parts(source.to_s)
|
20
|
-
end
|
21
|
-
|
22
|
-
def validate_parts!(parts)
|
23
|
-
parts.assert_argument(::Enumerable, 'parts')
|
24
|
-
parts.each_with_index do |part, index|
|
25
|
-
raise ::ArgumentError, "Part #{index} of #{parts} is blank" if part.blank?
|
26
|
-
raise ::ArgumentError, "Part #{index} is not a string" unless part.is_a?(::String)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
attr_reader :parts
|
32
|
-
|
33
|
-
def initialize(parts)
|
34
|
-
@parts = parts.to_a.freeze
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_s
|
38
|
-
"#{self.class}[#{parts.join(PART_SEPARATOR)}]"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_config/entry_path'
|
4
|
-
require 'eac_config/node_entry'
|
5
|
-
require 'eac_ruby_utils/blank_not_blank'
|
6
|
-
require 'eac_ruby_utils/core_ext'
|
7
|
-
require 'eac_ruby_utils/yaml'
|
8
|
-
|
9
|
-
module EacConfig
|
10
|
-
class EnvvarsNode
|
11
|
-
class Entry < ::EacConfig::NodeEntry
|
12
|
-
class << self
|
13
|
-
def entry_path_to_envvar_name(path)
|
14
|
-
::EacConfig::EntryPath.assert(path).parts.join('_').gsub(/[^a-z0-9_]/i, '')
|
15
|
-
.gsub(/\A_+/, '').gsub(/_+\z/, '').gsub(/_{2,}/, '_').upcase
|
16
|
-
end
|
17
|
-
|
18
|
-
def from_value(string)
|
19
|
-
return nil if string.nil?
|
20
|
-
return ::EacRubyUtils::Yaml.load(string) if string.start_with?('---')
|
21
|
-
|
22
|
-
string
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_value(object)
|
26
|
-
return nil if object.nil?
|
27
|
-
return object if object.is_a?(String)
|
28
|
-
|
29
|
-
::EacRubyUtils::Yaml.dump(object)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
enable_simple_cache
|
34
|
-
|
35
|
-
def found?
|
36
|
-
ENV.key?(envvar_name)
|
37
|
-
end
|
38
|
-
|
39
|
-
def value
|
40
|
-
self.class.from_value(ENV[envvar_name])
|
41
|
-
end
|
42
|
-
|
43
|
-
def value=(a_value)
|
44
|
-
ENV[envvar_name] = self.class.to_value(a_value)
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def envvar_name_uncached
|
50
|
-
self.class.entry_path_to_envvar_name(path)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'addressable'
|
4
|
-
require 'eac_config/node'
|
5
|
-
require 'eac_ruby_utils/core_ext'
|
6
|
-
|
7
|
-
module EacConfig
|
8
|
-
# A node that read/write entries from environment variables.
|
9
|
-
class EnvvarsNode
|
10
|
-
require_sub __FILE__
|
11
|
-
include ::EacConfig::Node
|
12
|
-
|
13
|
-
URI = ::Addressable::URI.parse('self://envvars')
|
14
|
-
|
15
|
-
class << self
|
16
|
-
def from_uri(uri)
|
17
|
-
return new if uri == URI
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def url
|
22
|
-
URI
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
|
5
|
-
module EacConfig
|
6
|
-
class LoadNodesSearch
|
7
|
-
common_constructor :root_node do
|
8
|
-
add_next_pending until pending.empty?
|
9
|
-
end
|
10
|
-
|
11
|
-
def result
|
12
|
-
added
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def added
|
18
|
-
@added ||= []
|
19
|
-
end
|
20
|
-
|
21
|
-
def add_next_pending
|
22
|
-
current = pending.pop
|
23
|
-
current.self_loaded_nodes.each do |loaded_node|
|
24
|
-
next if added.include?(loaded_node)
|
25
|
-
|
26
|
-
added << loaded_node
|
27
|
-
pending.push(loaded_node)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def pending
|
32
|
-
@pending ||= begin
|
33
|
-
r = Queue.new
|
34
|
-
r.push(root_node)
|
35
|
-
r
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_config/entry_path'
|
4
|
-
require 'eac_ruby_utils/core_ext'
|
5
|
-
|
6
|
-
module EacConfig
|
7
|
-
class LoadPath
|
8
|
-
ENTRY_PATH = ::EacConfig::EntryPath.assert(%w[load_path])
|
9
|
-
|
10
|
-
common_constructor :node
|
11
|
-
|
12
|
-
def entry
|
13
|
-
node.self_entry(ENTRY_PATH)
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [Array<String>]
|
17
|
-
def paths
|
18
|
-
r = entry.value
|
19
|
-
r.is_a?(::Array) ? r : []
|
20
|
-
end
|
21
|
-
|
22
|
-
def push(new_path)
|
23
|
-
entry.value = paths + [new_path]
|
24
|
-
end
|
25
|
-
|
26
|
-
delegate :to_s, to: :paths
|
27
|
-
end
|
28
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_config/entry'
|
4
|
-
require 'eac_config/entry_path'
|
5
|
-
require 'eac_config/load_path'
|
6
|
-
require 'eac_config/load_nodes_search'
|
7
|
-
require 'eac_config/node_entry'
|
8
|
-
require 'eac_config/node_uri'
|
9
|
-
require 'eac_ruby_utils/core_ext'
|
10
|
-
require 'eac_ruby_utils/context'
|
11
|
-
|
12
|
-
module EacConfig
|
13
|
-
module Node
|
14
|
-
class << self
|
15
|
-
def context
|
16
|
-
@context ||= ::EacRubyUtils::Context.new
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
attr_accessor :write_node
|
21
|
-
|
22
|
-
common_concern do
|
23
|
-
enable_abstract_methods
|
24
|
-
include ::Comparable
|
25
|
-
end
|
26
|
-
|
27
|
-
def entry(path)
|
28
|
-
::EacConfig::Entry.new(self, path)
|
29
|
-
end
|
30
|
-
|
31
|
-
# @return [[EacConfig::IncludePath]]
|
32
|
-
def load_path
|
33
|
-
@load_path ||= ::EacConfig::LoadPath.new(self)
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [Addressable::URI]
|
37
|
-
def url
|
38
|
-
raise_abstract_method(__method__)
|
39
|
-
end
|
40
|
-
|
41
|
-
# Return a entry which search values only in the self node.
|
42
|
-
# @return [EacConfig::NodeEntry]
|
43
|
-
def self_entry(path)
|
44
|
-
self_entry_class.new(self, path)
|
45
|
-
end
|
46
|
-
|
47
|
-
def self_entry_class
|
48
|
-
self.class.const_get('Entry')
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [Array<EacConfig::Node>]
|
52
|
-
def self_loaded_nodes
|
53
|
-
load_path.paths.map { |node_path| load_node(node_path) }
|
54
|
-
end
|
55
|
-
|
56
|
-
# @return [Array<EacConfig::Node>]
|
57
|
-
def recursive_loaded_nodes
|
58
|
-
::EacConfig::LoadNodesSearch.new(self).result
|
59
|
-
end
|
60
|
-
|
61
|
-
private
|
62
|
-
|
63
|
-
def load_node(node_path)
|
64
|
-
::EacConfig::NodeUri.new(node_path, url).instanciate
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_config/entry_path'
|
4
|
-
require 'eac_config/paths_hash'
|
5
|
-
require 'eac_ruby_utils/core_ext'
|
6
|
-
|
7
|
-
module EacConfig
|
8
|
-
# A entry which search values only in the source node.
|
9
|
-
class NodeEntry
|
10
|
-
enable_abstract_methods
|
11
|
-
enable_simple_cache
|
12
|
-
common_constructor :node, :path do
|
13
|
-
self.path = ::EacConfig::EntryPath.assert(path)
|
14
|
-
end
|
15
|
-
|
16
|
-
abstract_methods :found?, :value, :value=
|
17
|
-
|
18
|
-
def secret_value
|
19
|
-
value
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module EacConfig
|
4
|
-
class NodeUri
|
5
|
-
enable_simple_cache
|
6
|
-
common_constructor :source, :loader_uri, default: [nil]
|
7
|
-
|
8
|
-
def available_node_classes
|
9
|
-
require 'eac_config/envvars_node'
|
10
|
-
require 'eac_config/yaml_file_node'
|
11
|
-
[::EacConfig::EnvvarsNode, ::EacConfig::YamlFileNode]
|
12
|
-
end
|
13
|
-
|
14
|
-
def instanciate
|
15
|
-
available_node_classes.lazy.map { |k| k.from_uri(self) }.find(&:present?) ||
|
16
|
-
raise("No class mapped for \"#{to_addressable}\"")
|
17
|
-
end
|
18
|
-
|
19
|
-
delegate :to_s, to: :to_addressable
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def to_addressable_uncached
|
24
|
-
r = ::Addressable::URI.parse(source)
|
25
|
-
path = r.path.to_pathname
|
26
|
-
r.path = path.expand_path(loader_uri_path_directory).to_path if path.relative?
|
27
|
-
r.scheme = 'file' if r.scheme.blank?
|
28
|
-
r
|
29
|
-
end
|
30
|
-
|
31
|
-
def loader_uri_path_directory
|
32
|
-
r = loader_uri.path
|
33
|
-
raise ".loader_uri \"#{loader_uri}\" has no path (Source: \"#{source}\")" if r.blank?
|
34
|
-
|
35
|
-
r.to_pathname.parent
|
36
|
-
end
|
37
|
-
end
|
38
|
-
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_config/paths_hash'
|
6
|
-
|
7
|
-
module EacConfig
|
8
|
-
class OldConfigs
|
9
|
-
class Base
|
10
|
-
enable_simple_cache
|
11
|
-
|
12
|
-
common_constructor :data, default: [{}] do
|
13
|
-
self.data = ::EacConfig::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 = ::EacConfig::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_config/old_configs/base'
|
4
|
-
require 'yaml'
|
5
|
-
|
6
|
-
module EacConfig
|
7
|
-
class OldConfigs
|
8
|
-
class File < ::EacConfig::OldConfigs::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,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_support/core_ext/string'
|
4
|
-
require 'yaml'
|
5
|
-
require 'eac_config/old_configs/file'
|
6
|
-
require 'eac_ruby_utils/patches/hash/sym_keys_hash'
|
7
|
-
require 'eac_config/paths_hash'
|
8
|
-
require 'eac_ruby_utils/simple_cache'
|
9
|
-
|
10
|
-
module EacConfig
|
11
|
-
# @deprecated Use {EacConfig::YamlFileNode} instead.
|
12
|
-
class OldConfigs
|
13
|
-
include ::EacRubyUtils::SimpleCache
|
14
|
-
|
15
|
-
attr_reader :configs_key, :options
|
16
|
-
|
17
|
-
# Valid options: [:storage_path]
|
18
|
-
def initialize(configs_key, options = {})
|
19
|
-
@configs_key = configs_key
|
20
|
-
@options = options.to_sym_keys_hash.freeze
|
21
|
-
load
|
22
|
-
end
|
23
|
-
|
24
|
-
delegate :clear, to: :file
|
25
|
-
|
26
|
-
delegate :save, to: :file
|
27
|
-
|
28
|
-
delegate :load, to: :file
|
29
|
-
|
30
|
-
def []=(entry_key, entry_value)
|
31
|
-
write_entry(entry_key, entry_value)
|
32
|
-
end
|
33
|
-
|
34
|
-
def write_entry(entry_key, entry_value)
|
35
|
-
file.write(entry_key, entry_value)
|
36
|
-
end
|
37
|
-
|
38
|
-
def [](entry_key)
|
39
|
-
read_entry(entry_key)
|
40
|
-
end
|
41
|
-
|
42
|
-
def read_entry(entry_key)
|
43
|
-
file.read(entry_key)
|
44
|
-
end
|
45
|
-
|
46
|
-
delegate :autosave?, to: :file
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
attr_accessor :data
|
51
|
-
|
52
|
-
def file_uncached
|
53
|
-
::EacConfig::OldConfigs::File.new(
|
54
|
-
storage_path, options
|
55
|
-
)
|
56
|
-
end
|
57
|
-
|
58
|
-
def storage_path_uncached
|
59
|
-
path = options_storage_path || default_storage_path
|
60
|
-
return path if ::File.exist?(path) && ::File.size(path).positive?
|
61
|
-
|
62
|
-
::FileUtils.mkdir_p(::File.dirname(path))
|
63
|
-
::File.write(path, {}.to_yaml)
|
64
|
-
path
|
65
|
-
end
|
66
|
-
|
67
|
-
def options_storage_path
|
68
|
-
options[:storage_path]
|
69
|
-
end
|
70
|
-
|
71
|
-
def default_storage_path
|
72
|
-
::File.join(ENV['HOME'], '.config', configs_key, 'settings.yml')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
require 'eac_config/paths_hash/entry_key_error'
|
5
|
-
|
6
|
-
module EacConfig
|
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.transform_values { |v| v.is_a?(Node) ? v.to_h : v }
|
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
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module EacConfig
|
4
|
-
class PathsHash
|
5
|
-
class PathSearch
|
6
|
-
class << self
|
7
|
-
def parse_entry_key(string)
|
8
|
-
new(::EacConfig::PathsHash.parse_entry_key(string), [])
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
common_constructor :current, :previous do
|
13
|
-
self.current = current.assert_argument(Array, 'current').freeze
|
14
|
-
self.previous = previous.assert_argument(Array, 'previous')
|
15
|
-
raise ::EacConfig::PathsHash::EntryKeyError, 'Current is empty' if current.empty?
|
16
|
-
end
|
17
|
-
|
18
|
-
def cursor
|
19
|
-
current.first
|
20
|
-
end
|
21
|
-
|
22
|
-
def ended?
|
23
|
-
current.count <= 1
|
24
|
-
end
|
25
|
-
|
26
|
-
def raise_error(message)
|
27
|
-
raise ::EacConfig::PathsHash::EntryKeyError, "#{message} (#{self})"
|
28
|
-
end
|
29
|
-
|
30
|
-
def succeeding
|
31
|
-
self.class.new(current[1..-1], previous + [cursor])
|
32
|
-
end
|
33
|
-
|
34
|
-
def to_s
|
35
|
-
"#{self.class}[Current: #{current}, Previous: #{previous}]"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'eac_ruby_utils/core_ext'
|
4
|
-
|
5
|
-
module EacConfig
|
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 ::EacConfig::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 ::EacConfig::PathsHash::EntryKeyError, "Entry key \"#{entry_key}\" is empty"
|
18
|
-
end
|
19
|
-
return r.map(&:to_sym) unless r.any?(&:blank?)
|
20
|
-
|
21
|
-
raise ::EacConfig::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(::EacConfig::PathsHash::PathSearch.parse_entry_key(entry_key))
|
34
|
-
end
|
35
|
-
|
36
|
-
def []=(entry_key, entry_value)
|
37
|
-
root.write_entry(
|
38
|
-
::EacConfig::PathsHash::PathSearch.parse_entry_key(entry_key), entry_value
|
39
|
-
)
|
40
|
-
end
|
41
|
-
|
42
|
-
def fetch(entry_key)
|
43
|
-
root.fetch(::EacConfig::PathsHash::PathSearch.parse_entry_key(entry_key))
|
44
|
-
end
|
45
|
-
|
46
|
-
def key?(entry_key)
|
47
|
-
root.entry?(::EacConfig::PathsHash::PathSearch.parse_entry_key(entry_key))
|
48
|
-
end
|
49
|
-
|
50
|
-
delegate :to_h, to: :root
|
51
|
-
|
52
|
-
# @return [EacConfig::PathsHash
|
53
|
-
def write(entry_key, entry_value)
|
54
|
-
self[entry_key] = entry_value
|
55
|
-
|
56
|
-
self
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
attr_reader :data
|
62
|
-
end
|
63
|
-
end
|