mirror of https://github.com/rails/rails
rack-mount 0.4
This commit is contained in:
parent
f53c36350d
commit
673fa7f066
|
@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
||||||
s.add_dependency('activemodel', '= 3.0.pre')
|
s.add_dependency('activemodel', '= 3.0.pre')
|
||||||
s.add_dependency('rack', '~> 1.1.0')
|
s.add_dependency('rack', '~> 1.1.0')
|
||||||
s.add_dependency('rack-test', '~> 0.5.0')
|
s.add_dependency('rack-test', '~> 0.5.0')
|
||||||
s.add_dependency('rack-mount', '~> 0.3.3')
|
s.add_dependency('rack-mount', '~> 0.4.0')
|
||||||
s.add_dependency('erubis', '~> 2.6.5')
|
s.add_dependency('erubis', '~> 2.6.5')
|
||||||
|
|
||||||
s.require_path = 'lib'
|
s.require_path = 'lib'
|
||||||
|
|
|
@ -19,9 +19,9 @@ module ActionDispatch
|
||||||
|
|
||||||
@constraints.each { |constraint|
|
@constraints.each { |constraint|
|
||||||
if constraint.respond_to?(:matches?) && !constraint.matches?(req)
|
if constraint.respond_to?(:matches?) && !constraint.matches?(req)
|
||||||
return [ 417, {}, [] ]
|
return [ 404, {'X-Cascade' => 'pass'}, [] ]
|
||||||
elsif constraint.respond_to?(:call) && !constraint.call(req)
|
elsif constraint.respond_to?(:call) && !constraint.call(req)
|
||||||
return [ 417, {}, [] ]
|
return [ 404, {'X-Cascade' => 'pass'}, [] ]
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,11 +34,11 @@ module ActionDispatch
|
||||||
@set, @scope = set, scope
|
@set, @scope = set, scope
|
||||||
@path, @options = extract_path_and_options(args)
|
@path, @options = extract_path_and_options(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_route
|
def to_route
|
||||||
[ app, conditions, requirements, defaults, @options[:as] ]
|
[ app, conditions, requirements, defaults, @options[:as] ]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def extract_path_and_options(args)
|
def extract_path_and_options(args)
|
||||||
options = args.extract_options!
|
options = args.extract_options!
|
||||||
|
@ -49,18 +49,18 @@ module ActionDispatch
|
||||||
else
|
else
|
||||||
path = args.first
|
path = args.first
|
||||||
end
|
end
|
||||||
|
|
||||||
[ normalize_path(path), options ]
|
[ normalize_path(path), options ]
|
||||||
end
|
end
|
||||||
|
|
||||||
def normalize_path(path)
|
def normalize_path(path)
|
||||||
path = nil if path == ""
|
path = nil if path == ""
|
||||||
path = "#{@scope[:path]}#{path}" if @scope[:path]
|
path = "#{@scope[:path]}#{path}" if @scope[:path]
|
||||||
path = Rack::Mount::Utils.normalize_path(path) if path
|
path = Rack::Mount::Utils.normalize_path(path) if path
|
||||||
|
|
||||||
raise ArgumentError, "path is required" unless path
|
raise ArgumentError, "path is required" unless path
|
||||||
|
|
||||||
path
|
path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ module ActionDispatch
|
||||||
def conditions
|
def conditions
|
||||||
{ :path_info => @path }.merge(constraints).merge(request_method_condition)
|
{ :path_info => @path }.merge(constraints).merge(request_method_condition)
|
||||||
end
|
end
|
||||||
|
|
||||||
def requirements
|
def requirements
|
||||||
@requirements ||= returning(@options[:constraints] || {}) do |requirements|
|
@requirements ||= returning(@options[:constraints] || {}) do |requirements|
|
||||||
requirements.reverse_merge!(@scope[:constraints]) if @scope[:constraints]
|
requirements.reverse_merge!(@scope[:constraints]) if @scope[:constraints]
|
||||||
|
@ -96,30 +96,30 @@ module ActionDispatch
|
||||||
else
|
else
|
||||||
default_controller ? { :controller => default_controller } : {}
|
default_controller ? { :controller => default_controller } : {}
|
||||||
end
|
end
|
||||||
|
|
||||||
if defaults[:controller].blank? && segment_keys.exclude?("controller")
|
if defaults[:controller].blank? && segment_keys.exclude?("controller")
|
||||||
raise ArgumentError, "missing :controller"
|
raise ArgumentError, "missing :controller"
|
||||||
end
|
end
|
||||||
|
|
||||||
if defaults[:action].blank? && segment_keys.exclude?("action")
|
if defaults[:action].blank? && segment_keys.exclude?("action")
|
||||||
raise ArgumentError, "missing :action"
|
raise ArgumentError, "missing :action"
|
||||||
end
|
end
|
||||||
|
|
||||||
defaults
|
defaults
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def blocks
|
def blocks
|
||||||
if @options[:constraints].present? && !@options[:constraints].is_a?(Hash)
|
if @options[:constraints].present? && !@options[:constraints].is_a?(Hash)
|
||||||
block = @options[:constraints]
|
block = @options[:constraints]
|
||||||
else
|
else
|
||||||
block = nil
|
block = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
((@scope[:blocks] || []) + [ block ]).compact
|
((@scope[:blocks] || []) + [ block ]).compact
|
||||||
end
|
end
|
||||||
|
|
||||||
def constraints
|
def constraints
|
||||||
@constraints ||= requirements.reject { |k, v| segment_keys.include?(k.to_s) || k == :controller }
|
@constraints ||= requirements.reject { |k, v| segment_keys.include?(k.to_s) || k == :controller }
|
||||||
end
|
end
|
||||||
|
@ -132,7 +132,7 @@ module ActionDispatch
|
||||||
{ }
|
{ }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def segment_keys
|
def segment_keys
|
||||||
@segment_keys ||= Rack::Mount::RegexpWithNamedGroups.new(
|
@segment_keys ||= Rack::Mount::RegexpWithNamedGroups.new(
|
||||||
Rack::Mount::Strexp.compile(@path, requirements, SEPARATORS)
|
Rack::Mount::Strexp.compile(@path, requirements, SEPARATORS)
|
||||||
|
@ -142,7 +142,7 @@ module ActionDispatch
|
||||||
def to
|
def to
|
||||||
@options[:to]
|
@options[:to]
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_controller
|
def default_controller
|
||||||
@scope[:controller].to_s if @scope[:controller]
|
@scope[:controller].to_s if @scope[:controller]
|
||||||
end
|
end
|
||||||
|
@ -520,4 +520,4 @@ module ActionDispatch
|
||||||
include Resources
|
include Resources
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ module ActionDispatch
|
||||||
prepare_params!(params)
|
prepare_params!(params)
|
||||||
|
|
||||||
unless controller = controller(params)
|
unless controller = controller(params)
|
||||||
return [417, {}, []]
|
return [404, {'X-Cascade' => 'pass'}, []]
|
||||||
end
|
end
|
||||||
|
|
||||||
controller.action(params[:action]).call(env)
|
controller.action(params[:action]).call(env)
|
||||||
|
|
Loading…
Reference in New Issue