Extender el ActionController


#1

Hola!

Estoy un pelin liado y no se como hacer lo siguiente:
Estoy desarrollando un plugin que expanda las capacidades del
ActionController. Para ello me he creado un modulo que incluyo en el
ActionController::Base con el siguiente comando

ActionController::Base.send :include, MiModulo::Controller

Por otro lado, el codigo que contiene el modulo es el siguiente:

module MiModulo
module Controller
def self.included(mod)
mod.extend(ClassMethods)
end

  module ClassMethods
    def act_as_micontroller
      extend MiModulo::Controller::SingletonMethods
      include MiModulo::Controller::InstanceMethods
    end
  end

  module SingletonMethods
    def funcion_de_clase
    end
  end

  module InstanceMethods
    def funcion_de_instancia
    end
  end
end

end

Defino el controlador de la siguiente manera:

class PruebaController < ApplicationController
act_as_micontroller

end

Creo que es mas de lo que yo necesito porque, por ahora me bastaria con
acceder a las funciones propias de la instancia (por ejemplo:
funcion_de_instancia) desde PruebaController (cosa que ahora mismo no
puedo, me da error de que no encuentra la funcion.
Por otro lado, es un poco engorroso el act_as_micontroller, ya os he
comentado que no es lo que necesito, pero si me interesa dejar el plugin
limpio para poder añadir mas funciones de clases y de instancia en un
futuro.

Por ultimo, me gustaria que la vista pudiese acceder a una variable de
instancia. Se que se puede hacer con la funcion: helper_attr.
Pero no se donde definir la variable para que pueda llamar a helper_attr
y quede disponible para la vista y, además, dicha variable quede
accesible a la funcion: funcion_de_instancia.

Os agradecería mucho que me arrojaseis un poco de luz en este tema
porque, si bien reconozco que estoy un poco verde en esto de Mixins, no
consigo que me funcione las mil y unas posibilidades que he encontrado
por internet.

Un saludo
Roberto M. Oliva