rack-mount 0.4

This commit is contained in:
Joshua Peek 2009-12-26 12:43:50 -06:00
parent f53c36350d
commit 673fa7f066
3 changed files with 21 additions and 21 deletions

View File

@ -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'

View File

@ -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

View File

@ -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)