包括或延长从宝石类/模块(例如设计)
问题描述:
我已经写了一个小模块的lib /加密/ encryption.rb包括或延长从宝石类/模块(例如设计)
module Encryption
def self.encrypt(value)
...
end
def self.decrypt(value)
...
end
end
我想用/上网本模块在这两个从设计,即文件:
- token_authenticatable.rb
- authenticatable.rb
我已经通过创建2个新的文件,并将它们植入/配置/ initilaizers覆盖两者(复制在其中的原始源代码和修改它们)
- /配置/初始化/ token_authenticable.rb
- /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'
它应该工作。
答
在一个类中封装两个方法,比如MyEncryptionAlgo。创建该类的对象
obj = Encryption::MyEncryptionAlgo.new
使用此对象来访问这两种方法。
obj.encrypt(value)
obj.decrypt(value)
+0
感谢您的帮助,但是如何将此类的模块包含在/config/initializers/*.rb文件中? (看编辑的问题) – 2013-04-25 12:37:01
谢谢,这个作品! 我已经用'config.autoload_paths + = Dir [“#{config.root}/lib/** /”]将config/.autoload_paths/lib添加到' – 2013-04-25 12:51:54