1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/railties/lib/rails/configuration.rb
Piotr Sarnacki a5311ee86b Make deep copy of application generators on engine initialization.
Otherwise nested hashes will be same objects for both application and engine,
which will result in overwriting each others values on changes.
2010-11-02 17:14:52 +01:00

83 lines
2.1 KiB
Ruby

require 'active_support/deprecation'
require 'active_support/ordered_options'
require 'active_support/core_ext/hash/deep_dup'
require 'rails/paths'
require 'rails/rack'
module Rails
module Configuration
class MiddlewareStackProxy #:nodoc:
def initialize
@operations = []
end
def insert_before(*args, &block)
@operations << [:insert_before, args, block]
end
alias :insert :insert_before
def insert_after(*args, &block)
@operations << [:insert_after, args, block]
end
def swap(*args, &block)
@operations << [:swap, args, block]
end
def use(*args, &block)
@operations << [:use, args, block]
end
def delete(*args, &block)
@operations << [:delete, args, block]
end
def merge_into(other)
@operations.each do |operation, args, block|
other.send(operation, *args, &block)
end
other
end
end
class Generators #:nodoc:
attr_accessor :aliases, :options, :templates, :fallbacks, :colorize_logging
def initialize
@aliases = Hash.new { |h,k| h[k] = {} }
@options = Hash.new { |h,k| h[k] = {} }
@fallbacks = {}
@templates = []
@colorize_logging = true
end
def initialize_copy(source)
@aliases = @aliases.deep_dup
@options = @options.deep_dup
@fallbacks = @fallbacks.deep_dup
@templates = @templates.dup
end
def method_missing(method, *args)
method = method.to_s.sub(/=$/, '').to_sym
return @options[method] if args.empty?
if method == :rails || args.first.is_a?(Hash)
namespace, configuration = method, args.shift
else
namespace, configuration = args.shift, args.shift
namespace = namespace.to_sym if namespace.respond_to?(:to_sym)
@options[:rails][method] = namespace
end
if configuration
aliases = configuration.delete(:aliases)
@aliases[namespace].merge!(aliases) if aliases
@options[namespace].merge!(configuration)
end
end
end
end
end