rails_config 0.5.0.beta1 → 0.99.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/.gitignore +14 -0
- data/.ruby-version +1 -0
- data/Gemfile +6 -0
- data/README.md +36 -6
- data/Rakefile +14 -0
- data/gemfiles/rails_3.gemfile +7 -0
- data/gemfiles/rails_4.1.gemfile +7 -0
- data/gemfiles/rails_4.2.gemfile +7 -0
- data/gemfiles/rails_4.gemfile +7 -0
- data/lib/rails_config.rb +0 -62
- data/lib/rails_config/version.rb +1 -1
- data/rails_config.gemspec +27 -0
- metadata +20 -170
- data/CHANGELOG.md +0 -16
- data/lib/generators/rails_config/install_generator.rb +0 -32
- data/lib/generators/rails_config/templates/rails_config.rb +0 -3
- data/lib/generators/rails_config/templates/settings.local.yml +0 -0
- data/lib/generators/rails_config/templates/settings.yml +0 -0
- data/lib/generators/rails_config/templates/settings/development.yml +0 -0
- data/lib/generators/rails_config/templates/settings/production.yml +0 -0
- data/lib/generators/rails_config/templates/settings/test.yml +0 -0
- data/lib/rails_config/engine.rb +0 -5
- data/lib/rails_config/integration/rails.rb +0 -34
- data/lib/rails_config/integration/sinatra.rb +0 -26
- data/lib/rails_config/options.rb +0 -117
- data/lib/rails_config/rack/reloader.rb +0 -15
- data/lib/rails_config/railtie.rb +0 -9
- data/lib/rails_config/sources/yaml_source.rb +0 -26
- data/lib/rails_config/tasks.rb +0 -59
- data/lib/rails_config/tasks/heroku.rake +0 -8
- data/lib/rails_config/vendor/deep_merge.rb +0 -180
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50dc431bc17d3f3444dd0eb593864289d2999da1
|
4
|
+
data.tar.gz: 6257637dc3173d7a9459460063249353edae7eb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00cf5d46576299d40497a7ee1e8c9d1fe3e3a4b993e6f007529d4601195f4129d4f0eecd6289585320453cc2f896630d811814f01b6451b91c005e6ef2ab1c4f
|
7
|
+
data.tar.gz: 38e322f4680d0601acb3001db02d12cb14cf66fb28880ae8023cfcfe8fcab803d312696464b6025a5f086c05010e767f9e70dc707a522275e3a65561199ef4d5
|
data/.gitignore
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.6
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
[](http://travis-ci.org/railsconfig/rails_config)
|
2
2
|
[](http://badge.fury.io/rb/rails_config)
|
3
|
-
[](https://gemnasium.com/railsconfig/rails_config)
|
4
|
+
[](https://codeclimate.com/github/railsconfig/rails_config)
|
5
|
+
[](https://codeclimate.com/github/railsconfig/rails_config/coverage)
|
4
6
|
|
5
7
|
# RailsConfig
|
6
8
|
|
@@ -17,6 +19,7 @@ RailsConfig helps you easily manage environment specific Rails settings in an ea
|
|
17
19
|
|
18
20
|
## Compatibility
|
19
21
|
|
22
|
+
* Ruby 2.x
|
20
23
|
* Rails 3.x and 4.x
|
21
24
|
* Padrino
|
22
25
|
* Sinatra
|
@@ -31,6 +34,25 @@ Add this to your `Gemfile`:
|
|
31
34
|
gem "rails_config"
|
32
35
|
```
|
33
36
|
|
37
|
+
If you want to use Settings before rails application initialization process you can load RailsConfig railtie manually:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
module Appname
|
41
|
+
class Application < Rails::Application
|
42
|
+
|
43
|
+
Bundler.require(*Rails.groups)
|
44
|
+
RailsConfig::Integration::Rails::Railtie.preload
|
45
|
+
|
46
|
+
...
|
47
|
+
|
48
|
+
config.time_zone = Settings.time_zone
|
49
|
+
|
50
|
+
...
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
34
56
|
## Installing on Padrino
|
35
57
|
|
36
58
|
Add this to your `Gemfile`:
|
@@ -174,6 +196,16 @@ Settings.reload!
|
|
174
196
|
|
175
197
|
This will use the given source.yml file and use its settings to overwrite any previous ones.
|
176
198
|
|
199
|
+
On the other hand, you can prepend a YML file to the list of configuration files:
|
200
|
+
|
201
|
+
```ruby
|
202
|
+
Settings.prepend_source!("/path/to/source.yml")
|
203
|
+
Settings.reload!
|
204
|
+
```
|
205
|
+
|
206
|
+
This will do the same as `add_source`, but the given YML file will be loaded first (instead of last) and its settings will be overwritten by any other configuration file.
|
207
|
+
This is especially useful if you want to define defaults.
|
208
|
+
|
177
209
|
One thing I like to do for my Rails projects is provide a local.yml config file that is .gitignored (so its independent per developer). Then I create a new initializer in `config/initializers/add_local_config.rb` with the contents
|
178
210
|
|
179
211
|
```ruby
|
@@ -192,15 +224,13 @@ Embedded Ruby is allowed in the configuration files. See examples below.
|
|
192
224
|
|
193
225
|
Consider the two following config files.
|
194
226
|
|
195
|
-
|
196
|
-
|
227
|
+
* ```#{Rails.root}/config/settings.yml```
|
197
228
|
```yaml
|
198
229
|
size: 1
|
199
230
|
server: google.com
|
200
231
|
```
|
201
232
|
|
202
|
-
|
203
|
-
|
233
|
+
* ```#{Rails.root}/config/environments/development.yml```
|
204
234
|
```yaml
|
205
235
|
size: 2
|
206
236
|
computed: <%= 1 + 2 + 3 %>
|
data/Rakefile
ADDED
data/lib/rails_config.rb
CHANGED
@@ -1,64 +1,2 @@
|
|
1
|
-
require 'active_support/core_ext/module/attribute_accessors'
|
2
|
-
|
3
|
-
require 'rails_config/options'
|
4
|
-
require 'rails_config/version'
|
5
|
-
require 'rails_config/engine' if defined?(::Rails)
|
6
|
-
require 'rails_config/sources/yaml_source'
|
7
|
-
require 'rails_config/vendor/deep_merge' unless defined?(DeepMerge)
|
8
|
-
|
9
1
|
module RailsConfig
|
10
|
-
# ensures the setup only gets run once
|
11
|
-
@@_ran_once = false
|
12
|
-
|
13
|
-
mattr_accessor :const_name, :use_env
|
14
|
-
@@const_name = "Settings"
|
15
|
-
@@use_env = false
|
16
|
-
|
17
|
-
def self.setup
|
18
|
-
yield self if @@_ran_once == false
|
19
|
-
@@_ran_once = true
|
20
|
-
end
|
21
|
-
|
22
|
-
# Create a populated Options instance from a yaml file. If a second yaml file is given, then the sections of that file will overwrite the sections
|
23
|
-
# if the first file if they exist in the first file.
|
24
|
-
def self.load_files(*files)
|
25
|
-
config = Options.new
|
26
|
-
|
27
|
-
# add yaml sources
|
28
|
-
[files].flatten.compact.uniq.each do |file|
|
29
|
-
config.add_source!(file.to_s)
|
30
|
-
end
|
31
|
-
|
32
|
-
config.load!
|
33
|
-
config.load_env! if @@use_env
|
34
|
-
config
|
35
|
-
end
|
36
|
-
|
37
|
-
# Loads and sets the settings constant!
|
38
|
-
def self.load_and_set_settings(*files)
|
39
|
-
Kernel.send(:remove_const, RailsConfig.const_name) if Kernel.const_defined?(RailsConfig.const_name)
|
40
|
-
Kernel.const_set(RailsConfig.const_name, RailsConfig.load_files(files))
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.setting_files(config_root, env)
|
44
|
-
[
|
45
|
-
File.join(config_root, "settings.yml").to_s,
|
46
|
-
File.join(config_root, "settings", "#{env}.yml").to_s,
|
47
|
-
File.join(config_root, "environments", "#{env}.yml").to_s,
|
48
|
-
|
49
|
-
File.join(config_root, "settings.local.yml").to_s,
|
50
|
-
File.join(config_root, "settings", "#{env}.local.yml").to_s,
|
51
|
-
File.join(config_root, "environments", "#{env}.local.yml").to_s
|
52
|
-
].freeze
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.reload!
|
56
|
-
Kernel.const_get(RailsConfig.const_name).reload!
|
57
|
-
end
|
58
2
|
end
|
59
|
-
|
60
|
-
# add rails integration
|
61
|
-
require('rails_config/integration/rails') if defined?(::Rails)
|
62
|
-
|
63
|
-
# add sinatra integration
|
64
|
-
require('rails_config/integration/sinatra') if defined?(::Sinatra)
|
data/lib/rails_config/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require 'rails_config/version'
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "rails_config"
|
9
|
+
s.version = RailsConfig::VERSION
|
10
|
+
s.date = Time.now.strftime '%F'
|
11
|
+
s.authors = ["Jacques Crocker", "Fred Wu", "Piotr Kuczynski"]
|
12
|
+
s.email = ["railsjedi@gmail.com", "ifredwu@gmail.com", "piotr.kuczynski@gmail.com"]
|
13
|
+
s.summary = "Please install the Config gem instead."
|
14
|
+
s.description = "Please install the Config gem instead."
|
15
|
+
s.homepage = "https://github.com/railsconfig/rails_config"
|
16
|
+
s.license = "MIT"
|
17
|
+
s.extra_rdoc_files = ["README.md"]
|
18
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split($/)
|
21
|
+
|
22
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
|
26
|
+
s.add_dependency "config", ">= 1.0.0.beta1"
|
27
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.99.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacques Crocker
|
@@ -10,164 +10,23 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2015-08-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: config
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.0.0.beta1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
29
|
-
|
30
|
-
name: bundler
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '1.5'
|
36
|
-
type: :development
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '1.5'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: rake
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0'
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '0'
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: rdoc
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - "~>"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '3.4'
|
64
|
-
type: :development
|
65
|
-
prerelease: false
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '3.4'
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: rails
|
73
|
-
requirement: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - "~>"
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 3.2.17
|
78
|
-
type: :development
|
79
|
-
prerelease: false
|
80
|
-
version_requirements: !ruby/object:Gem::Requirement
|
81
|
-
requirements:
|
82
|
-
- - "~>"
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version: 3.2.17
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: rspec
|
87
|
-
requirement: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
- - "~>"
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '2.14'
|
92
|
-
type: :development
|
93
|
-
prerelease: false
|
94
|
-
version_requirements: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - "~>"
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: '2.14'
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: rspec-rails
|
101
|
-
requirement: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- - "~>"
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '2.14'
|
106
|
-
type: :development
|
107
|
-
prerelease: false
|
108
|
-
version_requirements: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
110
|
-
- - "~>"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '2.14'
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: sqlite3
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '0'
|
120
|
-
type: :development
|
121
|
-
prerelease: false
|
122
|
-
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
requirements:
|
124
|
-
- - ">="
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: rubocop
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
130
|
-
requirements:
|
131
|
-
- - ">="
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
requirements:
|
138
|
-
- - ">="
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: '0'
|
141
|
-
- !ruby/object:Gem::Dependency
|
142
|
-
name: appraisal
|
143
|
-
requirement: !ruby/object:Gem::Requirement
|
144
|
-
requirements:
|
145
|
-
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '0'
|
148
|
-
type: :development
|
149
|
-
prerelease: false
|
150
|
-
version_requirements: !ruby/object:Gem::Requirement
|
151
|
-
requirements:
|
152
|
-
- - ">="
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
version: '0'
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
|
-
name: gem-release
|
157
|
-
requirement: !ruby/object:Gem::Requirement
|
158
|
-
requirements:
|
159
|
-
- - ">="
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version: '0'
|
162
|
-
type: :development
|
163
|
-
prerelease: false
|
164
|
-
version_requirements: !ruby/object:Gem::Requirement
|
165
|
-
requirements:
|
166
|
-
- - ">="
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '0'
|
169
|
-
description: Easy to use Settings helper that loads its data in from config/settings.yml.
|
170
|
-
Handles adding multiple sources, and easy reloading.
|
28
|
+
version: 1.0.0.beta1
|
29
|
+
description: Please install the Config gem instead.
|
171
30
|
email:
|
172
31
|
- railsjedi@gmail.com
|
173
32
|
- ifredwu@gmail.com
|
@@ -177,29 +36,20 @@ extensions: []
|
|
177
36
|
extra_rdoc_files:
|
178
37
|
- README.md
|
179
38
|
files:
|
180
|
-
-
|
39
|
+
- ".gitignore"
|
40
|
+
- ".ruby-version"
|
41
|
+
- Gemfile
|
181
42
|
- LICENSE.md
|
182
43
|
- README.md
|
183
|
-
-
|
184
|
-
-
|
185
|
-
-
|
186
|
-
-
|
187
|
-
-
|
188
|
-
- lib/generators/rails_config/templates/settings/production.yml
|
189
|
-
- lib/generators/rails_config/templates/settings/test.yml
|
44
|
+
- Rakefile
|
45
|
+
- gemfiles/rails_3.gemfile
|
46
|
+
- gemfiles/rails_4.1.gemfile
|
47
|
+
- gemfiles/rails_4.2.gemfile
|
48
|
+
- gemfiles/rails_4.gemfile
|
190
49
|
- lib/rails_config.rb
|
191
|
-
- lib/rails_config/engine.rb
|
192
|
-
- lib/rails_config/integration/rails.rb
|
193
|
-
- lib/rails_config/integration/sinatra.rb
|
194
|
-
- lib/rails_config/options.rb
|
195
|
-
- lib/rails_config/rack/reloader.rb
|
196
|
-
- lib/rails_config/railtie.rb
|
197
|
-
- lib/rails_config/sources/yaml_source.rb
|
198
|
-
- lib/rails_config/tasks.rb
|
199
|
-
- lib/rails_config/tasks/heroku.rake
|
200
|
-
- lib/rails_config/vendor/deep_merge.rb
|
201
50
|
- lib/rails_config/version.rb
|
202
|
-
|
51
|
+
- rails_config.gemspec
|
52
|
+
homepage: https://github.com/railsconfig/rails_config
|
203
53
|
licenses:
|
204
54
|
- MIT
|
205
55
|
metadata: {}
|
@@ -215,13 +65,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
215
65
|
version: '0'
|
216
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
67
|
requirements:
|
218
|
-
- - "
|
68
|
+
- - ">="
|
219
69
|
- !ruby/object:Gem::Version
|
220
|
-
version:
|
70
|
+
version: '0'
|
221
71
|
requirements: []
|
222
72
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.4.
|
73
|
+
rubygems_version: 2.4.5
|
224
74
|
signing_key:
|
225
75
|
specification_version: 4
|
226
|
-
summary:
|
76
|
+
summary: Please install the Config gem instead.
|
227
77
|
test_files: []
|
data/CHANGELOG.md
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# 0.4.2
|
2
|
-
* ability to specify the app name when calling the Heroku rake task ([#75](https://github.com/railsjedi/rails_config/issues/75))
|
3
|
-
|
4
|
-
# 0.4.1
|
5
|
-
|
6
|
-
* fixed compatibility with Rails 4.1 ([#72](https://github.com/railsjedi/rails_config/issues/72))
|
7
|
-
* testing suite verifies compatibility with Rails 3.2, 4.0 and 4.1
|
8
|
-
|
9
|
-
# 0.4.0
|
10
|
-
|
11
|
-
* compatibility with Heroku ([#64](https://github.com/railsjedi/rails_config/issues/64))
|
12
|
-
|
13
|
-
# 0.3.4
|
14
|
-
|
15
|
-
* expose Settings in application.rb, so you don't have to duplicate configuration for each environment file ([#59](https://github.com/railsjedi/rails_config/issues/59))
|
16
|
-
* adding support for Rails 4.1.0.rc ([#70](https://github.com/railsjedi/rails_config/issues/70))
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module RailsConfig
|
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
|
-
@_rails_config_source_root ||= File.expand_path("../templates", __FILE__)
|
8
|
-
end
|
9
|
-
|
10
|
-
def copy_initializer
|
11
|
-
template "rails_config.rb", "config/initializers/rails_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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/rails_config/engine.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module RailsConfig
|
2
|
-
module Integration
|
3
|
-
module Rails
|
4
|
-
if defined?(::Rails::Railtie)
|
5
|
-
class Railtie < ::Rails::Railtie
|
6
|
-
# Load rake tasks (eg. Heroku)
|
7
|
-
rake_tasks do
|
8
|
-
Dir[File.join(File.dirname(__FILE__),'../tasks/*.rake')].each { |f| load f }
|
9
|
-
end
|
10
|
-
|
11
|
-
ActiveSupport.on_load :before_configuration, :yield => true do
|
12
|
-
# Manually load the custom initializer before everything else
|
13
|
-
initializer = ::Rails.root.join("config", "initializers", "rails_config.rb")
|
14
|
-
require initializer if File.exist?(initializer)
|
15
|
-
|
16
|
-
# Parse the settings before any of the initializers
|
17
|
-
RailsConfig.load_and_set_settings(
|
18
|
-
RailsConfig.setting_files(::Rails.root.join("config"), ::Rails.env)
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
# Rails Dev environment should reload the Settings on every request
|
23
|
-
if ::Rails.env.development?
|
24
|
-
initializer :rails_config_reload_on_development do
|
25
|
-
ActionController::Base.class_eval do
|
26
|
-
prepend_before_filter { ::RailsConfig.reload! }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require "rails_config/rack/reloader"
|
2
|
-
|
3
|
-
module RailsConfig
|
4
|
-
# provide helper to register within your Sinatra app
|
5
|
-
#
|
6
|
-
# set :root, File.dirname(__FILE__)
|
7
|
-
# register RailsConfig
|
8
|
-
#
|
9
|
-
def self.registered(app)
|
10
|
-
app.configure do |inner_app|
|
11
|
-
|
12
|
-
env = inner_app.environment || ENV["RACK_ENV"]
|
13
|
-
root = inner_app.root
|
14
|
-
|
15
|
-
# use Padrino settings if applicable
|
16
|
-
if defined?(Padrino)
|
17
|
-
env = Padrino.env
|
18
|
-
root = Padrino.root
|
19
|
-
end
|
20
|
-
|
21
|
-
RailsConfig.load_and_set_settings(RailsConfig.setting_files(File.join(root, 'config'), env))
|
22
|
-
|
23
|
-
inner_app.use(::RailsConfig::Rack::Reloader) if inner_app.development?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/lib/rails_config/options.rb
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
require 'ostruct'
|
2
|
-
module RailsConfig
|
3
|
-
class Options < OpenStruct
|
4
|
-
include Enumerable
|
5
|
-
|
6
|
-
def keys() marshal_dump.keys; end
|
7
|
-
def empty?() marshal_dump.empty?; end
|
8
|
-
|
9
|
-
def add_source!(source)
|
10
|
-
# handle yaml file paths
|
11
|
-
source = (Sources::YAMLSource.new(source)) if source.is_a?(String)
|
12
|
-
|
13
|
-
@config_sources ||= []
|
14
|
-
@config_sources << source
|
15
|
-
end
|
16
|
-
|
17
|
-
def reload_env!
|
18
|
-
return self if ENV.nil? || ENV.empty?
|
19
|
-
conf = Hash.new
|
20
|
-
ENV.each do |key, value|
|
21
|
-
next unless key.to_s.index(RailsConfig.const_name) == 0
|
22
|
-
hash = value
|
23
|
-
key.to_s.split('.').reverse.each do |element|
|
24
|
-
hash = {element => hash}
|
25
|
-
end
|
26
|
-
DeepMerge.deep_merge!(hash, conf, :preserve_unmergeables => false)
|
27
|
-
end
|
28
|
-
|
29
|
-
merge!(conf[RailsConfig.const_name] || {})
|
30
|
-
end
|
31
|
-
|
32
|
-
alias :load_env! :reload_env!
|
33
|
-
|
34
|
-
# look through all our sources and rebuild the configuration
|
35
|
-
def reload!
|
36
|
-
conf = {}
|
37
|
-
@config_sources.each do |source|
|
38
|
-
source_conf = source.load
|
39
|
-
|
40
|
-
if conf.empty?
|
41
|
-
conf = source_conf
|
42
|
-
else
|
43
|
-
DeepMerge.deep_merge!(source_conf, conf, :preserve_unmergeables => false)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# swap out the contents of the OStruct with a hash (need to recursively convert)
|
48
|
-
marshal_load(__convert(conf).marshal_dump)
|
49
|
-
|
50
|
-
reload_env! if RailsConfig.use_env
|
51
|
-
|
52
|
-
return self
|
53
|
-
end
|
54
|
-
|
55
|
-
alias :load! :reload!
|
56
|
-
|
57
|
-
def reload_from_files(*files)
|
58
|
-
RailsConfig.load_and_set_settings(files)
|
59
|
-
reload!
|
60
|
-
end
|
61
|
-
|
62
|
-
def to_hash
|
63
|
-
result = {}
|
64
|
-
marshal_dump.each do |k, v|
|
65
|
-
result[k] = v.instance_of?(RailsConfig::Options) ? v.to_hash : v
|
66
|
-
end
|
67
|
-
result
|
68
|
-
end
|
69
|
-
|
70
|
-
def each(*args, &block)
|
71
|
-
marshal_dump.each(*args, &block)
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_json(*args)
|
75
|
-
require "json" unless defined?(JSON)
|
76
|
-
to_hash.to_json(*args)
|
77
|
-
end
|
78
|
-
|
79
|
-
def merge!(hash)
|
80
|
-
current = to_hash
|
81
|
-
DeepMerge.deep_merge!(hash.dup, current)
|
82
|
-
marshal_load(__convert(current).marshal_dump)
|
83
|
-
self
|
84
|
-
end
|
85
|
-
|
86
|
-
# An alternative mechanism for property access.
|
87
|
-
# This let's you do foo['bar'] along with foo.bar.
|
88
|
-
def [](param)
|
89
|
-
send("#{param}")
|
90
|
-
end
|
91
|
-
|
92
|
-
def []=(param, value)
|
93
|
-
send("#{param}=", value)
|
94
|
-
end
|
95
|
-
|
96
|
-
protected
|
97
|
-
|
98
|
-
# Recursively converts Hashes to Options (including Hashes inside Arrays)
|
99
|
-
def __convert(h) #:nodoc:
|
100
|
-
s = self.class.new
|
101
|
-
|
102
|
-
h.each do |k, v|
|
103
|
-
k = k.to_s if !k.respond_to?(:to_sym) && k.respond_to?(:to_s)
|
104
|
-
s.new_ostruct_member(k)
|
105
|
-
|
106
|
-
if v.is_a?(Hash)
|
107
|
-
v = v["type"] == "hash" ? v["contents"] : __convert(v)
|
108
|
-
elsif v.is_a?(Array)
|
109
|
-
v = v.collect { |e| e.instance_of?(Hash) ? __convert(e) : e }
|
110
|
-
end
|
111
|
-
|
112
|
-
s.send("#{k}=".to_sym, v)
|
113
|
-
end
|
114
|
-
s
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module RailsConfig
|
2
|
-
module Rack
|
3
|
-
# Rack middleware the reloads RailsConfig on every request (only use in dev mode)
|
4
|
-
class Reloader
|
5
|
-
def initialize(app)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
RailsConfig.reload!
|
11
|
-
@app.call(env)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/lib/rails_config/railtie.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'erb'
|
3
|
-
|
4
|
-
module RailsConfig
|
5
|
-
module Sources
|
6
|
-
class YAMLSource
|
7
|
-
attr_accessor :path
|
8
|
-
|
9
|
-
def initialize(path)
|
10
|
-
@path = path
|
11
|
-
end
|
12
|
-
|
13
|
-
# returns a config hash from the YML file
|
14
|
-
def load
|
15
|
-
if @path and File.exist?(@path.to_s)
|
16
|
-
result = YAML.load(ERB.new(IO.read(@path.to_s)).result)
|
17
|
-
end
|
18
|
-
result || {}
|
19
|
-
rescue Psych::SyntaxError => e
|
20
|
-
raise "YAML syntax error occurred while parsing #{@path}. " \
|
21
|
-
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
22
|
-
"Error: #{e.message}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/lib/rails_config/tasks.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require "bundler"
|
2
|
-
|
3
|
-
module RailsConfig
|
4
|
-
module Tasks
|
5
|
-
class Heroku < Struct.new(:app)
|
6
|
-
def invoke
|
7
|
-
puts 'Setting vars...'
|
8
|
-
heroku_command = "config:set #{vars}"
|
9
|
-
heroku(heroku_command)
|
10
|
-
puts 'Vars set:'
|
11
|
-
puts heroku_command
|
12
|
-
end
|
13
|
-
|
14
|
-
def vars
|
15
|
-
# Load only local options to Heroku
|
16
|
-
RailsConfig.load_and_set_settings(
|
17
|
-
Rails.root.join("config", "settings.local.yml").to_s,
|
18
|
-
Rails.root.join("config", "settings", "#{environment}.local.yml").to_s,
|
19
|
-
Rails.root.join("config", "environments", "#{environment}.local.yml").to_s
|
20
|
-
)
|
21
|
-
|
22
|
-
out = ''
|
23
|
-
dotted_hash = to_dotted_hash Kernel.const_get(RailsConfig.const_name).to_hash, {}, RailsConfig.const_name
|
24
|
-
dotted_hash.each {|key, value| out += " #{key}=#{value} "}
|
25
|
-
out
|
26
|
-
end
|
27
|
-
|
28
|
-
def environment
|
29
|
-
heroku("run 'echo $RAILS_ENV'").chomp[/(\w+)\z/]
|
30
|
-
end
|
31
|
-
|
32
|
-
def heroku(command)
|
33
|
-
with_app = app ? " --app #{app}" : ""
|
34
|
-
`heroku #{command}#{with_app}`
|
35
|
-
end
|
36
|
-
|
37
|
-
def `(command)
|
38
|
-
Bundler.with_clean_env { super }
|
39
|
-
end
|
40
|
-
|
41
|
-
def to_dotted_hash(source, target = {}, namespace = nil)
|
42
|
-
prefix = "#{namespace}." if namespace
|
43
|
-
case source
|
44
|
-
when Hash
|
45
|
-
source.each do |key, value|
|
46
|
-
to_dotted_hash(value, target, "#{prefix}#{key}")
|
47
|
-
end
|
48
|
-
when Array
|
49
|
-
source.each_with_index do |value, index|
|
50
|
-
to_dotted_hash(value, target, "#{prefix}#{index}")
|
51
|
-
end
|
52
|
-
else
|
53
|
-
target[namespace] = source
|
54
|
-
end
|
55
|
-
target
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,180 +0,0 @@
|
|
1
|
-
module DeepMerge
|
2
|
-
class InvalidParameter < StandardError; end
|
3
|
-
|
4
|
-
DEFAULT_FIELD_KNOCKOUT_PREFIX = '--'
|
5
|
-
|
6
|
-
# Deep Merge core documentation.
|
7
|
-
# deep_merge! method permits merging of arbitrary child elements. The two top level
|
8
|
-
# elements must be hashes. These hashes can contain unlimited (to stack limit) levels
|
9
|
-
# of child elements. These child elements to not have to be of the same types.
|
10
|
-
# Where child elements are of the same type, deep_merge will attempt to merge them together.
|
11
|
-
# Where child elements are not of the same type, deep_merge will skip or optionally overwrite
|
12
|
-
# the destination element with the contents of the source element at that level.
|
13
|
-
# So if you have two hashes like this:
|
14
|
-
# source = {:x => [1,2,3], :y => 2}
|
15
|
-
# dest = {:x => [4,5,'6'], :y => [7,8,9]}
|
16
|
-
# dest.deep_merge!(source)
|
17
|
-
# Results: {:x => [1,2,3,4,5,'6'], :y => 2}
|
18
|
-
# By default, "deep_merge!" will overwrite any unmergeables and merge everything else.
|
19
|
-
# To avoid this, use "deep_merge" (no bang/exclamation mark)
|
20
|
-
#
|
21
|
-
# Options:
|
22
|
-
# Options are specified in the last parameter passed, which should be in hash format:
|
23
|
-
# hash.deep_merge!({:x => [1,2]}, {:knockout_prefix => '--'})
|
24
|
-
# :preserve_unmergeables DEFAULT: false
|
25
|
-
# Set to true to skip any unmergeable elements from source
|
26
|
-
# :knockout_prefix DEFAULT: nil
|
27
|
-
# Set to string value to signify prefix which deletes elements from existing element
|
28
|
-
# :sort_merged_arrays DEFAULT: false
|
29
|
-
# Set to true to sort all arrays that are merged together
|
30
|
-
# :unpack_arrays DEFAULT: nil
|
31
|
-
# Set to string value to run "Array::join" then "String::split" against all arrays
|
32
|
-
# :merge_debug DEFAULT: false
|
33
|
-
# Set to true to get console output of merge process for debugging
|
34
|
-
#
|
35
|
-
# Selected Options Details:
|
36
|
-
# :knockout_prefix => The purpose of this is to provide a way to remove elements
|
37
|
-
# from existing Hash by specifying them in a special way in incoming hash
|
38
|
-
# source = {:x => ['--1', '2']}
|
39
|
-
# dest = {:x => ['1', '3']}
|
40
|
-
# dest.ko_deep_merge!(source)
|
41
|
-
# Results: {:x => ['2','3']}
|
42
|
-
# Additionally, if the knockout_prefix is passed alone as a string, it will cause
|
43
|
-
# the entire element to be removed:
|
44
|
-
# source = {:x => '--'}
|
45
|
-
# dest = {:x => [1,2,3]}
|
46
|
-
# dest.ko_deep_merge!(source)
|
47
|
-
# Results: {:x => ""}
|
48
|
-
# :unpack_arrays => The purpose of this is to permit compound elements to be passed
|
49
|
-
# in as strings and to be converted into discrete array elements
|
50
|
-
# irsource = {:x => ['1,2,3', '4']}
|
51
|
-
# dest = {:x => ['5','6','7,8']}
|
52
|
-
# dest.deep_merge!(source, {:unpack_arrays => ','})
|
53
|
-
# Results: {:x => ['1','2','3','4','5','6','7','8'}
|
54
|
-
# Why: If receiving data from an HTML form, this makes it easy for a checkbox
|
55
|
-
# to pass multiple values from within a single HTML element
|
56
|
-
#
|
57
|
-
# There are many tests for this library - and you can learn more about the features
|
58
|
-
# and usages of deep_merge! by just browsing the test examples
|
59
|
-
def DeepMerge.deep_merge!(source, dest, options = {})
|
60
|
-
# turn on this line for stdout debugging text
|
61
|
-
merge_debug = options[:merge_debug] || false
|
62
|
-
overwrite_unmergeable = !options[:preserve_unmergeables]
|
63
|
-
knockout_prefix = options[:knockout_prefix] || nil
|
64
|
-
if knockout_prefix == ""; raise InvalidParameter, "knockout_prefix cannot be an empty string in deep_merge!"; end
|
65
|
-
if knockout_prefix && !overwrite_unmergeable; raise InvalidParameter, "overwrite_unmergeable must be true if knockout_prefix is specified in deep_merge!"; end
|
66
|
-
# if present: we will split and join arrays on this char before merging
|
67
|
-
array_split_char = options[:unpack_arrays] || false
|
68
|
-
# request that we sort together any arrays when they are merged
|
69
|
-
sort_merged_arrays = options[:sort_merged_arrays] || false
|
70
|
-
di = options[:debug_indent] || ''
|
71
|
-
# do nothing if source is nil
|
72
|
-
if source.nil? || (!source.is_a?(FalseClass) && source.respond_to?(:blank?) && source.blank?); return dest; end
|
73
|
-
# if dest doesn't exist, then simply copy source to it
|
74
|
-
if dest.nil? && overwrite_unmergeable; dest = source; return dest; end
|
75
|
-
|
76
|
-
puts "#{di}Source class: #{source.class.inspect} :: Dest class: #{dest.class.inspect}" if merge_debug
|
77
|
-
if source.kind_of?(Hash)
|
78
|
-
puts "#{di}Hashes: #{source.inspect} :: #{dest.inspect}" if merge_debug
|
79
|
-
source.each do |src_key, src_value|
|
80
|
-
if dest.kind_of?(Hash)
|
81
|
-
puts "#{di} looping: #{src_key.inspect} => #{src_value.inspect} :: #{dest.inspect}" if merge_debug
|
82
|
-
if !dest[src_key].nil?
|
83
|
-
puts "#{di} ==>merging: #{src_key.inspect} => #{src_value.inspect} :: #{dest[src_key].inspect}" if merge_debug
|
84
|
-
dest[src_key] = deep_merge!(src_value, dest[src_key], options.merge(:debug_indent => di + ' '))
|
85
|
-
else # dest[src_key] doesn't exist so we want to create and overwrite it (but we do this via deep_merge!)
|
86
|
-
puts "#{di} ==>merging over: #{src_key.inspect} => #{src_value.inspect}" if merge_debug
|
87
|
-
# note: we rescue here b/c some classes respond to "dup" but don't implement it (Numeric, TrueClass, FalseClass, NilClass among maybe others)
|
88
|
-
begin
|
89
|
-
src_dup = src_value.dup # we dup src_value if possible because we're going to merge into it (since dest is empty)
|
90
|
-
rescue TypeError
|
91
|
-
src_dup = src_value
|
92
|
-
end
|
93
|
-
dest[src_key] = deep_merge!(src_value, src_dup, options.merge(:debug_indent => di + ' '))
|
94
|
-
end
|
95
|
-
else # dest isn't a hash, so we overwrite it completely (if permitted)
|
96
|
-
if overwrite_unmergeable
|
97
|
-
puts "#{di} overwriting dest: #{src_key.inspect} => #{src_value.inspect} -over-> #{dest.inspect}" if merge_debug
|
98
|
-
dest = overwrite_unmergeables(source, dest, options)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
elsif source.kind_of?(Array)
|
103
|
-
puts "#{di}Arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
|
104
|
-
# if we are instructed, join/split any source arrays before processing
|
105
|
-
if array_split_char
|
106
|
-
puts "#{di} split/join on source: #{source.inspect}" if merge_debug
|
107
|
-
source = source.join(array_split_char).split(array_split_char)
|
108
|
-
if dest.kind_of?(Array); dest = dest.join(array_split_char).split(array_split_char); end
|
109
|
-
end
|
110
|
-
# if there's a naked knockout_prefix in source, that means we are to truncate dest
|
111
|
-
if source.index(knockout_prefix); dest = clear_or_nil(dest); source.delete(knockout_prefix); end
|
112
|
-
if dest.kind_of?(Array)
|
113
|
-
if knockout_prefix
|
114
|
-
print "#{di} knocking out: " if merge_debug
|
115
|
-
# remove knockout prefix items from both source and dest
|
116
|
-
source.delete_if do |ko_item|
|
117
|
-
retval = false
|
118
|
-
item = ko_item.respond_to?(:gsub) ? ko_item.gsub(%r{^#{knockout_prefix}}, "") : ko_item
|
119
|
-
if item != ko_item
|
120
|
-
print "#{ko_item} - " if merge_debug
|
121
|
-
dest.delete(item)
|
122
|
-
dest.delete(ko_item)
|
123
|
-
retval = true
|
124
|
-
end
|
125
|
-
retval
|
126
|
-
end
|
127
|
-
puts if merge_debug
|
128
|
-
end
|
129
|
-
puts "#{di} merging arrays: #{source.inspect} :: #{dest.inspect}" if merge_debug
|
130
|
-
dest = dest | source
|
131
|
-
if sort_merged_arrays; dest.sort!; end
|
132
|
-
elsif overwrite_unmergeable
|
133
|
-
puts "#{di} overwriting dest: #{source.inspect} -over-> #{dest.inspect}" if merge_debug
|
134
|
-
dest = overwrite_unmergeables(source, dest, options)
|
135
|
-
end
|
136
|
-
else # src_hash is not an array or hash, so we'll have to overwrite dest
|
137
|
-
puts "#{di}Others: #{source.inspect} :: #{dest.inspect}" if merge_debug
|
138
|
-
dest = overwrite_unmergeables(source, dest, options)
|
139
|
-
end
|
140
|
-
puts "#{di}Returning #{dest.inspect}" if merge_debug
|
141
|
-
dest
|
142
|
-
end # deep_merge!
|
143
|
-
|
144
|
-
# allows deep_merge! to uniformly handle overwriting of unmergeable entities
|
145
|
-
def DeepMerge::overwrite_unmergeables(source, dest, options)
|
146
|
-
merge_debug = options[:merge_debug] || false
|
147
|
-
overwrite_unmergeable = !options[:preserve_unmergeables]
|
148
|
-
knockout_prefix = options[:knockout_prefix] || false
|
149
|
-
di = options[:debug_indent] || ''
|
150
|
-
if knockout_prefix && overwrite_unmergeable
|
151
|
-
if source.kind_of?(String) # remove knockout string from source before overwriting dest
|
152
|
-
src_tmp = source.gsub(%r{^#{knockout_prefix}},"")
|
153
|
-
elsif source.kind_of?(Array) # remove all knockout elements before overwriting dest
|
154
|
-
src_tmp = source.delete_if {|ko_item| ko_item.kind_of?(String) && ko_item.match(%r{^#{knockout_prefix}}) }
|
155
|
-
else
|
156
|
-
src_tmp = source
|
157
|
-
end
|
158
|
-
if src_tmp == source # if we didn't find a knockout_prefix then we just overwrite dest
|
159
|
-
puts "#{di}#{src_tmp.inspect} -over-> #{dest.inspect}" if merge_debug
|
160
|
-
dest = src_tmp
|
161
|
-
else # if we do find a knockout_prefix, then we just delete dest
|
162
|
-
puts "#{di}\"\" -over-> #{dest.inspect}" if merge_debug
|
163
|
-
dest = ""
|
164
|
-
end
|
165
|
-
elsif overwrite_unmergeable
|
166
|
-
dest = source
|
167
|
-
end
|
168
|
-
dest
|
169
|
-
end
|
170
|
-
|
171
|
-
def DeepMerge::clear_or_nil(obj)
|
172
|
-
if obj.respond_to?(:clear)
|
173
|
-
obj.clear
|
174
|
-
else
|
175
|
-
obj = nil
|
176
|
-
end
|
177
|
-
obj
|
178
|
-
end
|
179
|
-
|
180
|
-
end # module DeepMerge
|