包括或延长从宝石类/模块(例如设计)

问题描述:

我已经写了一个小模块的lib /加密/ encryption.rb包括或延长从宝石类/模块(例如设计)

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

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

我想用/上网本模块在这两个从设计,即文件:

  1. token_authenticatable.rb
  2. authenticatable.rb

我已经通过创建2个新的文件,并将它们植入/配置/ initilaizers覆盖两者(复制在其中的原始源代码和修改它们)

  1. /配置/初始化/ token_authenticable.rb
  2. /config/initializers/authenticatable.rb

一个文件看起来像这样FO例如:

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模块在这些文件内? 此修改是否是最佳实践? 如果不是,那么正确的方法是什么?

如果你有这个在你的application.rb中:

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

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

require 'encryption/encryption' 

它应该工作。

+0

谢谢,这个作品! 我已经用'config.autoload_paths + = Dir [“#{config.root}/lib/** /”]将config/.autoload_paths/lib添加到' – 2013-04-25 12:51:54

在一个类中封装两个方法,比如MyEncryptionAlgo。创建该类的对象

obj = Encryption::MyEncryptionAlgo.new 

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

obj.encrypt(value) 
obj.decrypt(value) 
+0

感谢您的帮助,但是如何将此类的模块包含在/config/initializers/*.rb文件中? (看编辑的问题) – 2013-04-25 12:37:01