easy-settings 1.1.0 → 2.0.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: e67b82d33689b9d6aa1e5850e8659a72b90f429fece495dc8e89c9731edf6c09
4
- data.tar.gz: 8e71adb53f05010b04f346d0dc38d6e364735fef858f5b4524d7be34c3140216
3
+ metadata.gz: 9186867548fd27da53f287246d749505b239cd8f3d55e86450725448aafb9f8c
4
+ data.tar.gz: abf1596640e87eabccd9227146d50ab02867e4e44142a367991ec89d38b11942
5
5
  SHA512:
6
- metadata.gz: 10732103fbf4d206f7eb43880cf3f1a65d8a4b9e06e042f4f1e59bc62f8661abbb886e264641567aee11d76f5edcb59f335b0cd55d08c85458cff4ac4b02699b
7
- data.tar.gz: b03ce4e5ee16132c7144850f77a535a7e0e32d0c973822452dedafd6633158cc85e4667020a954e62c303f93dbd1a1b8cc760dd115753f2a3910369f7c420b78
6
+ metadata.gz: dfb7190c8a8bc10544952206b1452c87c3feaae5dcc15e585663d613f4460b18f44e793be55b55b5cda8a2ee6ba5e1a95742b1eb8703fbaed7b7bdc88cc99934
7
+ data.tar.gz: 7e2223474a0cbddc639cccd5459d35b89b7887aa9af8430f382f18545f070f1ed5a129040a385c19d4591beebf5be4d8f1338a138fd308ef1148f46d6b7d5f40
data/README.rdoc CHANGED
@@ -4,7 +4,7 @@ Inspired by the mc-settings and config gems, but with a simpler code base and mo
4
4
 
5
5
  == Installation
6
6
 
7
- Just include the screwdriver gem in your Bundler Gemfile
7
+ Just include the easy-settings gem in your Bundler Gemfile
8
8
 
9
9
  gem "easy-settings"
10
10
 
data/lib/easy-settings.rb CHANGED
@@ -5,6 +5,7 @@ require "easy-settings/version"
5
5
  require "easy-settings/struct"
6
6
  require "easy-settings/env_source"
7
7
  require "easy-settings/path_source"
8
+ require "easy-settings/certificate_manager_source"
8
9
  require "easy-settings/yaml_source"
9
10
 
10
11
  class EasySettings
@@ -0,0 +1,33 @@
1
+ require "easy-settings/coercion"
2
+
3
+ class EasySettings::CertificateManagerSource < EasySettings::PathSource
4
+ def initialize(base_path, settings_root: ["certificates"], separator: "__", converter: :downcase)
5
+ super(base_path, settings_root: settings_root, separator: separator, converter: converter, parse_values: false)
6
+ end
7
+
8
+ def load
9
+ {}.tap do |data|
10
+ Dir["#{base_path}/*"].each do |path|
11
+ next unless File.directory?(path)
12
+ next unless valid_folder?(path)
13
+
14
+ variable = path.gsub("#{base_path}/", "")
15
+ keys = settings_root + variable.to_s.split(separator)
16
+
17
+ filenames.each do |filename, key|
18
+ value = File.binread("#{path}/#{filename}").strip
19
+ assign_value(data, keys + [key], value)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ def valid_folder?(path)
26
+ # ensure the folder contains all the files we expect
27
+ (filenames.keys - Dir["#{path}/*"].map{ |path| File.basename(path) }).none?
28
+ end
29
+
30
+ def filenames
31
+ {"ca.crt" => "ca", "tls.crt" => "crt", "tls.key" => "key"}
32
+ end
33
+ end
@@ -1,13 +1,12 @@
1
- require "easy-settings/coercion"
1
+ require "easy-settings/path_source"
2
+ require "active_support/core_ext/object"
2
3
 
3
- class EasySettings::EnvSource
4
- attr_reader :prefix, :separator, :converter, :parse_values
4
+ class EasySettings::EnvSource < EasySettings::PathSource
5
+ attr_reader :prefix
5
6
 
6
7
  def initialize(prefix, separator: "__", converter: :downcase, parse_values: true)
7
8
  @prefix = prefix
