aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/rails/application/configuration.rb14
-rw-r--r--railties/lib/rails/railtie/configuration.rb42
2 files changed, 41 insertions, 15 deletions
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 782bc4b0f1..5e8f4de847 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, :x
+ :beginning_of_week, :filter_redirect
attr_writer :log_level
attr_reader :encoding
@@ -48,7 +48,6 @@ module Rails
@eager_load = nil
@secret_token = nil
@secret_key_base = nil
- @x = Custom.new
@assets = ActiveSupport::OrderedOptions.new
@assets.enabled = true
@@ -155,17 +154,6 @@ 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 eb3b2d8ef4..406ed5ac61 100644
--- a/railties/lib/rails/railtie/configuration.rb
+++ b/railties/lib/rails/railtie/configuration.rb
@@ -88,11 +88,49 @@ module Rails
def method_missing(name, *args, &blk)
if name.to_s =~ /=$/
- @@options[$`.to_sym] = args.first
+ key = $`.to_sym
+ value = args.first
+
+ if value.is_a?(Hash)
+ @@options[key] = ChainedConfigurationOptions.new value
+ else
+ @@options[key] = value
+ end
elsif @@options.key?(name)
@@options[name]
else
- super
+ @@options[name] = ActiveSupport::OrderedOptions.new
+ end
+ end
+
+ class ChainedConfigurationOptions < ActiveSupport::OrderedOptions # :nodoc:
+ def initialize(value = nil)
+ if value.is_a?(Hash)
+ value.each_pair { |k, v| set_value k, v }
+ else
+ super
+ end
+ 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
end
end
end