如何编写Devise扩展(使用自定义数据存储区)

use*_*154 13 ruby ruby-on-rails mongomapper devise

我想为Devise编写一个扩展,允许您使用parse_resource作为数据存储区(而不是ActiveRecord).parse_resource是Parse.com的REST api的Ruby包装器.它的界面与ActiveRecord几乎相同,并且是ActiveModel投诉.因此,Devise的扩展似乎可能不需要太多的非样板.

但是,我找不到任何教程.我所依赖的只是其他扩展的来源.从MongoMapper扩展,我认为有两个主要部分:

  1. 发电机(不是很需要)

    在这里你覆盖DeviseGenerator#(generate_model|inject_devise_content|replace_default_devise_orm)方法.

  2. "胆量 "(非常需要)

    我不太确定这里发生了什么.似乎有很多样板,有一些自定义类型转换,在底部有一个声明,我们将使用此扩展而不是默认的ORM.

这就是它的全部吗?我错过了什么?有人可以更详细地解释"胆量"中发生的事情吗?

是否有任何简单的lint测试可以确保与Devise完全兼容?

Ger*_*rry 1

为了获得良好的开端,您还可以查看couchDB扩展和Riak扩展。您可以看到,在Hook 模块中,您覆盖了您想要/必须使 Devise 工作的任何内容。

你能看到底部的class_eval声明吗?ParseResource::Base在那里,您可以使用模块扩展类(在您的情况下为 )Devise::Models,该模块包含所有必要的方法(包括您可以看到的devise著名方法),如果您想覆盖任何内容,那么接下来使用模块(MongoMapper 扩展不需要覆盖任何内容,这就是不使用此方法的原因)。因此你必须写:Hooks

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
Run Code Online (Sandbox Code Playgroud)

之后,您必须require 'devise/orm/parse_resource'(假设您已命名该文件parse_resource.rb)在#{Rails.root}/config/initializers/devise.rb初始化程序中。希望我能帮上一点忙:)