precursor 0.5.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e3304cac9ee21759234bd745095460b9dc71573f4cb6a0f54ba8ca7862c0b0a
4
- data.tar.gz: b1995f5395d1b767e08d61db569c40995b277f69f4b516646fed026a000acdb6
3
+ metadata.gz: cbc70ecd1d4be18a82e77b39dea4e6e93e5076dab9eab469e1a90d069e8a8dd0
4
+ data.tar.gz: a8b41e389d001346cfbe191c3900de5af73647b0742467863db4da388c3a5727
5
5
  SHA512:
6
- metadata.gz: 4b3bb038529d96de309c2cf16e7acf1918310944612bd002dfa272e612c2a584c42fdea929cfe1a06f19999dc7b01b4f805c607891cbfb2621eebdd11a3724b6
7
- data.tar.gz: d73549d136b50202dd4b222a4e0145851ba78927f3677e9ff55259057a8599018e1494cee40941c7ceafdff745d79f41447aad01f7d7b13c2d1867bad7fc0a6d
6
+ metadata.gz: 646c1c70e9f2ca03c6d39aa625d80f3cee5f34e35cbd63d0f2867de883618668608667f37f7924fdb1a2899600a7d2441bc94d272c04937ba0ae1d24e36c918a
7
+ data.tar.gz: bcb6624852cd7e8fcf6a93fe83b376cc3be9b34a5fd146b4c9fe7a01a50f27855b5a30c69fffceee82e7acd7ff1afd9321e2fc2f1459998dcbc31ae14d3c669f
data/lib/argv_vault.rb CHANGED
@@ -13,6 +13,7 @@ module Precursor
13
13
  def initialize(argv)
14
14
  super()
15
15
 
16
+ @argv = argv
16
17
  @vault_data = {}
17
18
  @parser = OptionParser.new do |parser|
18
19
  parser.on('-h', '--help', 'Prints this help') do
@@ -21,7 +22,6 @@ module Precursor
21
22
  end
22
23
  end
23
24
  yield self
24
- @parser.parse(argv)
25
25
  end
26
26
 
27
27
  def key(key_name)
@@ -32,7 +32,8 @@ module Precursor
32
32
 
33
33
  protected
34
34
 
35
- def store
35
+ def load_store(_config_root)
36
+ @parser.parse(@argv)
36
37
  @vault_data
37
38
  end
38
39
 
data/lib/config_root.rb CHANGED
@@ -6,6 +6,10 @@ module Precursor
6
6
  def initialize(vaults, key_options)
7
7
  @vaults = vaults
8
8
  @key_options = key_options
9
+
10
+ @vaults.each do |v|
11
+ v.load(self)
12
+ end
9
13
  end
10
14
 
11
15
  def [](key)
@@ -14,7 +18,17 @@ module Precursor
14
18
  value = key_vault.value key unless key_vault.nil?
15
19
  value = get_default(key) if key_vault.nil?
16
20
 
17
- value.is_a?(String) ? resolve_variables(value) : value
21
+ value.is_a?(String) ? resolve(value) : value
22
+ end
23
+
24
+ def resolve(str)
25
+ res = str
26
+ until (m = res.match(VAR_PATTERN)).nil?
27
+ k = m[1]
28
+ v = self[k.to_sym]
29
+ res = res.sub("${#{k}}", v.to_s)
30
+ end
31
+ res
18
32
  end
19
33
 
20
34
  private
@@ -28,15 +42,5 @@ module Precursor
28
42
 
29
43
  @key_options[key][:default]
30
44
  end
31
-
32
- def resolve_variables(str)
33
- res = str
34
- until (m = res.match(VAR_PATTERN)).nil?
35
- k = m[1]
36
- v = self[k.to_sym]
37
- res = res.sub("${#{k}}", v.to_s)
38
- end
39
- res
40
- end
41
45
  end
42
46
  end
data/lib/env_vault.rb CHANGED
@@ -12,17 +12,15 @@ module Precursor
12
12
  super()
13
13
  @separator = separator
14
14
 
15
- allow_set = Set.new(allow_list)
16
-
17
- @env_vars = ENV.select { |n, _| allow_set.empty? || allow_set.include?(n) }.transform_keys do |name|
18
- name.sub(@separator, '.').to_sym
19
- end
15
+ @allow_set = Set.new(allow_list)
20
16
  end
