rails_config 0.5.0.beta1 → 0.99.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Build Status](https://api.travis-ci.org/railsconfig/rails_config.
|
1
|
+
[![Build Status](https://api.travis-ci.org/railsconfig/rails_config.svg?branch=master)](http://travis-ci.org/railsconfig/rails_config)
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/rails_config.svg)](http://badge.fury.io/rb/rails_config)
|
3
|
-
[![Dependency Status](https://gemnasium.com/
|
3
|
+
[![Dependency Status](https://gemnasium.com/railsconfig/rails_config.svg)](https://gemnasium.com/railsconfig/rails_config)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/railsconfig/rails_config/badges/gpa.svg)](https://codeclimate.com/github/railsconfig/rails_config)
|
5
|
+
[![Test Coverage](https://codeclimate.com/github/railsconfig/rails_config/badges/coverage.svg)](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
|