我正在构建一个Ruby gem,其中包含一个模块,用于修补Hash类以添加新方法。我按照本指南尝试整齐地执行此操作:http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/
我已将模块放在lib/core_extensions/hash/prune.rb
中,模块声明为:
module CoreExtensions
module Hash
module Prune
##
# Removes all pairs from the Hash for which the value is nil. Destructive!
def prune!
self.reject! { |_, v| v.nil? }
end
end
end
end
为了让猴子补丁生效,我在主宝石文件中调用它:
Hash.include(CoreExtensions::Hash::Prune)
但是在构建gem并尝试在irb控制台中要求它之后,我收到以下错误:NameError: uninitialized constant Gem::CoreExtensions
(Gem是一个占位符名称)。
我确保将prune.rb文件包含在我的gemspec的files
数组中:s.files = ['lib/gem.rb', 'lib/core_extensions/hash/prune.rb']
,所以我不确定为什么它无法检测到文件及其模块。任何人都可以帮我解决这个问题吗?
谢谢!
编辑:如果它会帮助其他人 - 我尝试使用require
require 'lib/core_extensions/hash/prune'
模块文件,但收到'无法加载此类文件'错误。在路径前粘贴./
修复它。