21
17
 
22
18
  protected
23
19
 
24
- def store
25
- @env_vars
20
+ def load_store(_config_root)
21
+ ENV.select { |n, _| @allow_set.empty? || @allow_set.include?(n) }.transform_keys do |name|
22
+ name.sub(@separator, '.').to_sym
23
+ end
26
24
  end
27
25
  end
28
26
  end
data/lib/hash_vault.rb CHANGED
@@ -12,6 +12,8 @@ module Precursor
12
12
 
13
13
  protected
14
14
 
15
- attr_reader :store
15
+ def load_store(_config_root)
16
+ @store
17
+ end
16
18
  end
17
19
  end
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'vault'
3
+ require_relative 'hash_vault'
4
4
 
5
5
  module Precursor
6
6
  # Vault that stores data in hash and allows to override config on the fly
7
7
  class OverrideVault < Vault
8
- def initialize
9
- super()
10
- @vault_data = {}
8
+ def initialize(hash = {})
9
+ super(hash)
11
10
  end
12
11
 
13
12
  def override(key, value)
@@ -17,11 +16,5 @@ module Precursor
17
16
  def clear(key)
18
17
  store.delete(key)
19
18
  end
20
-
21
- protected
22
-
23
- def store
24
- @vault_data
25
- end
26
19
  end
27
20
  end
@@ -8,7 +8,7 @@ module Precursor
8
8
  protected
9
9
 
10
10
  def store
11
- Thread.current[:precursor_override_vault] ||= {}
11
+ Thread.current[:precursor_override_vault] ||= @store
12
12
  end
13
13
  end
14
14
  end
data/lib/vault.rb CHANGED
@@ -3,6 +3,14 @@
3
3
  module Precursor
4
4
  # Base class for config vaults
5
5
  class Vault
6
+ attr_reader :store
7
+
8
+ # Loads vault data from the source
9
+ # @param config_root [Precursor::ConfigRoot] A reference to config root to read values or resolve vars
10
+ def load(config_root)
11
+ @store = load_store(config_root)
12
+ end
13
+
6
14
  # Returns true if the vault has a value for the given key, otherwise false
7
15
  # @return [Boolean] true if the vault has a value for the given key, otherwise false
8
16
  def key?(key)
@@ -17,8 +25,7 @@ module Precursor
17
25
 
18
26
  protected
19
27
 
20
- # Replace this method in descendant classes to return Hash-like store
21
- def store
28
+ def load_store(_config_root)
22
29
  {}
23
30
  end
24
31
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Precursor
4
- VERSION = '0.5.1'
4
+ VERSION = '0.7.0'
5
5
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'yaml_vault'
4
+
5
+ module Precursor
6
+ # A vault that reads yaml data from a file
7
+ class YamlFileVault < YamlVault
8
+ def initialize(file_path)
9
+ super('')
10
+ @file_path = file_path
11
+ end
12
+
13
+ protected
14
+
15
+ def load_store(config_root)
16
+ file_path = config_root.resolve(@file_path)
17
+ @yaml = File.new(file_path).read if File.exist?(file_path)
18
+
19
+ super(config_root)
20
+ end
21
+ end
22
+ end
data/lib/yaml_vault.rb CHANGED
@@ -7,15 +7,15 @@ require_relative 'vault'
7
7
  module Precursor
8
8
  # Vault that reads config data from a string with Yaml
9
9
  class YamlVault < Vault
10
- def initialize(src)
10
+ def initialize(yaml)
11
11
  super()
12
- @yaml = flat_hash(YAML.safe_load(src))
12
+ @yaml = yaml
13
13
  end
14
14
 
15
15
  protected
16
16
 
17
- def store
18
- @yaml
17
+ def load_store(_config_root)
18
+ flat_hash(YAML.safe_load(@yaml))
19
19
  end
20
20
 
21
21
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: precursor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Maraev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-15 00:00:00.000000000 Z
11
+ date: 2022-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: optparse
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: code-scanning-rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: debug
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,6 +84,7 @@ files:
70
84
  - lib/thread_local_override_vault.rb
71
85
  - lib/vault.rb
72
86
  - lib/version.rb
87
+ - lib/yaml_file_vault.rb
73
88
  - lib/yaml_vault.rb
74
89
  homepage: https://github.com/the-vk/precursor
75
90
  licenses: