如何从gem中添加Mongoid :: Document的功能?

时间:2012-08-26 17:44:19

标签: ruby-on-rails ruby gem mongoid mongoid3

我想创建一个为我的模型添加一些功能的gem。如何为Mongoid模型定义自定义关键字? E.g:

class Book
  include Mongoid::Document

  has_my_awesome_functionality
end

1 个答案:

答案 0 :(得分:2)

如果您有一个名为foobar的宝石,您可以将以下内容放入宝石的初始化程序中,或者放在单独的文件中(通常称为railtie.rb [,只需确保它已加载]):

require 'foobar'
require 'rails'

class FooBar
  class Railtie < Rails::Railtie

  config.before_initialize do
    ::Mongoid::Document.module_eval do
      def self.included(base)
        base.extend FooBar::MongoidExtension
      end
    end
  end if defined?(Mongoid)
end

,您的扩展程序可能如下所示:

module Foobar::MongoidExtension
  def has_my_awesome_functionality
    # logic here
  end
end