如何编写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完全兼容?

我认为最好的方法是为解析资源编写一个orm_adapter适配器。 这是设计与各种规范整合的真正“胆量”。

它实际上非常简单,包括您可以使用的测试套件 。 考虑到parse_resource与activemodel兼容,适配器应该像克隆现有适配器一样简单。

接下来,您将需要挂钩orm_adapter来设计,这只是其中一个文件的克隆。

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

你能看到底部的class_eval声明吗? 在那里你用Devise::Models模块扩展类(在你的情况下是ParseResource::Base ),它包含所有必要的方法(包括你能看到的着名的devise方法),如果你想要的话, 接下来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 

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

Interesting Posts