lib/nitro/dispatcher.rb in nitro-0.14.0 vs lib/nitro/dispatcher.rb in nitro-0.15.0
- old
+ new
@@ -131,39 +131,47 @@
# OPTIMIZE: check only if lookup fails.
@apis.each { |k, v| api = k if path.slice!(/#{k}\//) }
end
parts = path.split('/')
+ parts.shift
case parts.size
when 0
# / -> root.index
- # base = @template_root
+ base = '/'
klass = controller_class_for(:root, context)
action = 'index'
- when 2
- if klass = controller_class_for(parts[1], context)
+ when 1
+ if klass = controller_class_for(parts[0], context)
# controller/ -> controller.index
- # base = "#{@template_root}/#{parts[1]}"
+ base = "/#{parts[0]}"
action = 'index'
else
# action/ -> root.action
- # base = @template_root
+ base = '/'
klass = controller_class_for(:root, context)
- action = parts[1]
+ action = parts[0]
end
- when 3
- # controller/action/ -> controller.action
- # base = "#{@template_root}/#{parts[1]}"
- klass = controller_class_for(parts[1], context)
- action = parts[2]
+ else
+ if klass = controller_class_for(parts[0], context)
+ # controller/action -> controller.action
+ base = "/#{parts[0]}"
+ parts.shift
+ action = parts.join('__')
+ else
+ # action/ -> root.action
+ base = '/'
+ klass = controller_class_for(:root, context)
+ action = parts.join('__')
+ end
end
-
+
content_type = @apis[:api] || 'text/html'
- return klass, "__#{api}__#{action}", content_type
+ return klass, "__#{api}__#{action}", content_type, base
end
alias_method :split_path, :dispatch
# Get the controller for the given key.
# Also handles reloading of controllers.