包含或扩展gem中的类/模块(例如设计)

时间:2013-04-25 12:09:11

标签: ruby-on-rails module devise

我写了一个小模块 lib / encryption / encryption.rb

module Encryption
  def self.encrypt(value)
    ...
  end

  def self.decrypt(value)
    ...
  end
end

我想在Devise的这两个文件中使用/访问这个模块,即:

  1. token_authenticatable.rb
  2. authenticatable.rb
  3. 我已经通过创建2个新文件并将它们放入/ config / initilaizers(将原始源代码复制到其中并修改它们)来覆盖它们两个

    1. /config/initializers/token_authenticable.rb
    2. /config/initializers/authenticatable.rb
    3. 例如,一个文件如下所示:

      require 'devise/strategies/token_authenticatable'
      require './lib/encryption/encryption.rb' #TRIED THIS, BUT DOES NOT WORK
      
      module Devise
        module Models
          # The TokenAuthenticatable module is responsible for generating an authentication token and
          # validating the authenticity of the same while signing in.
          ...
      

      我的修改有效,但是如何在这些文件中访问我的lib / Encryption.rb模块? 这种修改方法是最佳实践吗? 如果没有,那么正确的做法是什么?

2 个答案:

答案 0 :(得分:2)

如果您在application.rb中有此内容:

config.autoload_paths += %W(#{config.root}/lib)

然后'/ lib'将被自动加载。意思是你可以打电话

require 'encryption/encryption'

它应该有用。

答案 1 :(得分:0)

在MyEncryptionAlgo等类中包装两个方法。创建该类的对象

obj = Encryption::MyEncryptionAlgo.new

使用此对象访问这两种方法。

obj.encrypt(value)
obj.decrypt(value)