ruby-on-rails ruby devise mongomapper

ruby on rails - Cómo escribir una extensión Devise(para usar un almacén de datos personalizado)



ruby-on-rails mongomapper (2)

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.

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

  1. Los generadores (no del todo necesarios)

    Aquí sobrescribe los DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) .

  2. Las "agallas " (muy necesario)

    No estoy tan seguro de lo que está pasando aquí. Parece que hay un montón de repeticiones, con un poco de conversión de texto personalizado, y en la parte inferior hay una declaración de que usaremos esta extensión en lugar del ORM predeterminado.

Eso es todo? ¿Qué me estoy perdiendo? ¿Puede alguien explicar lo que sucede en "las agallas" con un poco más de detalle?

¿Hay alguna prueba de pelusa simple para ejecutar para asegurar la total compatibilidad con Devise?


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

¿Puedes ver la declaración class_eval en la parte inferior? Allí extiendes la clase (en tu caso, ParseResource::Base ) con el módulo Devise::Models , que contiene todos los métodos necesarios (incluido el famoso método de devise como puedes ver ), y luego con el módulo Hooks si quieres para anular cualquier cosa (la extensión MongoMapper no necesita anular nada, es por eso que no está usando este método). Por lo tanto debes 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 eso debe require ''devise/orm/parse_resource'' (suponiendo que haya nombrado el archivo parse_resource.rb ) en su inicializador #{Rails.root}/config/initializers/devise.rb . Espero haber ayudado un poco :)


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 conjunto de pruebas que puede usar. Teniendo en cuenta que parse_resource es compatible con el modelo activo, el adaptador debería ser tan fácil como clonar un adaptador existente .

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