easy-settings 1.0.0 → 1.3.1

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: 28262b3447381ef370224446b8d64871b2391aa420f3addfde0417a9b4a3c909
4
- data.tar.gz: 44c4d788c7f2b49e4748062b3f48029ce331da8c55a7b920543eadd3f2da6023
3
+ metadata.gz: 742f94a5ea13b5a42e8e652f6b241880977efacf37b464da912c39ea28a11bec
4
+ data.tar.gz: 4ff117b32d32b3a180767cafbd106f4df0d5dbc69aa00183647e16f5a5e723d9
5
5
  SHA512:
6
- metadata.gz: cb3b83e76da3c4ae3afa86525b35cec52f6dfe4b8809d2e080c21acad84b30cce0e3975a285daa1994d9907b629e89798ad867e6e1b8320bebd6e43ac7f16ea6
7
- data.tar.gz: e4900f399e2b9d7089f5999b5b908beb5e05586a6312a8587d0f85ebab661e9a2a35e855a629a690be0b0e1263dac6fb1a5031c4fc92215583424f1963e86e53
6
+ metadata.gz: 3eda64f580f75b8ea81f79cae2b17e7bba85874f203a7b11a03dc9ae7231887ed4e21083624906c2174b0585e449d7d9d260701dce88de493bade556e6e31843
7
+ data.tar.gz: 7fc6687b0cd39502b95dd026a4b3429dec813bcbedc0e15b3ef9544239664d97508d4ebc1a25a3404640316ff8617eebdffc466250d42b126f2cc7b8e878f2c4
@@ -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
 
@@ -6,3 +6,8 @@ services:
6
6
  command: bash -c 'sleep 100000'
7
7
  volumes:
8
8
  - ./:/home/web/app
9
+ - ~/.gem:/home/web/.gem
10
+ - ~/.gitconfig:/home/web/.gitconfig:ro
11
+ - $SSH_AUTH_SOCK:/auth-sock
12
+ environment:
13
+ - SSH_AUTH_SOCK=/auth-sock
@@ -1,3 +1,6 @@
1
+ require "active_support"
2
+ require "active_support/core_ext/module/delegation"
3
+
1
4
  require "easy-settings/version"
2
5
  require "easy-settings/struct"
3
6
  require "easy-settings/env_source"
@@ -7,7 +10,7 @@ require "easy-settings/yaml_source"
7
10
  class EasySettings
8
11
  delegate :respond_to?, to: :@data
9
12
 
10
- def initialize(sources:, fail_on_missing: true)
13
+ def initialize(sources: [], fail_on_missing: true)
11
14
  @sources = sources
12
15
  @fail_on_missing = fail_on_missing
13
16
  reload!
@@ -1,27 +1,21 @@
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
14
13
  {}.tap do |data|
15
14
  ENV.each do |variable, value|
16
15
  keys = variable.to_s.split(separator)
17
- next unless keys.shift == prefix
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
23
- rescue NoMethodError => e
24
- raise "Invalid name converter: #{converter}"
18
+ assign_value(data, keys, value)
25
19
  end
26
20
  end
27
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
26
- rescue NoMethodError => e
27
- raise "Invalid name converter: #{converter}"
22
+ assign_value(data, keys, value)
28
23
  end
29
24
  end
30
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
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.0.0"
2
+ VERSION = "1.3.1"
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.0.0
4
+ version: 1.3.1
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-06 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec