Как написать расширение Devise (для использования собственного хранилища данных) - PullRequest
13 голосов
/ 03 декабря 2011

Я хотел бы написать расширение для Devise, которое позволит вам использовать parse_resource в качестве хранилища данных (в отличие от ActiveRecord). parse_resource - это Ruby-оболочка для REST API Parse.com. Его интерфейс почти такой же, как у ActiveRecord, и является жалобой ActiveModel. Из-за этого кажется возможным, что расширение для Devise может не потребовать слишком много не шаблонного.

Однако я не могу найти учебники. Все, на что я могу положиться - это источники для других расширений. Из расширения MongoMapper я понял, что есть две основные части:

  1. Генераторы (не совсем требуется)

    Здесь вы перезаписываете DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm) методы.

  2. "кишки " (очень много требуется)

    Я не совсем уверен, что здесь происходит. Кажется, что есть много шаблонного, с небольшим количеством кастинга типов, и внизу есть объявление, что мы будем использовать это расширение вместо стандартного ORM.

Это все, что нужно? Что мне не хватает? Может кто-нибудь объяснить, что происходит в "кишках" немного подробнее?

Существуют ли какие-либо простые тесты на пух, чтобы обеспечить полную совместимость с Devise?

Ответы [ 2 ]

3 голосов
/ 27 июля 2012

Я думаю, что наилучшим подходом было бы написать orm_adapter адаптер для разбора ресурса. Это настоящие "внутренности" интеграции устройства с различными формами.

Это на самом деле очень просто и включает набор тестов , который вы можете использовать. Учитывая, что parse_resource соответствует activemodel, адаптер должен быть таким же простым, как клонирование существующего адаптера .

Затем вам нужно подключить orm_adapter для разработки, который является просто клоном одного из этих файлов .

1 голос
/ 24 июля 2012

Для хорошего начала вы можете проверить расширение couchDB и расширение Riak .Вы можете видеть, что в модуле Hook вы переопределяете все, что хотите / должны, чтобы заставить работать Devise.

Можете ли вы увидеть объявление class_eval внизу?Там вы расширяете класс (в вашем случае ParseResource::Base) с помощью модуля Devise::Models, который содержит все необходимые методы (включая известный devise метод , как вы можете видеть ), и next с модулем Hooks, если вы хотите что-либо переопределить (расширению MongoMapper не нужно ничего переопределять, поэтому этот метод не используется).Таким образом, вы должны написать:

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

После этого вы должны require 'devise/orm/parse_resource' (при условии, что вы назвали файл parse_resource.rb) в вашем #{Rails.root}/config/initializers/devise.rb инициализаторе.Надеюсь, я немного помог:)

...