eac_config 0.3.0 → 0.4.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/lib/eac_config/entry.rb +7 -1
- data/lib/eac_config/envvars_node.rb +25 -0
- data/lib/eac_config/envvars_node/entry.rb +54 -0
- data/lib/eac_config/load_path.rb +5 -13
- data/lib/eac_config/node.rb +9 -2
- data/lib/eac_config/node_entry.rb +2 -23
- data/lib/eac_config/node_uri.rb +38 -0
- data/lib/eac_config/old_configs.rb +1 -0
- data/lib/eac_config/version.rb +1 -1
- data/lib/eac_config/yaml_file_node.rb +9 -2
- data/lib/eac_config/yaml_file_node/entry.rb +37 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fecd4e56674406cf96275edc74b51ee0c908076bf3f991f079ee439a7fd98606
|
4
|
+
data.tar.gz: 33ed9a3d05488a9d06919589432727d6a9e72430234c05bb89e1119ea6b4c05f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdd3b1bfe2d2e8dce429aa34dde375120f13796106c9145b8abcdfc6cbbb42187f1cf3504e1ec5027aa28afe437311c82fe1b1bf77b0aed195148ea9c57ba60a
|
7
|
+
data.tar.gz: 37807d3bfeae842fb0f43a58cb2f90f1851cee1bd1802437a23cad122c6ab2d5cad896a4125aa45b3da73098863611d9e9575fdd5241d7ce67143bcb9ccbc97a
|
data/lib/eac_config/entry.rb
CHANGED
@@ -22,7 +22,13 @@ module EacConfig
|
|
22
22
|
node_entry.if_present(&:value)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
def value=(a_value)
|
26
|
+
write_node.self_entry(path).value = a_value
|
27
|
+
end
|
28
|
+
|
29
|
+
def write_node
|
30
|
+
root_node.write_node || root_node
|
31
|
+
end
|
26
32
|
|
27
33
|
private
|
28
34
|
|
@@ -0,0 +1,25 @@
|
|
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
|
@@ -0,0 +1,54 @@
|
|
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
|
data/lib/eac_config/load_path.rb
CHANGED
@@ -6,17 +6,6 @@ require 'eac_ruby_utils/core_ext'
|
|
6
6
|
module EacConfig
|
7
7
|
class LoadPath
|
8
8
|
ENTRY_PATH = ::EacConfig::EntryPath.assert(%w[load_path])
|
9
|
-
PATH_SEPARATOR = ':'
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def paths_to_string(paths)
|
13
|
-
paths.map(&:to_s).join(PATH_SEPARATOR)
|
14
|
-
end
|
15
|
-
|
16
|
-
def string_to_paths(string)
|
17
|
-
string.to_s.split(PATH_SEPARATOR)
|
18
|
-
end
|
19
|
-
end
|
20
9
|
|
21
10
|
common_constructor :node
|
22
11
|
|
@@ -26,11 +15,14 @@ module EacConfig
|
|
26
15
|
|
27
16
|
# @return [Array<String>]
|
28
17
|
def paths
|
29
|
-
|
18
|
+
r = entry.value
|
19
|
+
r.is_a?(::Array) ? r : []
|
30
20
|
end
|
31
21
|
|
32
22
|
def push(new_path)
|
33
|
-
entry.value =
|
23
|
+
entry.value = paths + [new_path]
|
34
24
|
end
|
25
|
+
|
26
|
+
delegate :to_s, to: :paths
|
35
27
|
end
|
36
28
|
end
|
data/lib/eac_config/node.rb
CHANGED
@@ -5,10 +5,13 @@ require 'eac_config/entry_path'
|
|
5
5
|
require 'eac_config/load_path'
|
6
6
|
require 'eac_config/load_nodes_search'
|
7
7
|
require 'eac_config/node_entry'
|
8
|
+
require 'eac_config/node_uri'
|
8
9
|
require 'eac_ruby_utils/core_ext'
|
9
10
|
|
10
11
|
module EacConfig
|
11
12
|
module Node
|
13
|
+
attr_accessor :write_node
|
14
|
+
|
12
15
|
common_concern do
|
13
16
|
enable_abstract_methods
|
14
17
|
include ::Comparable
|
@@ -31,7 +34,11 @@ module EacConfig
|
|
31
34
|
# Return a entry which search values only in the self node.
|
32
35
|
# @return [EacConfig::NodeEntry]
|
33
36
|
def self_entry(path)
|
34
|
-
|
37
|
+
self_entry_class.new(self, path)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self_entry_class
|
41
|
+
self.class.const_get('Entry')
|
35
42
|
end
|
36
43
|
|
37
44
|
# @return [Array<EacConfig::Node>]
|
@@ -47,7 +54,7 @@ module EacConfig
|
|
47
54
|
private
|
48
55
|
|
49
56
|
def load_node(node_path)
|
50
|
-
|
57
|
+
::EacConfig::NodeUri.new(node_path, url).instanciate
|
51
58
|
end
|
52
59
|
end
|
53
60
|
end
|
@@ -7,33 +7,12 @@ require 'eac_ruby_utils/core_ext'
|
|
7
7
|
module EacConfig
|
8
8
|
# A entry which search values only in the source node.
|
9
9
|
class NodeEntry
|
10
|
+
enable_abstract_methods
|
10
11
|
enable_simple_cache
|
11
12
|
common_constructor :node, :path do
|
12
13
|
self.path = ::EacConfig::EntryPath.assert(path)
|
13
14
|
end
|
14
15
|
|
15
|
-
|
16
|
-
paths_hash.key?(to_paths_hash_key)
|
17
|
-
end
|
18
|
-
|
19
|
-
def value
|
20
|
-
paths_hash[to_paths_hash_key]
|
21
|
-
end
|
22
|
-
|
23
|
-
def value=(a_value)
|
24
|
-
paths_hash[to_paths_hash_key] = a_value
|
25
|
-
node.persist_data(paths_hash.root.to_h)
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# @return [EacConfig::PathsHash]
|
31
|
-
def paths_hash_uncached
|
32
|
-
::EacConfig::PathsHash.new(node.data)
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_paths_hash_key
|
36
|
-
path.parts.join('.')
|
37
|
-
end
|
16
|
+
abstract_methods :found?, :value, :value=
|
38
17
|
end
|
39
18
|
end
|
@@ -0,0 +1,38 @@
|
|
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
|
data/lib/eac_config/version.rb
CHANGED
@@ -7,20 +7,27 @@ require 'eac_ruby_utils/yaml'
|
|
7
7
|
|
8
8
|
module EacConfig
|
9
9
|
class YamlFileNode
|
10
|
+
require_sub __FILE__
|
10
11
|
include ::EacConfig::Node
|
11
12
|
|
13
|
+
class << self
|
14
|
+
def from_uri(uri)
|
15
|
+
return new(uri.to_addressable.path) if uri.to_addressable.scheme == 'file'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
12
19
|
common_constructor :path do
|
13
20
|
self.path = path.to_pathname
|
14
21
|
end
|
15
22
|
|
16
23
|
def data
|
17
|
-
@data ||= ::EacRubyUtils::Yaml.load_file(assert_path)
|
24
|
+
@data ||= ::EacRubyUtils::Yaml.load_file(assert_path) || {}
|
18
25
|
end
|
19
26
|
|
20
27
|
def persist_data(new_data)
|
21
28
|
path.parent.mkpath
|
22
29
|
::EacRubyUtils::Yaml.dump_file(path, new_data)
|
23
|
-
|
30
|
+
@data = nil
|
24
31
|
end
|
25
32
|
|
26
33
|
def url
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_config/entry_path'
|
4
|
+
require 'eac_config/node_entry'
|
5
|
+
require 'eac_ruby_utils/core_ext'
|
6
|
+
|
7
|
+
module EacConfig
|
8
|
+
class YamlFileNode
|
9
|
+
class Entry < ::EacConfig::NodeEntry
|
10
|
+
enable_simple_cache
|
11
|
+
|
12
|
+
def found?
|
13
|
+
paths_hash.key?(to_paths_hash_key)
|
14
|
+
end
|
15
|
+
|
16
|
+
def value
|
17
|
+
paths_hash[to_paths_hash_key]
|
18
|
+
end
|
19
|
+
|
20
|
+
def value=(a_value)
|
21
|
+
paths_hash[to_paths_hash_key] = a_value
|
22
|
+
node.persist_data(paths_hash.root.to_h)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# @return [EacConfig::PathsHash]
|
28
|
+
def paths_hash_uncached
|
29
|
+
::EacConfig::PathsHash.new(node.data)
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_paths_hash_key
|
33
|
+
path.parts.join('.')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Put here the authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -61,10 +61,13 @@ files:
|
|
61
61
|
- lib/eac_config.rb
|
62
62
|
- lib/eac_config/entry.rb
|
63
63
|
- lib/eac_config/entry_path.rb
|
64
|
+
- lib/eac_config/envvars_node.rb
|
65
|
+
- lib/eac_config/envvars_node/entry.rb
|
64
66
|
- lib/eac_config/load_nodes_search.rb
|
65
67
|
- lib/eac_config/load_path.rb
|
66
68
|
- lib/eac_config/node.rb
|
67
69
|
- lib/eac_config/node_entry.rb
|
70
|
+
- lib/eac_config/node_uri.rb
|
68
71
|
- lib/eac_config/old_configs.rb
|
69
72
|
- lib/eac_config/old_configs/base.rb
|
70
73
|
- lib/eac_config/old_configs/file.rb
|
@@ -74,6 +77,7 @@ files:
|
|
74
77
|
- lib/eac_config/paths_hash/path_search.rb
|
75
78
|
- lib/eac_config/version.rb
|
76
79
|
- lib/eac_config/yaml_file_node.rb
|
80
|
+
- lib/eac_config/yaml_file_node/entry.rb
|
77
81
|
homepage:
|
78
82
|
licenses: []
|
79
83
|
metadata: {}
|