Подтвердить что ты не робот

Как написать расширение разработчика (для использования пользовательского хранилища данных)

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

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

  • Генераторы (не совсем обязательные)

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

  • guts" (очень необходимо)

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

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

Существуют ли какие-либо простые тесты lint для обеспечения полной совместимости с Devise?

4b9b3361

Ответ 1

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

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

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

Ответ 2

Для хорошего начала вы можете проверить расширение couchDB и Riak. Вы можете видеть, что в Hook module вы переопределяете все, что хотите/должны, чтобы заставить 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. Надеюсь, я немного помог:)