aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2014-08-19 19:41:15 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2014-08-19 19:41:15 -0300
commit43073b393d234acd094ac7c220163f4e419d11f5 (patch)
tree0d78982dfb1b93f929cc186c951f775a494af621
parent867631f9cfa6d639baacc09aac76e68819d5501f (diff)
downloadrails-43073b393d234acd094ac7c220163f4e419d11f5.tar.gz
rails-43073b393d234acd094ac7c220163f4e419d11f5.tar.bz2
rails-43073b393d234acd094ac7c220163f4e419d11f5.zip
Revert "Improve custom configuration"
This reverts commit de4891344ccc074f6d5693f4fac6ad610584e336. Conflicts: railties/lib/rails/railtie/configuration.rb It added regression. Will be back after the beta
-rw-r--r--guides/source/4_2_release_notes.md18
-rw-r--r--guides/source/configuring.md16
-rw-r--r--railties/CHANGELOG.md16
-rw-r--r--railties/lib/rails/application/configuration.rb14
-rw-r--r--railties/lib/rails/railtie/configuration.rb38
-rw-r--r--railties/test/application/configuration/base_test.rb6
-rw-r--r--railties/test/application/configuration/custom_test.rb81
-rw-r--r--railties/test/railties/engine_test.rb2
8 files changed, 46 insertions, 145 deletions
diff --git a/guides/source/4_2_release_notes.md b/guides/source/4_2_release_notes.md
index b90e5025e2..f710b8bac9 100644
--- a/guides/source/4_2_release_notes.md
+++ b/guides/source/4_2_release_notes.md
@@ -78,24 +78,22 @@ Please refer to the [Changelog][railties] for detailed changes.
* Introduced an `after_bundle` callback for use in Rails templates.
([Pull Request](https://github.com/rails/rails/pull/16359))
-* Custom configuration options can be chained:
+* Introduced the `x` namespace for defining custom configuration options:
```ruby
# config/environments/production.rb
- config.payment_processing.schedule = :daily
- config.payment_processing.retries = 3
- config.resque = { timeout: 60, inline_jobs: :always }
- config.super_debugger = true
+ config.x.payment_processing.schedule = :daily
+ config.x.payment_processing.retries = 3
+ config.x.super_debugger = true
```
These options are then available through the configuration object:
```ruby
- Rails.configuration.payment_processing.schedule # => :daily
- Rails.configuration.payment_processing.retries # => 3
- Rails.configuration.resque.timeout # => 60
- Rails.configuration.resque.inline_jobs # => :always
- Rails.configuration.super_debugger # => true
+ Rails.configuration.x.payment_processing.schedule # => :daily
+ Rails.configuration.x.payment_processing.retries # => 3
+ Rails.configuration.x.super_debugger # => true
+ Rails.configuration.x.super_debugger.not_set # => nil
```
([Commit](https://github.com/rails/rails/commit/611849772dd66c2e4d005dcfe153f7ce79a8a7db))
diff --git a/guides/source/configuring.md b/guides/source/configuring.md
index 6922dd681a..801cef5ca6 100644
--- a/guides/source/configuring.md
+++ b/guides/source/configuring.md
@@ -1006,18 +1006,16 @@ Custom configuration
You can configure your own code through the Rails configuration object with custom configuration. It works like this:
```ruby
- config.payment_processing.schedule = :daily
- config.payment_processing.retries = 3
- config.resque = { timeout: 60, inline_jobs: :always }
- config.super_debugger = true
+ config.x.payment_processing.schedule = :daily
+ config.x.payment_processing.retries = 3
+ config.x.super_debugger = true
```
These configuration points are then available through the configuration object:
```ruby
- Rails.configuration.payment_processing.schedule # => :daily
- Rails.configuration.payment_processing.retries # => 3
- Rails.configuration.resque.timeout # => 60
- Rails.configuration.resque.inline_jobs # => :always
- Rails.configuration.super_debugger # => true
+ Rails.configuration.x.payment_processing.schedule # => :daily
+ Rails.configuration.x.payment_processing.retries # => 3
+ Rails.configuration.x.super_debugger # => true
+ Rails.configuration.x.super_debugger.not_set # => nil
```
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index fdc6d1806e..9f3c3ccdf5 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -20,18 +20,16 @@
configure your own code through the Rails configuration object with custom configuration:
# config/environments/production.rb
- config.payment_processing.schedule = :daily
- config.payment_processing.retries = 3
- config.resque = { timeout: 60, inline_jobs: :always }
- config.super_debugger = true
+ config.x.payment_processing.schedule = :daily
+ config.x.payment_processing.retries = 3
+ config.x.super_debugger = true
These configuration points are then available through the configuration object:
- Rails.configuration.payment_processing.schedule # => :daily
- Rails.configuration.payment_processing.retries # => 3
- Rails.configuration.resque.timeout # => 60
- Rails.configuration.resque.inline_jobs # => :always
- Rails.configuration.super_debugger # => true
+ Rails.configuration.x.payment_processing.schedule # => :daily
+ Rails.configuration.x.payment_processing.retries # => 3
+ Rails.configuration.x.super_debugger # => true
+ Rails.configuration.x.super_debugger.not_set # => nil
*DHH*
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 5e8f4de847..782bc4b0f1 100644
--- a/railties/lib/rails/application/configuration.rb
+++ b/railties/lib/rails/application/configuration.rb
@@ -13,7 +13,7 @@ module Rails
:railties_order, :relative_url_root, :secret_key_base, :secret_token,
:serve_static_assets, :ssl_options, :static_cache_control, :session_options,
:time_zone, :reload_classes_only_on_change,
- :beginning_of_week, :filter_redirect
+ :beginning_of_week, :filter_redirect, :x
attr_writer :log_level
attr_reader :encoding
@@ -48,6 +48,7 @@ module Rails
@eager_load = nil
@secret_token = nil
@secret_key_base = nil
+ @x = Custom.new
@assets = ActiveSupport::OrderedOptions.new
@assets.enabled = true
@@ -154,6 +155,17 @@ module Rails
def annotations
SourceAnnotationExtractor::Annotation
end
+
+ private
+ class Custom
+ def initialize
+ @configurations = Hash.new
+ end
+
+ def method_missing(method, *args)
+ @configurations[method] ||= ActiveSupport::OrderedOptions.new
+ end
+ end
end
end
end
diff --git a/railties/lib/rails/railtie/configuration.rb b/railties/lib/rails/railtie/configuration.rb
index c15cc1a144..eb3b2d8ef4 100644
--- a/railties/lib/rails/railtie/configuration.rb
+++ b/railties/lib/rails/railtie/configuration.rb
@@ -88,45 +88,11 @@ module Rails
def method_missing(name, *args, &blk)
if name.to_s =~ /=$/
- key = $`.to_sym
- value = args.first
-
- if value.is_a?(Hash)
- @@options[key] = ChainedConfigurationOptions.new value
- else
- @@options[key] = value
- end
+ @@options[$`.to_sym] = args.first
elsif @@options.key?(name)
@@options[name]
else
- @@options[name] = ActiveSupport::OrderedOptions.new
- end
- end
-
- class ChainedConfigurationOptions < ActiveSupport::OrderedOptions # :nodoc:
- def initialize(value)
- value.each_pair { |k, v| set_value k, v }
- end
-
- def method_missing(meth, *args)
- if meth =~ /=$/
- key = $`.to_sym
- value = args.first
-
- set_value key, value
- else
- self.fetch(meth) { super }
- end
- end
-
- private
-
- def set_value(key, value)
- if value.is_a?(Hash)
- value = self.class.new(value)
- end
-
- self[key] = value
+ super
end
end
end
diff --git a/railties/test/application/configuration/base_test.rb b/railties/test/application/configuration/base_test.rb
index 6e2b618160..d6a82b139d 100644
--- a/railties/test/application/configuration/base_test.rb
+++ b/railties/test/application/configuration/base_test.rb
@@ -5,8 +5,6 @@ require 'env_helpers'
module ApplicationTests
module ConfigurationTests
class BaseTest < ActiveSupport::TestCase
- include ActiveSupport::Testing::Isolation
-
def setup
build_app
boot_rails
@@ -32,8 +30,8 @@ module ApplicationTests
end
def require_environment
- require "#{app_path}/config/environment"
+ require "#{app_path}/config/environment"
end
end
end
-end
+end \ No newline at end of file
diff --git a/railties/test/application/configuration/custom_test.rb b/railties/test/application/configuration/custom_test.rb
index e8c7a37913..045537fc28 100644
--- a/railties/test/application/configuration/custom_test.rb
+++ b/railties/test/application/configuration/custom_test.rb
@@ -1,84 +1,15 @@
require 'application/configuration/base_test'
class ApplicationTests::ConfigurationTests::CustomTest < ApplicationTests::ConfigurationTests::BaseTest
- test 'configuration top level can be chained' do
+ test 'access custom configuration point' do
add_to_config <<-RUBY
- config.resque.inline_jobs = :always
- config.resque.timeout = 60
+ config.x.resque.inline_jobs = :always
+ config.x.resque.timeout = 60
RUBY
require_environment
- assert_equal :always, Rails.configuration.resque.inline_jobs
- assert_equal 60, Rails.configuration.resque.timeout
- assert_nil Rails.configuration.resque.nothing
- end
-
- test 'configuration top level accept normal values' do
- add_to_config <<-RUBY
- config.timeout = 60
- config.something_nil = nil
- config.something_false = false
- config.something_true = true
- RUBY
- require_environment
-
- assert_equal 60, Rails.configuration.timeout
- assert_equal nil, Rails.configuration.something_nil
- assert_equal false, Rails.configuration.something_false
- assert_equal true, Rails.configuration.something_true
- end
-
- test 'configuration top level builds options from hashes' do
- add_to_config <<-RUBY
- config.resque = { timeout: 60, inline_jobs: :always }
- RUBY
- require_environment
-
- assert_equal :always, Rails.configuration.resque.inline_jobs
- assert_equal 60, Rails.configuration.resque.timeout
- assert_nil Rails.configuration.resque.nothing
- end
-
- test 'configuration top level builds options from hashes with string keys' do
- add_to_config <<-RUBY
- config.resque = { 'timeout' => 60, 'inline_jobs' => :always }
- RUBY
- require_environment
-
- assert_equal :always, Rails.configuration.resque.inline_jobs
- assert_equal 60, Rails.configuration.resque.timeout
- assert_nil Rails.configuration.resque.nothing
- end
-
- test 'configuration top level builds nested options from hashes with symbol keys' do
- add_to_config <<-RUBY
- config.resque = { timeout: 60, inline_jobs: :always, url: { host: 'localhost', port: 8080 } }
- config.resque.url.protocol = 'https'
- config.resque.queues = { production: ['low_priority'] }
- RUBY
- require_environment
-
- assert_equal(:always, Rails.configuration.resque.inline_jobs)
- assert_equal(60, Rails.configuration.resque.timeout)
- assert_equal({ host: 'localhost', port: 8080, protocol: 'https' }, Rails.configuration.resque.url)
- assert_equal('localhost', Rails.configuration.resque.url.host)
- assert_equal(8080, Rails.configuration.resque.url.port)
- assert_equal('https', Rails.configuration.resque.url.protocol)
- assert_equal(['low_priority'], Rails.configuration.resque.queues.production)
- assert_nil(Rails.configuration.resque.nothing)
- end
-
- test 'configuration top level builds nested options from hashes with string keys' do
- add_to_config <<-RUBY
- config.resque = { 'timeout' => 60, 'inline_jobs' => :always, 'url' => { 'host' => 'localhost', 'port' => 8080 } }
- RUBY
- require_environment
-
- assert_equal(:always, Rails.configuration.resque.inline_jobs)
- assert_equal(60, Rails.configuration.resque.timeout)
- assert_equal({ host: 'localhost', port: 8080 }, Rails.configuration.resque.url)
- assert_equal('localhost', Rails.configuration.resque.url.host)
- assert_equal(8080, Rails.configuration.resque.url.port)
- assert_nil(Rails.configuration.resque.nothing)
+ assert_equal :always, Rails.configuration.x.resque.inline_jobs
+ assert_equal 60, Rails.configuration.x.resque.timeout
+ assert_nil Rails.configuration.x.resque.nothing
end
end
diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb
index da4eccd2b7..ec64ce5941 100644
--- a/railties/test/railties/engine_test.rb
+++ b/railties/test/railties/engine_test.rb
@@ -840,7 +840,7 @@ YAML
Rails.application.load_seed
assert Rails.application.config.app_seeds_loaded
- assert_empty Bukkits::Engine.config.bukkits_seeds_loaded
+ assert_raise(NoMethodError) { Bukkits::Engine.config.bukkits_seeds_loaded }
Bukkits::Engine.load_seed
assert Bukkits::Engine.config.bukkits_seeds_loaded