2011-12-02 10 views
13

Me gustaría escribir una extensión para Devise que le permita usar parse_resource como el almacén de datos (a diferencia de ActiveRecord). parse_resource es un contenedor de Ruby para la API REST de Parse.com. Su interfaz es bastante similar a la de ActiveRecord y es una queja de ActiveModel. Debido a esto, parece posible que una extensión para Devise no requiera demasiada repetición.Cómo escribir una extensión Devise (para usar un almacén de datos personalizado)

Sin embargo, no puedo encontrar ningún tutorial. Todo lo que tengo que confiar son las fuentes para otras extensiones. Desde el MongoMapper extension, tengo entendido que hay dos partes principales:

  1. The generators (no es obligatorio)

    Aquí sobrescribir DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) métodos.

  2. The "guts "(muy necesario)

    No estoy tan seguro de lo que está pasando aquí. Parece que hay un montón de repetitivo, con un poco de costumbre tipo a presión, y en el parte inferior hay una declaración de que vamos a utilizar esta extensión en lugar de la ORM por defecto.

es que todo lo que hay que hacer? ¿Qué me falta? ¿puede alguien explicar lo que sucede en "las tripas" en una un poco más de detalle?

Son ¿Hay alguna prueba de pelusa simple para garantizar la total compatibilidad con Devise?

+0

¿Alguna vez creó esto o encontró una alternativa? – emkman

Respuesta

1

Para un buen comienzo, puede consultar la extensión couchDB y la extensión Riak también. Puedes ver que en el Hook module anulas todo lo que quieras/debes para hacer que el Devise funcione.

¿Puedes ver la declaración class_eval en la parte inferior? Hay que extender la clase (en su caso el ParseResource::Base) con el módulo Devise::Models, que contiene todos los métodos necesarios (incluyendo el famoso devise método as you can see), y próxima con el módulo Hooks si desea anular cualquier cosa (la extensión MongoMapper no es necesario anular nada, es por eso que no está utilizando este método). Por lo tanto se debe escribir:

module Devise 
    module Orm 
    module ParseResource 
     module Hooks 
     # here you define any overrides 
     end 
    end 
    end 
end 

ParseResource::Base.class_eval do 
    extend Devise::Models 
    extend Devise::Orm::ParseResource::Hooks 
end 

Después de que usted debe require 'devise/orm/parse_resource' (suponiendo que haya nombrado el archivo parse_resource.rb) en su #{Rails.root}/config/initializers/devise.rb inicializador. Espero que ayudé un poco :)

3

Creo que el mejor enfoque sería escribir un adaptador orm_adapter para analizar el recurso. Son las verdaderas "tripas" de la integración del plan con varios orms.

En realidad es muy sencillo e incluye un test suite que puede usar. Teniendo en cuenta que parse_resource es compatible con activemodel, el adaptador debería ser tan fácil como clonar un existing adapter.

A continuación deberá enganchar el adaptador orm_adapter para diseñar, que es solo un clon de uno de estos files.

Cuestiones relacionadas