flexible-config 1.1.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 +7 -0
- data/Gemfile +3 -0
- data/Guardfile +14 -0
- data/MIT-LICENSE +20 -0
- data/README.md +125 -0
- data/lib/flexible-config.rb +16 -0
- data/lib/flexible_config/builder.rb +36 -0
- data/lib/flexible_config/not_found.rb +22 -0
- data/lib/flexible_config/overview.rb +56 -0
- data/lib/flexible_config/version.rb +3 -0
- data/lib/flexible_config/wrapped_env.rb +55 -0
- data/lib/flexible_config/wrapped_yaml.rb +39 -0
- data/lib/tasks/flexible_config.rake +6 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6ca26fc729ad030745058cbb8a429e8dcc673beb
|
4
|
+
data.tar.gz: 9d55e6bbc819b243a515e2064c54669113db26e9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4039b9ee15390d0813973f0651a4d9946949f36bada242ae60ab5ccb1b733a692cc384697258cc1f132cf0b6bf2c1fec090be1efd342c03e38540e73afa5adcb
|
7
|
+
data.tar.gz: 2e816cf6fd3d2bd5bcbdf0a49ff6005c24cb75dd635aaccc3e4a9e5a6b7372e7975393555c78f9053e871daad4cb63c199ce908176f3427188aa12d40b2ce542
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
guard 'bundler' do
|
2
|
+
watch 'Gemfile'
|
3
|
+
watch /^.+\.gemspec/
|
4
|
+
end
|
5
|
+
|
6
|
+
guard(
|
7
|
+
:rspec, cmd: "bundle exec rspec", failed_mode: :keep,
|
8
|
+
all_after_pass: true, all_on_start: true
|
9
|
+
) do
|
10
|
+
watch %r{^spec/.+_spec\.rb$}
|
11
|
+
watch %r{^spec/fixtures/.+\.rb$}
|
12
|
+
watch(%r{^lib/.+\.rb$}) { 'spec' }
|
13
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
14
|
+
end
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011, 2012, 2013 by Grouper
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
[](https://travis-ci.org/Grouper/flexible-config)
|
2
|
+
|
3
|
+
|
4
|
+
FlexibleConfig
|
5
|
+
==============
|
6
|
+
|
7
|
+
FlexibleConfig promotes good OOP design, and the separation of logic and
|
8
|
+
configuration in your Ruby classes.
|
9
|
+
|
10
|
+
FlexibleConfig allows you to set class constants cleanly in ruby with the
|
11
|
+
heirarchical structure and clean workflow of YML config, without sacrificing
|
12
|
+
the flexibility and immediacy of ENVironment variables.
|
13
|
+
|
14
|
+
### Here is how your class constants could look like using FlexibleConfig:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
module Bidding
|
18
|
+
class Calculator
|
19
|
+
FlexibleConfig.use 'auction.bidding' do |config|
|
20
|
+
BASE_RATE = config['base_rate']
|
21
|
+
TIME_DECAY = config['time_decay']
|
22
|
+
WIGGLE_ROOM = config['wiggle_room']
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
Or the more safer, (but more verbose) syntax:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
module Bidding
|
32
|
+
class Calculator
|
33
|
+
FlexibleConfig.use 'auction.bidding' do |cfg|
|
34
|
+
BIDDING_ENABLED = cfg.fetch('enabled') { true }
|
35
|
+
BIDDER_EMAIL = cfg.to_s('email_from')
|
36
|
+
BASE_RATE = cfg.to_f('base_rate') { 1.0 }
|
37
|
+
TIME_DECAY = cfg.to_f('time_decay') { 3.0 }
|
38
|
+
ATTEMPTS = cfg.to_i('wiggle_room') { 2 }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
### Then config as follows:
|
45
|
+
|
46
|
+
#### In YAML:
|
47
|
+
|
48
|
+
`config/settings/auction.yml`
|
49
|
+
|
50
|
+
```yml
|
51
|
+
default:
|
52
|
+
base_rate: 1.0
|
53
|
+
time_decay: 3.0
|
54
|
+
wiggle_room: 0.2
|
55
|
+
|
56
|
+
development:
|
57
|
+
wiggle_room: 0.6
|
58
|
+
|
59
|
+
production:
|
60
|
+
wiggle_room: 0.2
|
61
|
+
```
|
62
|
+
|
63
|
+
#### Using ENV variables to override:
|
64
|
+
|
65
|
+
```
|
66
|
+
AUCTION_BIDDING_BASE_RATE=1.0
|
67
|
+
AUCTION_BIDDING_TIME_DECAY=3.0
|
68
|
+
AUCTION_BIDDING_WIGGLE_ROOM=0.2
|
69
|
+
```
|
70
|
+
|
71
|
+
#### Casting Booleans from ENV
|
72
|
+
|
73
|
+
If your ENV variable is equal to the string 'true' or 'false' then
|
74
|
+
using the default `#fetch` method on the config object will cast it to the
|
75
|
+
Ruby `TrueClass` or `FalseClass` automatically.
|
76
|
+
|
77
|
+
#### Casting of Other Types
|
78
|
+
|
79
|
+
Casting to any Ruby type will work as long as the Ruby object and its string
|
80
|
+
representation are safely interchangable:
|
81
|
+
|
82
|
+
```
|
83
|
+
example.yml
|
84
|
+
|
85
|
+
default:
|
86
|
+
safe: '123'
|
87
|
+
unsafe: '123oops'
|
88
|
+
```
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
FlexibleConfig.use 'example' do |cfg|
|
92
|
+
BASE_RATE = cfg.to_i('safe') # => 123
|
93
|
+
TIME_DECAY = cfg.to_i('unsafe') # => raises UnsafeConversion
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
#### Viewing actual config variables in an environment
|
98
|
+
|
99
|
+
Add this to the `Rakefile` of your project:
|
100
|
+
|
101
|
+
```
|
102
|
+
# Load flexible config tasks
|
103
|
+
spec = Gem::Specification.find_by_name 'flexible-config'
|
104
|
+
load "#{spec.gem_dir}/lib/tasks/flexible_config.rake"
|
105
|
+
```
|
106
|
+
|
107
|
+
Type into the command line:
|
108
|
+
```
|
109
|
+
bundle exec rake flexible_config:print
|
110
|
+
```
|
111
|
+
|
112
|
+
- - - - -
|
113
|
+
|
114
|
+
## Contributing
|
115
|
+
|
116
|
+
If you'd like to become a contributor, the easiest way it to fork this repo, make your changes, run the specs and submit a pull request once they pass.
|
117
|
+
|
118
|
+
To run specs, run `bundle install && bundle exec rspec`
|
119
|
+
|
120
|
+
If your changes seem reasonable and the specs pass I'll give you commit rights to this repo and add you to the list of people who can push the gem.
|
121
|
+
|
122
|
+
|
123
|
+
## Copyright
|
124
|
+
|
125
|
+
Copyright (c) 2015 Grouper. See LICENSE for details.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module FlexibleConfig
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def use(config_key = '', &block)
|
8
|
+
yield Builder.new config_key
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'flexible_config/overview'
|
13
|
+
require 'flexible_config/not_found'
|
14
|
+
require 'flexible_config/builder'
|
15
|
+
require 'flexible_config/wrapped_env'
|
16
|
+
require 'flexible_config/wrapped_yaml'
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module FlexibleConfig
|
2
|
+
UnsafeConversion = Class.new(RuntimeError)
|
3
|
+
|
4
|
+
class Builder
|
5
|
+
def initialize(base_key = '')
|
6
|
+
@base_key = base_key
|
7
|
+
end
|
8
|
+
|
9
|
+
def fetch(additional_key, default = nil)
|
10
|
+
key = "#{base_key}.#{additional_key}"
|
11
|
+
item = [WrappedEnv[key], WrappedYaml[key], default].detect { |i| !i.nil? }
|
12
|
+
|
13
|
+
return item unless item.nil?
|
14
|
+
return yield if block_given?
|
15
|
+
|
16
|
+
raise NotFound.new key
|
17
|
+
end
|
18
|
+
alias_method :[], :fetch
|
19
|
+
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
value = fetch(*args, &block)
|
22
|
+
return super unless value.respond_to? method
|
23
|
+
|
24
|
+
result = value.send method
|
25
|
+
|
26
|
+
raise UnsafeConversion.new(
|
27
|
+
"Tried to convert #{value} to int #{result} but was deemed unsafe."
|
28
|
+
) unless result.to_s == value.to_s
|
29
|
+
|
30
|
+
result
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
attr_reader :base_key
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module FlexibleConfig
|
2
|
+
class NotFound < RuntimeError
|
3
|
+
def initialize(key = 'unknown.key')
|
4
|
+
super error_message_from key
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def error_message_from(key)
|
10
|
+
file_base_name, *yml_keys = key.split '.'
|
11
|
+
|
12
|
+
env_var = key.upcase.gsub '.', '_'
|
13
|
+
environment = WrappedEnv.fetch('RAILS_ENV') { 'default' }
|
14
|
+
yml_key = "#{environment}.#{yml_keys.join '.'}"
|
15
|
+
file_name = "./config/settings/#{file_base_name}.yml"
|
16
|
+
|
17
|
+
"#{self.class} Exception. Configuration value not found. Consider " \
|
18
|
+
"setting the #{env_var} environment variable, or setting the " \
|
19
|
+
"#{yml_key} property in the following file: #{file_name}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module FlexibleConfig
|
2
|
+
class Overview
|
3
|
+
def call
|
4
|
+
available_files.reduce({}) do |memo, i|
|
5
|
+
memo[i] = config_lines_for_file i
|
6
|
+
memo
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def print
|
11
|
+
call.each do |key, value|
|
12
|
+
Kernel.puts "#===== #{key.upcase} (#{key}.yml) ====="
|
13
|
+
value.each { |v| Kernel.puts v }
|
14
|
+
Kernel.puts "\n"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def available_files
|
21
|
+
WrappedYaml.config_data.keys
|
22
|
+
end
|
23
|
+
|
24
|
+
def config_lines_for_file(category)
|
25
|
+
builder = FlexibleConfig::Builder.new category
|
26
|
+
keys = []
|
27
|
+
|
28
|
+
WrappedYaml.config_data[category].values.each do |env|
|
29
|
+
keys += flat_hash(env).keys
|
30
|
+
end
|
31
|
+
|
32
|
+
keys.uniq.sort.map do |keys|
|
33
|
+
value = begin
|
34
|
+
builder[keys.join '.']
|
35
|
+
rescue FlexibleConfig::NotFound => e
|
36
|
+
"### NO VALUE ###"
|
37
|
+
end
|
38
|
+
|
39
|
+
combined_keys = [category] + keys
|
40
|
+
dotted_key = keys.join '.'
|
41
|
+
env_key = combined_keys.map(&:upcase).join '_'
|
42
|
+
from_env = !WrappedEnv[env_key].nil? ? 'ENV OVERRIDE' : ''
|
43
|
+
|
44
|
+
sprintf("%-40s|%-12s| %-45s = %s",
|
45
|
+
dotted_key, from_env, env_key, value
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def flat_hash(h, f = [], g = {})
|
51
|
+
return g.update(f => h) unless h.is_a? Hash
|
52
|
+
h.each { |k, r| flat_hash r, f+[k], g }
|
53
|
+
g
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module FlexibleConfig
|
2
|
+
module WrappedEnv
|
3
|
+
class << self
|
4
|
+
def [](generic_key)
|
5
|
+
key = normalize_key generic_key
|
6
|
+
normalize(overrides.key?(key) ? overrides[key] : ENV[key])
|
7
|
+
end
|
8
|
+
|
9
|
+
def fetch(generic_key, &block)
|
10
|
+
key = normalize_key generic_key
|
11
|
+
return overrides[key] if overrides.key?(key)
|
12
|
+
|
13
|
+
normalize ENV.fetch(key, &block)
|
14
|
+
rescue KeyError => e
|
15
|
+
raise NotFound.new key
|
16
|
+
end
|
17
|
+
|
18
|
+
def int(generic_key, &block)
|
19
|
+
key = normalize_key generic_key
|
20
|
+
val = fetch(key)
|
21
|
+
return block.call if val.nil? && block_given?
|
22
|
+
|
23
|
+
raise NotFound.new if val.nil?
|
24
|
+
val.to_i
|
25
|
+
end
|
26
|
+
|
27
|
+
def normalize(val)
|
28
|
+
case val.to_s.downcase
|
29
|
+
when 'true' then true
|
30
|
+
when 'false' then false
|
31
|
+
when '' then nil
|
32
|
+
else val
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def override(key, value)
|
37
|
+
overrides[key] = value
|
38
|
+
end
|
39
|
+
|
40
|
+
def reset
|
41
|
+
@overrides = {}
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def overrides
|
47
|
+
@overrides ||= {}
|
48
|
+
end
|
49
|
+
|
50
|
+
def normalize_key(key)
|
51
|
+
key.upcase.gsub('.', '_')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module FlexibleConfig
|
2
|
+
class WrappedYaml
|
3
|
+
CONFIG_PATH = "config/settings/**/*.yml"
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def [](key)
|
7
|
+
environment_specific = get_config(key, env: app_environment)
|
8
|
+
environment_specific.nil? ? get_config(key) : environment_specific
|
9
|
+
end
|
10
|
+
|
11
|
+
def config_data
|
12
|
+
@config_data ||= Dir[CONFIG_PATH].reduce({}) do |memo, file|
|
13
|
+
category = File.basename(file, '.yml')
|
14
|
+
memo[category] = YAML.load File.open file
|
15
|
+
memo
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def get_config(key, env: 'default')
|
22
|
+
keys_with_injected_env = key.sub('.', ".#{env}.").split '.'
|
23
|
+
|
24
|
+
keys_with_injected_env.reduce(config_data) do |memo, i|
|
25
|
+
memo[i] unless memo.nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def app_environment
|
30
|
+
(
|
31
|
+
ENV['CONFIG_ENV'] ||
|
32
|
+
ENV['RAILS_ENV'] ||
|
33
|
+
ENV['RACK_ENV'] ||
|
34
|
+
'development'
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flexible-config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brett Richardson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: growl
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Use environment-specific YAML for configuration while allowing for ENV
|
126
|
+
variables to override
|
127
|
+
email:
|
128
|
+
- brett.richardson.nz@gmail.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- Gemfile
|
134
|
+
- Guardfile
|
135
|
+
- MIT-LICENSE
|
136
|
+
- README.md
|
137
|
+
- lib/flexible-config.rb
|
138
|
+
- lib/flexible_config/builder.rb
|
139
|
+
- lib/flexible_config/not_found.rb
|
140
|
+
- lib/flexible_config/overview.rb
|
141
|
+
- lib/flexible_config/version.rb
|
142
|
+
- lib/flexible_config/wrapped_env.rb
|
143
|
+
- lib/flexible_config/wrapped_yaml.rb
|
144
|
+
- lib/tasks/flexible_config.rake
|
145
|
+
homepage: https://github.com/brett-richardson/flexible-config
|
146
|
+
licenses:
|
147
|
+
- MIT
|
148
|
+
metadata: {}
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 2.5.1
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: Flexible Configuration for Ruby constants
|
169
|
+
test_files: []
|
170
|
+
has_rdoc:
|