precursor 0.5.1 → 0.7.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 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: