anyway_config 1.1.2 → 1.1.3
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/CHANGELOG.md +18 -0
- data/README.md +20 -0
- data/anyway_config.gemspec +1 -2
- data/lib/anyway/config.rb +24 -10
- data/lib/anyway/rails/config.rb +1 -3
- data/lib/anyway/version.rb +1 -1
- data/spec/config_spec.rb +25 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e88db3a37e515c2b4fbcb002b3dbe984300fb800
|
4
|
+
data.tar.gz: b753b1df76dfc0d48b52a9cfc038b418df5a4fba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7421be11264c928c62e2edd22452e446f4c8995b40e13de5f748a94dbfa740654a2954128d0c690be085a95a8a92d983beabf00f5004cf0cf80377e1546c9723
|
7
|
+
data.tar.gz: 488df50e28e9469aa094c7b3b6b69fba76f835fa0070ed86ad81c25181e89562aa055dfb73cde5e12e45b64f660b7a9f289458c28fd8c253ba51d23c88e8312b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 1.1.3 (2017-12-20)
|
4
|
+
|
5
|
+
- Allow to pass raw hash with explicit values to `Config.new`. ([@dsalahutdinov][])
|
6
|
+
|
7
|
+
Example:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
Sniffer::Config.new(
|
11
|
+
overrides: {
|
12
|
+
enabled: true,
|
13
|
+
storage: {capacity: 500}
|
14
|
+
}
|
15
|
+
)
|
16
|
+
```
|
17
|
+
|
18
|
+
See more https://github.com/palkan/anyway_config/pull/10
|
19
|
+
|
3
20
|
## 1.1.2 (2017-11-19)
|
4
21
|
|
5
22
|
- Enable aliases for YAML. ([@onemanstartup][])
|
@@ -36,3 +53,4 @@ Initial version.
|
|
36
53
|
|
37
54
|
[@palkan]: https://github.com/palkan
|
38
55
|
[@onemanstartup]: https://github.com/onemanstartup
|
56
|
+
[@dsalahutdinov]: https://github.com/dsalahutdinov
|
data/README.md
CHANGED
@@ -12,6 +12,8 @@ Libraries using Anyway Config:
|
|
12
12
|
|
13
13
|
- [AnyCable](https://github.com/anycable/anycable)
|
14
14
|
|
15
|
+
- [Sniffer](https://github.com/aderyabin/sniffer)
|
16
|
+
|
15
17
|
- [and others](https://github.com/palkan/anyway_config/network/dependents).
|
16
18
|
|
17
19
|
## Installation
|
@@ -87,6 +89,23 @@ module MyCoolGem
|
|
87
89
|
end
|
88
90
|
```
|
89
91
|
|
92
|
+
#### Provide explicit values
|
93
|
+
|
94
|
+
Sometimes it's useful to set some parameters explicitly during config initialization.
|
95
|
+
You can do that using `overrides` option:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
config = MyCoolGem::Config.new(
|
99
|
+
overrides: {
|
100
|
+
user: 'john',
|
101
|
+
password: 'rubyisnotdead'
|
102
|
+
}
|
103
|
+
)
|
104
|
+
|
105
|
+
# The value would not be overriden from other sources (such as YML file, env)
|
106
|
+
config.user == 'john'
|
107
|
+
```
|
108
|
+
|
90
109
|
### Dynamic configuration
|
91
110
|
|
92
111
|
You can also create configuration objects without pre-defined schema (just like `Rails.application.config_for` but more [powerful](#railsapplicationconfig_for-vs-anywayconfigfor)):
|
@@ -118,6 +137,7 @@ Environmental variables work the same way as with Rails.
|
|
118
137
|
|
119
138
|
There are `#clear` and `#reload` functions on your config (which do exactly what they state).
|
120
139
|
|
140
|
+
Note: `#reload` also accepts `overrides` key to provide explicit values (see above).
|
121
141
|
|
122
142
|
## `Rails.application.config_for` vs `Anyway::Config.for`
|
123
143
|
|
data/anyway_config.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.summary = "Configuration DSL for Ruby libraries and applications"
|
14
14
|
s.description = %{
|
15
15
|
Configuration DSL for Ruby libraries and applications.
|
16
|
-
|
17
16
|
Allows you to easily follow the twelve-factor application principles (https://12factor.net/config).
|
18
17
|
}
|
19
18
|
|
@@ -24,6 +23,6 @@ Gem::Specification.new do |s|
|
|
24
23
|
s.required_ruby_version = '>= 2.2'
|
25
24
|
|
26
25
|
s.add_development_dependency "rspec", "~> 3.5"
|
27
|
-
s.add_development_dependency "rubocop", "~> 0.
|
26
|
+
s.add_development_dependency "rubocop", "~> 0.52"
|
28
27
|
s.add_development_dependency "simplecov", ">= 0.3.8"
|
29
28
|
end
|
data/lib/anyway/config.rb
CHANGED
@@ -44,21 +44,35 @@ module Anyway # :nodoc:
|
|
44
44
|
# my_config = Anyway::Config.for(:my_app)
|
45
45
|
# # will load data from config/my_app.yml, secrets.my_app, ENV["MY_APP_*"]
|
46
46
|
def for(name)
|
47
|
-
new(name, false).load_from_sources
|
47
|
+
new(name: name, load: false).load_from_sources
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
attr_reader :config_name
|
52
52
|
|
53
|
-
|
54
|
-
|
53
|
+
# Instantiate config with specified name, loads the data and applies overrides
|
54
|
+
#
|
55
|
+
# Example:
|
56
|
+
#
|
57
|
+
# my_config = Anyway::Config.new(name: :my_app, load: true, overrides: { some: :value })
|
58
|
+
#
|
59
|
+
# rubocop:disable Metrics/LineLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
60
|
+
def initialize(config_name = nil, do_load = nil, name: nil, load: true, overrides: {})
|
61
|
+
unless config_name.nil? && do_load.nil?
|
62
|
+
warn "[Deprecated] Positional arguments for Anyway::Config#initialize will be removed in 1.2.0. Use keyword arguments instead: initialize(name:, load:, overrides:)"
|
63
|
+
end
|
64
|
+
name = config_name unless config_name.nil?
|
65
|
+
load = do_load unless do_load.nil?
|
66
|
+
|
67
|
+
@config_name = name || self.class.config_name
|
55
68
|
raise ArgumentError, "Config name is missing" unless @config_name
|
56
|
-
load if
|
69
|
+
self.load(overrides) if load
|
57
70
|
end
|
71
|
+
# rubocop:enable Metrics/LineLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
58
72
|
|
59
|
-
def reload
|
73
|
+
def reload(overrides = {})
|
60
74
|
clear
|
61
|
-
load
|
75
|
+
load(overrides)
|
62
76
|
self
|
63
77
|
end
|
64
78
|
|
@@ -69,8 +83,10 @@ module Anyway # :nodoc:
|
|
69
83
|
self
|
70
84
|
end
|
71
85
|
|
72
|
-
def load
|
86
|
+
def load(overrides = {})
|
73
87
|
config = load_from_sources((self.class.defaults || {}).deep_dup)
|
88
|
+
|
89
|
+
config.merge!(overrides) unless overrides.nil?
|
74
90
|
config.each do |key, val|
|
75
91
|
set_value(key, val)
|
76
92
|
end
|
@@ -86,9 +102,7 @@ module Anyway # :nodoc:
|
|
86
102
|
def load_from_file(config)
|
87
103
|
config_path = Anyway.env.fetch(config_name).delete('conf') ||
|
88
104
|
"./config/#{config_name}.yml"
|
89
|
-
if config_path && File.file?(config_path)
|
90
|
-
config.deep_merge!(parse_yml(config_path) || {})
|
91
|
-
end
|
105
|
+
config.deep_merge!(parse_yml(config_path) || {}) if config_path && File.file?(config_path)
|
92
106
|
config
|
93
107
|
end
|
94
108
|
|
data/lib/anyway/rails/config.rb
CHANGED
@@ -18,9 +18,7 @@ module Anyway
|
|
18
18
|
|
19
19
|
def load_from_file(config)
|
20
20
|
config_path = Rails.root.join("config", "#{@config_name}.yml")
|
21
|
-
if File.file? config_path
|
22
|
-
config.deep_merge!(parse_yml(config_path)[Rails.env] || {})
|
23
|
-
end
|
21
|
+
config.deep_merge!(parse_yml(config_path)[Rails.env] || {}) if File.file? config_path
|
24
22
|
config
|
25
23
|
end
|
26
24
|
|
data/lib/anyway/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -54,6 +54,11 @@ describe Anyway::Config do
|
|
54
54
|
expect(conf.host).to eq "test.host"
|
55
55
|
end
|
56
56
|
|
57
|
+
it "sets overrides after loading YAML" do
|
58
|
+
config = CoolConfig.new(overrides: { host: 'overrided.host' })
|
59
|
+
expect(config.host).to eq "overrided.host"
|
60
|
+
end
|
61
|
+
|
57
62
|
if Rails.application.respond_to?(:secrets)
|
58
63
|
it "load config from secrets" do
|
59
64
|
expect(conf.user[:name]).to eq "test"
|
@@ -79,6 +84,17 @@ describe Anyway::Config do
|
|
79
84
|
ENV['ANYWAY_SECRET_PASSWORD'] = 'my_pass'
|
80
85
|
expect(conf.user[:password]).to eq 'my_pass'
|
81
86
|
end
|
87
|
+
|
88
|
+
it "overrides loaded value by explicit" do
|
89
|
+
ENV['ANYWAY_SECRET_PASSWORD'] = 'my_pass'
|
90
|
+
|
91
|
+
config = CoolConfig.new(
|
92
|
+
overrides: {
|
93
|
+
user: { password: 'explicit_password' }
|
94
|
+
}
|
95
|
+
)
|
96
|
+
expect(config.user[:password]).to eq "explicit_password"
|
97
|
+
end
|
82
98
|
end
|
83
99
|
|
84
100
|
describe "clear" do
|
@@ -118,9 +134,7 @@ describe Anyway::Config do
|
|
118
134
|
data = Anyway::Config.for(:my_app)
|
119
135
|
expect(data[:test]).to eq 1
|
120
136
|
expect(data[:name]).to eq 'my_app'
|
121
|
-
if Rails.application.respond_to?(:secrets)
|
122
|
-
expect(data[:secret]).to eq 'my_secret'
|
123
|
-
end
|
137
|
+
expect(data[:secret]).to eq 'my_secret' if Rails.application.respond_to?(:secrets)
|
124
138
|
end
|
125
139
|
end
|
126
140
|
|
@@ -133,6 +147,14 @@ describe Anyway::Config do
|
|
133
147
|
end
|
134
148
|
end
|
135
149
|
|
150
|
+
context "config with initial hash values" do
|
151
|
+
let(:conf) { SmallConfig.new(overrides: { 'meta': 'dummy' }) }
|
152
|
+
|
153
|
+
it "works" do
|
154
|
+
expect(conf.meta).to eq 'dummy'
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
136
158
|
context "when name is missing" do
|
137
159
|
let(:config) do
|
138
160
|
Class.new(described_class)
|
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: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.52'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.52'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.3.8
|
55
|
-
description: "\n Configuration DSL for Ruby libraries and applications.\n
|
55
|
+
description: "\n Configuration DSL for Ruby libraries and applications.\n Allows
|
56
56
|
you to easily follow the twelve-factor application principles (https://12factor.net/config).\n
|
57
57
|
\ "
|
58
58
|
email:
|