mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
a5311ee86b
Otherwise nested hashes will be same objects for both application and engine, which will result in overwriting each others values on changes.
83 lines
2.1 KiB
Ruby
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
|