module Roda::RodaPlugins::Controller::InstanceMethods
Public Instance Methods
controller(to, args: nil, inject: nil)
click to toggle source
# File lib/roda/plugins/controller.rb, line 94 def controller(to, args: nil, inject: nil) controller_key, action = to.to_s.split('#') result = dispatch(to, args: args, inject: inject) view("#{controller_key}/#{action}") end
dispatch(to, args: nil, inject: nil)
click to toggle source
# File lib/roda/plugins/controller.rb, line 59 def dispatch(to, args: nil, inject: nil) controller_key, action = to.to_s.split('#') controllers = opts[:controller][:registered_controllers] controller = controllers[controller_key.to_sym] inject ||= opts[:controller][:inject] if inject.respond_to?(:to_proc) controller_args = Array(instance_exec(&inject)) else controller_args = Array(inject) end if controller.respond_to?(:to_proc) controller = controller.to_proc.call(*controller_args) elsif controller.kind_of?(Class) controller = controller.new(*controller_args) end response = controller.send(action, *Array(args)) responds_with = controller.instance_variable_get(:@responds_with) responds_with ||= {} responds_with.each do |var, val| ivar = :"@#{var}" if !instance_variable_defined?(ivar) instance_variable_set(ivar, val) end end response end