ef-config 1.4.1
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/CHANGELOG.md +83 -0
- data/LICENSE.md +26 -0
- data/README.md +404 -0
- data/config.gemspec +51 -0
- data/lib/config.rb +107 -0
- data/lib/config/compatibility.rb +3 -0
- data/lib/config/integrations/heroku.rb +59 -0
- data/lib/config/integrations/rails/engine.rb +9 -0
- data/lib/config/integrations/rails/railtie.rb +38 -0
- data/lib/config/integrations/sinatra.rb +26 -0
- data/lib/config/options.rb +191 -0
- data/lib/config/rack/reloader.rb +15 -0
- data/lib/config/sources/hash_source.rb +16 -0
- data/lib/config/sources/yaml_source.rb +31 -0
- data/lib/config/tasks/heroku.rake +7 -0
- data/lib/config/validation/error.rb +24 -0
- data/lib/config/validation/schema.rb +21 -0
- data/lib/config/validation/validate.rb +19 -0
- data/lib/config/version.rb +3 -0
- data/lib/generators/config/install_generator.rb +32 -0
- data/lib/generators/config/templates/config.rb +45 -0
- data/lib/generators/config/templates/settings.local.yml +0 -0
- data/lib/generators/config/templates/settings.yml +0 -0
- data/lib/generators/config/templates/settings/development.yml +0 -0
- data/lib/generators/config/templates/settings/production.yml +0 -0
- data/lib/generators/config/templates/settings/test.yml +0 -0
- data/spec/app/rails_5/README.md +24 -0
- metadata +334 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Config
|
5
|
+
module Sources
|
6
|
+
class YAMLSource
|
7
|
+
attr_accessor :path, :namespace
|
8
|
+
|
9
|
+
def initialize(path, namespace=nil)
|
10
|
+
@path = path
|
11
|
+
@namespace = namespace
|
12
|
+
end
|
13
|
+
|
14
|
+
# returns a config hash from the YML file
|
15
|
+
def load
|
16
|
+
if @path and File.exist?(@path.to_s)
|
17
|
+
result = YAML.load(ERB.new(IO.read(@path.to_s)).result)
|
18
|
+
end
|
19
|
+
if self.namespace
|
20
|
+
namespaces = self.namespace.split("/")
|
21
|
+
result = namespaces.reverse.inject(result || {}) { |acc, space| { space => acc } }
|
22
|
+
end
|
23
|
+
result || {}
|
24
|
+
rescue Psych::SyntaxError => e
|
25
|
+
raise "YAML syntax error occurred while parsing #{@path}. " \
|
26
|
+
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
27
|
+
"Error: #{e.message}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Config
|
2
|
+
module Validation
|
3
|
+
class Error < StandardError
|
4
|
+
|
5
|
+
def self.format(v_res)
|
6
|
+
flatten_hash(v_res.messages).map do |field, msgs|
|
7
|
+
"#{' ' * 2}#{field}: #{msgs.join('; ')}"
|
8
|
+
end.join('\n')
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.flatten_hash(h, acc={}, pref=[])
|
12
|
+
h.inject(acc) do |a, (k, v)|
|
13
|
+
if v.is_a?(Hash)
|
14
|
+
flatten_hash(v, acc, pref + [k])
|
15
|
+
else
|
16
|
+
acc[(pref + [k]).join('.')] = v
|
17
|
+
acc
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'dry-validation'
|
2
|
+
require 'config/validation/schema'
|
3
|
+
|
4
|
+
module Config
|
5
|
+
module Validation
|
6
|
+
module Schema
|
7
|
+
|
8
|
+
mattr_writer :schema
|
9
|
+
@@schema = nil
|
10
|
+
|
11
|
+
def schema(&block)
|
12
|
+
if block_given?
|
13
|
+
@@schema = Dry::Validation.Schema(&block)
|
14
|
+
else
|
15
|
+
@@schema
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'config/validation/error'
|
2
|
+
|
3
|
+
module Config
|
4
|
+
module Validation
|
5
|
+
module Validate
|
6
|
+
|
7
|
+
def validate!
|
8
|
+
if Config.schema
|
9
|
+
v_res = Config.schema.(self.to_hash)
|
10
|
+
|
11
|
+
unless v_res.success?
|
12
|
+
raise Config::Validation::Error.new("Config validation failed:\n\n#{Config::Validation::Error.format(v_res)}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Config
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < ::Rails::Generators::Base
|
4
|
+
desc "Generates a custom Rails Config initializer file."
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
@_config_source_root ||= File.expand_path("../templates", __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def copy_initializer
|
11
|
+
template "config.rb", "config/initializers/config.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
def copy_settings
|
15
|
+
template "settings.yml", "config/settings.yml"
|
16
|
+
template "settings.local.yml", "config/settings.local.yml"
|
17
|
+
directory "settings", "config/settings"
|
18
|
+
end
|
19
|
+
|
20
|
+
def modify_gitignore
|
21
|
+
create_file '.gitignore' unless File.exists? '.gitignore'
|
22
|
+
|
23
|
+
append_to_file '.gitignore' do
|
24
|
+
"\n" +
|
25
|
+
"config/settings.local.yml\n" +
|
26
|
+
"config/settings/*.local.yml\n" +
|
27
|
+
"config/environments/*.local.yml\n"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
Config.setup do |config|
|
2
|
+
# Name of the constant exposing loaded settings
|
3
|
+
config.const_name = 'Settings'
|
4
|
+
|
5
|
+
# Ability to remove elements of the array set in earlier loaded settings file. For example value: '--'.
|
6
|
+
#
|
7
|
+
# config.knockout_prefix = nil
|
8
|
+
|
9
|
+
# Overwrite arrays found in previously loaded settings file. When set to `false`, arrays will be merged.
|
10
|
+
#
|
11
|
+
# config.overwrite_arrays = true
|
12
|
+
|
13
|
+
# Load environment variables from the `ENV` object and override any settings defined in files.
|
14
|
+
#
|
15
|
+
# config.use_env = false
|
16
|
+
|
17
|
+
# Define ENV variable prefix deciding which variables to load into config.
|
18
|
+
#
|
19
|
+
# config.env_prefix = 'Settings'
|
20
|
+
|
21
|
+
# What string to use as level separator for settings loaded from ENV variables. Default value of '.' works well
|
22
|
+
# with Heroku, but you might want to change it for example for '__' to easy override settings from command line, where
|
23
|
+
# using dots in variable names might not be allowed (eg. Bash).
|
24
|
+
#
|
25
|
+
# config.env_separator = '.'
|
26
|
+
|
27
|
+
# Ability to process variables names:
|
28
|
+
# * nil - no change
|
29
|
+
# * :downcase - convert to lower case
|
30
|
+
#
|
31
|
+
# config.env_converter = :downcase
|
32
|
+
|
33
|
+
# Parse numeric values as integers instead of strings.
|
34
|
+
#
|
35
|
+
# config.env_parse_values = true
|
36
|
+
|
37
|
+
# Validate presence and type of specific config values. Check https://github.com/dry-rb/dry-validation for details.
|
38
|
+
#
|
39
|
+
# config.schema do
|
40
|
+
# required(:name).filled
|
41
|
+
# required(:age).maybe(:int?)
|
42
|
+
# required(:email).filled(format?: EMAIL_REGEX)
|
43
|
+
# end
|
44
|
+
|
45
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
metadata
ADDED
@@ -0,0 +1,334 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ef-config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Hadley
|
8
|
+
- Piotr Kuczynski
|
9
|
+
- Fred Wu
|
10
|
+
- Jacques Crocker
|
11
|
+
autorequire:
|
12
|
+
bindir: bin
|
13
|
+
cert_chain: []
|
14
|
+
date: 2018-12-03 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activesupport
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: deep_merge
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.1.1
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.1.1
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: dry-validation
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - "~>"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 0.10.4
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 0.10.4
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: bundler
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - "~>"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '1.13'
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.13.6
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.13'
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.13.6
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '12.0'
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 12.0.0
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '12.0'
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 12.0.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: appraisal
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '2.1'
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: 2.1.0
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '2.1'
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.1.0
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: rails
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '5.0'
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 5.0.1
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '5.0'
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 5.0.1
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: rspec
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '3.5'
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: 3.5.0
|
148
|
+
type: :development
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '3.5'
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 3.5.0
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rspec-rails
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '3.5'
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: 3.5.2
|
168
|
+
type: :development
|
169
|
+
prerelease: false
|
170
|
+
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - "~>"
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '3.5'
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 3.5.2
|
178
|
+
- !ruby/object:Gem::Dependency
|
179
|
+
name: test-unit
|
180
|
+
requirement: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - "~>"
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '3.2'
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 3.2.1
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '3.2'
|
195
|
+
- - ">="
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 3.2.1
|
198
|
+
- !ruby/object:Gem::Dependency
|
199
|
+
name: sqlite3
|
200
|
+
requirement: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - "~>"
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '1.3'
|
205
|
+
- - ">="
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 1.3.11
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '1.3'
|
215
|
+
- - ">="
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: 1.3.11
|
218
|
+
- !ruby/object:Gem::Dependency
|
219
|
+
name: pry
|
220
|
+
requirement: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0'
|
225
|
+
type: :development
|
226
|
+
prerelease: false
|
227
|
+
version_requirements: !ruby/object:Gem::Requirement
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
- !ruby/object:Gem::Dependency
|
233
|
+
name: mdl
|
234
|
+
requirement: !ruby/object:Gem::Requirement
|
235
|
+
requirements:
|
236
|
+
- - "~>"
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '0.4'
|
239
|
+
- - ">="
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: 0.4.0
|
242
|
+
type: :development
|
243
|
+
prerelease: false
|
244
|
+
version_requirements: !ruby/object:Gem::Requirement
|
245
|
+
requirements:
|
246
|
+
- - "~>"
|
247
|
+
- !ruby/object:Gem::Version
|
248
|
+
version: '0.4'
|
249
|
+
- - ">="
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: 0.4.0
|
252
|
+
- !ruby/object:Gem::Dependency
|
253
|
+
name: rubocop
|
254
|
+
requirement: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - "~>"
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '0.46'
|
259
|
+
- - ">="
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: 0.46.0
|
262
|
+
type: :development
|
263
|
+
prerelease: false
|
264
|
+
version_requirements: !ruby/object:Gem::Requirement
|
265
|
+
requirements:
|
266
|
+
- - "~>"
|
267
|
+
- !ruby/object:Gem::Version
|
268
|
+
version: '0.46'
|
269
|
+
- - ">="
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: 0.46.0
|
272
|
+
description: Everfest fork of config gem
|
273
|
+
email:
|
274
|
+
- hadley@everfest.com
|
275
|
+
executables: []
|
276
|
+
extensions: []
|
277
|
+
extra_rdoc_files:
|
278
|
+
- README.md
|
279
|
+
- CHANGELOG.md
|
280
|
+
- LICENSE.md
|
281
|
+
files:
|
282
|
+
- CHANGELOG.md
|
283
|
+
- LICENSE.md
|
284
|
+
- README.md
|
285
|
+
- config.gemspec
|
286
|
+
- lib/config.rb
|
287
|
+
- lib/config/compatibility.rb
|
288
|
+
- lib/config/integrations/heroku.rb
|
289
|
+
- lib/config/integrations/rails/engine.rb
|
290
|
+
- lib/config/integrations/rails/railtie.rb
|
291
|
+
- lib/config/integrations/sinatra.rb
|
292
|
+
- lib/config/options.rb
|
293
|
+
- lib/config/rack/reloader.rb
|
294
|
+
- lib/config/sources/hash_source.rb
|
295
|
+
- lib/config/sources/yaml_source.rb
|
296
|
+
- lib/config/tasks/heroku.rake
|
297
|
+
- lib/config/validation/error.rb
|
298
|
+
- lib/config/validation/schema.rb
|
299
|
+
- lib/config/validation/validate.rb
|
300
|
+
- lib/config/version.rb
|
301
|
+
- lib/generators/config/install_generator.rb
|
302
|
+
- lib/generators/config/templates/config.rb
|
303
|
+
- lib/generators/config/templates/settings.local.yml
|
304
|
+
- lib/generators/config/templates/settings.yml
|
305
|
+
- lib/generators/config/templates/settings/development.yml
|
306
|
+
- lib/generators/config/templates/settings/production.yml
|
307
|
+
- lib/generators/config/templates/settings/test.yml
|
308
|
+
- spec/app/rails_5/README.md
|
309
|
+
homepage: https://bitbucket.org/everfest/config
|
310
|
+
licenses:
|
311
|
+
- MIT
|
312
|
+
metadata: {}
|
313
|
+
post_install_message:
|
314
|
+
rdoc_options:
|
315
|
+
- "--charset=UTF-8"
|
316
|
+
require_paths:
|
317
|
+
- lib
|
318
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
319
|
+
requirements:
|
320
|
+
- - ">="
|
321
|
+
- !ruby/object:Gem::Version
|
322
|
+
version: 2.0.0
|
323
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
324
|
+
requirements:
|
325
|
+
- - ">="
|
326
|
+
- !ruby/object:Gem::Version
|
327
|
+
version: '0'
|
328
|
+
requirements: []
|
329
|
+
rubyforge_project:
|
330
|
+
rubygems_version: 2.7.6
|
331
|
+
signing_key:
|
332
|
+
specification_version: 4
|
333
|
+
summary: Effortless multi-environment settings in Rails, Sinatra, Pandrino and others
|
334
|
+
test_files: []
|