8
- @separator = separator
9
- @converter = converter
10
- @parse_values = parse_values
9
+ super(nil, separator: separator, converter: converter, parse_values: parse_values)
11
10
  end
12
11
 
13
12
  def load
@@ -16,13 +15,8 @@ class EasySettings::EnvSource
16
15
  keys = variable.to_s.split(separator)
17
16
  next if prefix.present? && keys.shift != prefix
18
17
 
19
- keys.map!{ |key| key.send(converter) } if converter
20
-
21
- leaf = keys[0...-1].inject(data){ |h, key| h[key] ||= {} }
22
- leaf[keys.last] = parse_values ? EasySettings::Coercion.new(value).run : value
18
+ assign_value(data, keys, value)
23
19
  end
24
20
  end
25
- rescue NoMethodError => e
26
- raise "Invalid name converter: #{converter}"
27
21
  end
28
22
  end
@@ -1,10 +1,11 @@
1
1
  require "easy-settings/coercion"
2
2
 
3
3
  class EasySettings::PathSource
4
- attr_reader :base_path, :separator, :converter, :parse_values
4
+ attr_reader :base_path, :settings_root, :separator, :converter, :parse_values
5
5
 
6
- def initialize(base_path, separator: "__", converter: :downcase, parse_values: true)
6
+ def initialize(base_path, settings_root: [], separator: "__", converter: :downcase, parse_values: true)
7
7
  @base_path = base_path.to_s
8
+ @settings_root = settings_root
8
9
  @separator = separator
9
10
  @converter = converter
10
11
  @parse_values = parse_values
@@ -16,16 +17,23 @@ class EasySettings::PathSource
16
17
  next unless File.file?(path)
17
18
 
18
19
  variable = path.gsub("#{base_path}/", "")
19
- value = File.read(path).strip
20
-
21
- keys = variable.to_s.split(separator)
22
- keys.map!{ |key| key.send(converter) } if converter
23
-
24
- leaf = keys[0...-1].inject(data){ |h, key| h[key] ||= {} }
25
- leaf[keys.last] = parse_values ? EasySettings::Coercion.new(value).run : value
20
+ keys = settings_root + variable.to_s.split(separator)
21
+ value = File.binread(path).strip
22
+ assign_value(data, keys, value)
26
23
  end
27
24
  end
28
- rescue NoMethodError => e
29
- raise "Invalid name converter: #{converter}"
25
+ end
26
+
27
+ def assign_value(data, keys, value)
28
+ keys.map! do |key|
29
+ next key.to_i if key =~ /^\d+/
30
+ next key.send(converter) if converter
31
+ key
32
+ rescue NoMethodError => e
33
+ raise "Invalid name converter: #{converter}"
34
+ end
35
+
36
+ leaf = keys[0...-1].each_with_index.inject(data){ |h, (key, i)| h[key] ||= keys[i + 1].is_a?(Integer) ? [] : {} }
37
+ leaf[keys.last] = parse_values ? EasySettings::Coercion.new(value).run : value
30
38
  end
31
39
  end
@@ -24,15 +24,15 @@ class EasySettings::Struct
24
24
  end
25
25
 
26
26
  def [](property)
27
- @properties.fetch(property){ raise_unknown_property(property) }
27
+ @properties.fetch(property.to_s){ raise_unknown_property(property) }
28
28
  end
29
29
 
30
30
  def []=(property, value)
31
- @properties[property] = value
31
+ @properties[property.to_s] = value
32
32
  end
33
33
 
34
34
  def try(property)
35
- @properties[property]
35
+ @properties[property.to_s]
36
36
  end
37
37
 
38
38
  def to_h
@@ -1,3 +1,3 @@
1
1
  class EasySettings
2
- VERSION = "1.1.0"
2
+ VERSION = "2.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corin Langosch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-21 00:00:00.000000000 Z
11
+ date: 2021-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -68,6 +68,7 @@ files:
68
68
  - docker-compose.yml
69
69
  - easy-settings.gemspec
70
70
  - lib/easy-settings.rb
71
+ - lib/easy-settings/certificate_manager_source.rb
71
72
  - lib/easy-settings/coercion.rb
72
73
  - lib/easy-settings/env_source.rb
73
74
  - lib/easy-settings/path_source.rb