2011-12-02 13 views
13

Vorrei scrivere un'estensione per Devise che consente di utilizzare parse_resource come datastore (anziché ActiveRecord). parse_resource è un wrapper Ruby per REST api di Parse.com. La sua interfaccia è praticamente la stessa di ActiveRecord e è un reclamo ActiveModel. Per questo motivo, sembra possibile che un'estensione per Devise non richieda troppe non standard.Come scrivere un'estensione Devise (per utilizzare un archivio dati personalizzato)

Tuttavia, non riesco a trovare alcun tutorial. Tutto ciò su cui devo fare affidamento sono le fonti per altre estensioni. Dal MongoMapper extension, ho capito che ci sono due parti principali:

  1. The generators (non del tutto necessari)

    Qui si sovrascrive DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) metodi.

  2. The "guts "(molto richiesto)

    io non sono abbastanza sicuro di quello che sta succedendo qui. Sembra che ci sia un sacco di boilerplate, con un po 'di misura Tipo-casting, e al fondo c'è una dichiarazione che useremo questa estensione al posto del ORM di default.

è che tutto quello che c'è ad esso? che cosa mi manca? qualcuno può spiegare che cosa accade in "il coraggio" in un un po 'di dettagli?

Are Esistono semplici test dei lanci da eseguire per garantire la piena compatibilità con Devise?

+0

Hai mai creato questo o trovato un'alternativa? – emkman

risposta

1

Per un buon avvio è possibile controllare l'estensione couchDB e l'estensione Riak. Puoi vedere che nello Hook module hai la precedenza su tutto ciò che vuoi/devi per far funzionare Devise.

Riesci a vedere la dichiarazione class_eval in fondo? Ci si estende la classe (nel tuo caso la ParseResource::Base) con il modulo Devise::Models, che detiene tutti i metodi necessari (tra cui il famoso metodo deviseas you can see), e prossima con il modulo Hooks se si desidera ignorare qualsiasi cosa (l'estensione MongoMapper non c'è bisogno di sovrascrivere nulla, ecco perché non sta usando questo metodo). Quindi è necessario scrivere:

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 

Dopo di che si deve require 'devise/orm/parse_resource' (ammesso che abbiate chiamato il file parse_resource.rb) nella #{Rails.root}/config/initializers/devise.rb inizializzazione. Spero di aver contribuito un po ':)

3

Penso che l'approccio migliore sarebbe quello di scrivere un adattatore orm_adapter per la risorsa di analisi. È il vero "coraggio" dell'integrazione di Devise in vari modi.

In realtà è molto semplice e include un test suite che è possibile utilizzare. Considerando che parse_resource è compatibile con activemodel, l'adattatore dovrebbe essere facile come clonare un existing adapter.

Successivamente sarà necessario agganciare in orm_adapter per elaborare, che è solo un clone di uno di questi files.

Problemi correlati