anyway_config 0.3.0 → 0.4.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 +4 -4
- data/README.md +22 -2
- data/lib/anyway/config.rb +11 -3
- data/lib/anyway/env.rb +29 -1
- data/lib/anyway/version.rb +1 -1
- data/spec/config_spec.rb +3 -3
- data/spec/dummy/config/secrets.yml +2 -0
- data/spec/env_spec.rb +14 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 458041a187fa4057159e72a80b71b2f5c2110b18
|
4
|
+
data.tar.gz: e96284b36eea6da6390ea0ebf2e029f7ebda186c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b677bda47bc679d8d50b80a930904f13678ffb36533fc9ccbc05f1e5dd39d549173995abd532dc47b7a70958fe7f381e423a6b77524a0fbcec69ebaa649c481
|
7
|
+
data.tar.gz: a9ca0a93fbfc54679a06665a0b67ce9b9fa8be644a62c81be196c392cf511d01a4e3a54eaf68ea07de7591eb5e3bace8acb6a221761225e191c64c243c329047
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Configure your gemspec
|
|
15
15
|
```ruby
|
16
16
|
Gem::Specification.new do |s|
|
17
17
|
...
|
18
|
-
s.add_dependancy 'anyway_config', "~>0.
|
18
|
+
s.add_dependancy 'anyway_config', "~>0.4"
|
19
19
|
...
|
20
20
|
end
|
21
21
|
```
|
@@ -72,7 +72,7 @@ You can use `clear` and `reload` functions on your config (which do exactly what
|
|
72
72
|
In your Gemfile
|
73
73
|
|
74
74
|
```ruby
|
75
|
-
require 'anyway_config', "~>0.
|
75
|
+
require 'anyway_config', "~>0.4"
|
76
76
|
```
|
77
77
|
|
78
78
|
In your code
|
@@ -106,9 +106,29 @@ Environmental variables for your config should start with your module name (or c
|
|
106
106
|
|
107
107
|
For example, if your module is called "MyCoolGem" then your env var "MYCOOLGEM_PASSWORD" is used as `config.password`.
|
108
108
|
|
109
|
+
Environment variables are type-casted (case-insensitive).
|
110
|
+
Examples:
|
111
|
+
- "True", "T" and "yes" to `true`;
|
112
|
+
- "False", "f" and "no" to `false`;
|
113
|
+
- "nil" and "null" to `nil` (do you really need it?);
|
114
|
+
- "123" to 123 and "3.14" to 3.14.
|
115
|
+
|
109
116
|
*Anyway Config* supports nested (_hashed_) environmental variables. Just separate keys with double-underscore.
|
110
117
|
For example, "MYCOOLGEM_OPTIONS__VERBOSE" is transformed to `config.options.verbose`.
|
111
118
|
|
119
|
+
Array values are also supported:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
# Suppose ENV["MYCOOLGEM_IDS"] = '1,2,3'
|
123
|
+
config.ids #=> [1,2,3]
|
124
|
+
```
|
125
|
+
|
126
|
+
If you want to provide text-like env variable which contain commas then wrap it into quotes:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
MYCOOLGEM="Nif-Nif, Naf-Naf and Nouf-Nouf"
|
130
|
+
```
|
131
|
+
|
112
132
|
## Using without Rails
|
113
133
|
|
114
134
|
AnywayConfig can be used without Rails too.
|
data/lib/anyway/config.rb
CHANGED
@@ -26,7 +26,7 @@ module Anyway
|
|
26
26
|
|
27
27
|
private
|
28
28
|
def extract_name
|
29
|
-
|
29
|
+
name[/^(\w+)/].underscore
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -43,7 +43,7 @@ module Anyway
|
|
43
43
|
|
44
44
|
def clear
|
45
45
|
self.class.config_attributes.each do |attr|
|
46
|
-
|
46
|
+
send("#{attr}=", nil)
|
47
47
|
end
|
48
48
|
self
|
49
49
|
end
|
@@ -51,7 +51,7 @@ module Anyway
|
|
51
51
|
def load
|
52
52
|
config = load_from_sources self.class.defaults.deep_dup
|
53
53
|
config.each do |key, val|
|
54
|
-
|
54
|
+
set_value(key, val)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -73,5 +73,13 @@ module Anyway
|
|
73
73
|
config.deep_merge! (Anyway.env.send(@config_name) || {})
|
74
74
|
config
|
75
75
|
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
# safe way to assing config value
|
80
|
+
# checks that key exists in config
|
81
|
+
def set_value(key, val)
|
82
|
+
send("#{key}=", val) if self.class.config_attributes.include?(key.to_sym)
|
83
|
+
end
|
76
84
|
end
|
77
85
|
end
|
data/lib/anyway/env.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
module Anyway
|
2
2
|
class Env
|
3
|
+
|
4
|
+
# Regexp to detect array values
|
5
|
+
# Array value is a values that contains at least one comma
|
6
|
+
# and doesn't start/end with quote
|
7
|
+
|
8
|
+
ARRAY_RXP = /\A[^'"].*\s*,\s*.*[^'"]\z/
|
9
|
+
|
3
10
|
def initialize
|
4
11
|
@data = {}
|
5
12
|
load
|
@@ -28,7 +35,7 @@ module Anyway
|
|
28
35
|
ENV.each_pair do |key, val|
|
29
36
|
if config_key?(key)
|
30
37
|
mod, path = extract_module_path(key)
|
31
|
-
set_by_path(get_hash(@data, mod), path, val)
|
38
|
+
set_by_path(get_hash(@data, mod), path, serialize_val(val))
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
@@ -55,5 +62,26 @@ module Anyway
|
|
55
62
|
def get_hash(from, name)
|
56
63
|
(from[name] ||= {}.with_indifferent_access)
|
57
64
|
end
|
65
|
+
|
66
|
+
def serialize_val(value)
|
67
|
+
case value
|
68
|
+
when ARRAY_RXP
|
69
|
+
value.split(/\s*,\s*/).map(&method(:serialize_val))
|
70
|
+
when /\A(true|t|yes|y)\z/i
|
71
|
+
true
|
72
|
+
when /\A(false|f|no|n)\z/i
|
73
|
+
false
|
74
|
+
when /\A(nil|null)\z/i
|
75
|
+
nil
|
76
|
+
when /\A\d+\z/
|
77
|
+
value.to_i
|
78
|
+
when /\A\d*\.\d+\z/
|
79
|
+
value.to_f
|
80
|
+
when /\A['"].*['"]\z/
|
81
|
+
value.gsub(/(\A['"]|['"]\z)/,'')
|
82
|
+
else
|
83
|
+
value
|
84
|
+
end
|
85
|
+
end
|
58
86
|
end
|
59
87
|
end
|
data/lib/anyway/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -48,7 +48,7 @@ describe Anyway::Config do
|
|
48
48
|
ENV['COOL_PORT'] = '80'
|
49
49
|
ENV['COOL_USER__NAME'] = 'john'
|
50
50
|
Anyway.env.reload
|
51
|
-
expect(conf.port).to eq
|
51
|
+
expect(conf.port).to eq 80
|
52
52
|
expect(conf.user[:name]).to eq 'john'
|
53
53
|
end
|
54
54
|
end
|
@@ -73,7 +73,7 @@ describe Anyway::Config do
|
|
73
73
|
ENV['COOL_USER__NAME'] = 'john'
|
74
74
|
Anyway.env.reload
|
75
75
|
conf.reload
|
76
|
-
expect(conf.port).to eq
|
76
|
+
expect(conf.port).to eq 80
|
77
77
|
expect(conf.user[:name]).to eq 'john'
|
78
78
|
end
|
79
79
|
end
|
@@ -86,7 +86,7 @@ describe Anyway::Config do
|
|
86
86
|
ENV['MYAPP_NAME'] = 'my_app'
|
87
87
|
Anyway.env.reload
|
88
88
|
data = Anyway::Config.for(:my_app)
|
89
|
-
expect(data[:test]).to eq
|
89
|
+
expect(data[:test]).to eq 1
|
90
90
|
expect(data[:name]).to eq 'my_app'
|
91
91
|
if Rails.application.respond_to?(:secrets)
|
92
92
|
expect(data[:secret]).to eq 'my_secret'
|
data/spec/env_spec.rb
CHANGED
@@ -13,9 +13,20 @@ describe Anyway::Env do
|
|
13
13
|
it "should load hash values" do
|
14
14
|
ENV['TESTO_DATA__ID'] = '1'
|
15
15
|
ENV['TESTO_DATA__META__NAME'] = 'meta'
|
16
|
-
ENV['TESTO_DATA__META__VAL'] = '
|
17
|
-
expect(env.testo[:data][:id]).to eq
|
16
|
+
ENV['TESTO_DATA__META__VAL'] = 'true'
|
17
|
+
expect(env.testo[:data][:id]).to eq 1
|
18
18
|
expect(env.testo[:data][:meta][:name]).to eq 'meta'
|
19
|
-
expect(env.testo[:data][:meta][:val]).to
|
19
|
+
expect(env.testo[:data][:meta][:val]).to be_truthy
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should load array values" do
|
23
|
+
ENV['TESTO_DATA__IDS'] = '1,2, 3'
|
24
|
+
ENV['TESTO_DATA__META__NAMES'] = 'meta, kotleta'
|
25
|
+
ENV['TESTO_DATA__META__SIZE'] = '2'
|
26
|
+
ENV['TESTO_DATA__TEXT'] = '"C\'mon, everybody"'
|
27
|
+
expect(env.testo[:data][:ids]).to include(1,2,3)
|
28
|
+
expect(env.testo[:data][:meta][:names]).to include('meta','kotleta')
|
29
|
+
expect(env.testo[:data][:meta][:size]).to eq 2
|
30
|
+
expect(env.testo[:data][:text]).to eq "C'mon, everybody"
|
20
31
|
end
|
21
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anyway_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vlad Dem
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|