59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# 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
|