easy-settings 1.1.0 → 1.2.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: 5afd7d986dbb859f725c01e1e9da9afbd838c29f134e9febb294e0a29d448aa4
4
+ data.tar.gz: cb822a2f099d7435e04dceceaa32632bf40ab2b99188b1929fa40b6f8e580c9f
5
5
  SHA512:
6
- metadata.gz: 10732103fbf4d206f7eb43880cf3f1a65d8a4b9e06e042f4f1e59bc62f8661abbb886e264641567aee11d76f5edcb59f335b0cd55d08c85458cff4ac4b02699b
7
- data.tar.gz: b03ce4e5ee16132c7144850f77a535a7e0e32d0c973822452dedafd6633158cc85e4667020a954e62c303f93dbd1a1b8cc760dd115753f2a3910369f7c420b78
6
+ metadata.gz: 0272ac7d15c94bb3184f38303e513d01e3dfc4477ef18de6e912bc93ce4d94da6ad68a6fee0a3c2f6340752771fbded5c793fa80ee09a40a79a8e0a9c2d52c40
7
+ data.tar.gz: bed142667f0ead59ca5b6edc9986eaa6301e63d45574e1eecdba2b2c4715442d8254219a7f6ddee708e438211f741f1e127a0e962c0adbab03982849d6ca6a81
@@ -1,13 +1,11 @@
1
- require "easy-settings/coercion"
1
+ require "easy-settings/path_source"
2
2
 
3
- class EasySettings::EnvSource
4
- attr_reader :prefix, :separator, :converter, :parse_values
3
+ class EasySettings::EnvSource < EasySettings::PathSource
4
+ attr_reader :prefix
5
5
 
6
6
  def initialize(prefix, separator: "__", converter: :downcase, parse_values: true)
7
7
  @prefix = prefix
8
- @separator = separator
9
- @converter = converter
10
- @parse_values = parse_values
8
+ super(nil, separator: separator, converter: converter, parse_values: parse_values)
11
9
  end
12
10
 
13
11
  def load
@@ -16,13 +14,8 @@ class EasySettings::EnvSource
16
14
  keys = variable.to_s.split(separator)
17
15
  next if prefix.present? && keys.shift != prefix
18
16
 
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
17
+ assign_value(data, keys, value)
23
18
  end
24
19
  end
25
- rescue NoMethodError => e
26
- raise "Invalid name converter: #{converter}"
27
20
  end
28
21
  end
@@ -19,13 +19,21 @@ class EasySettings::PathSource
19
19
  value = File.read(path).strip
20
20
 
21
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
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
@@ -1,3 +1,3 @@
1
1
  class EasySettings
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.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: 1.2.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: 2020-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec