使用gem

时间:2016-11-08 02:03:01

标签: ruby rubygems

我正在构建一个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'模块文件,但收到'无法加载此类文件'错误。在路径前粘贴./修复它。

0 个答案:

没有答案