2011-12-02 5 views
13

Chciałbym napisać rozszerzenie do Devise, które pozwala użyć parse_resource jako magazynu danych (w przeciwieństwie do ActiveRecord). parse_resource to opakowanie Ruby dla interfejsu REST aplikacji Parse.com. Jego interfejs jest prawie taki sam jak w przypadku ActiveRecord i jest skargą ActiveModel. Z tego powodu wydaje się możliwe, że rozszerzenie dla Devise może nie wymagać zbyt wiele nieprzygotowania.Jak napisać rozszerzenie Devise (aby użyć niestandardowego datastore)

Jednak nie mogę znaleźć żadnych samouczków. Wszystko, na czym muszę polegać, to źródła innych rozszerzeń. Z MongoMapper extension, wnoszę, że istnieją dwie główne części:

  1. The generators (nie całkiem wymagane)

    Tutaj nadpisać DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) metod.

  2. The "guts "(bardzo wymagane)

    Nie jestem aż tak pewien, co się tu dzieje. Wydaje się, że istnieje wiele boilerplate, z odrobiną niestandardowego typu casting, a przy dno jest stwierdzenie, że będziemy używać tego rozszerzenia zamiast domyślnego ORM.

Czy to wszystko jest do niego? Co jestem brakuje? Czy ktoś może wyjaśnić, co dzieje się w „wnętrzności” w sposób nieco więcej szczegółów?

Czy czy istnieją testy proste, aby zapewnić pełną kompatybilność z Devise?

+0

Czy kiedykolwiek to stworzyłeś lub znalazłeś alternatywę? – emkman

Odpowiedz

1

Na dobry początek można również sprawdzić rozszerzenie couchDB i rozszerzenie Riak. Możesz zobaczyć, że w Hook module nadpisujesz wszystko, co chcesz/musisz, aby Devise działało.

Czy widzisz na dole deklarację class_eval? Tam rozszerzenie klasy (w przypadku ParseResource::Base) z modułem Devise::Models, która posiada wszystkie niezbędne metody (w tym słynnego devise metody as you can see) oraz następny z modułem Hooks jeśli chcesz nadpisać czegokolwiek (rozszerzenie MongoMapper nie trzeba niczego przesłonić, dlatego nie używa tej metody). Zatem należy napisać:

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 

Po tym musi require 'devise/orm/parse_resource' (zakładając, że nazwali plik parse_resource.rb) w swojej #{Rails.root}/config/initializers/devise.rb inicjatora. Mam nadzieję, że pomogłem trochę :)

3

Myślę, że najlepszym podejściem byłoby napisanie adaptera orm_adapter dla zasobu parsowania. To prawdziwe "odwagi" integracji devise'a z różnymi ormami.

Jest to bardzo proste i obejmuje test suite, którego można użyć. Biorąc pod uwagę, że parse_resource jest zgodny z activemodel, adapter powinien być tak prosty jak klonowanie existing adapter.

Następnie musisz podłączyć się do orm_adapter do opracowania, który jest tylko klonem jednego z tych files.

Powiązane problemy