如何在gem的文件末尾运行方法?

时间:2016-06-04 21:47:09

标签: ruby rubygems require rack

我有一个gem(例如mygem)并且正常情况下,我将mygem添加到文件中,将require "mygem"添加到顶部。如果mygem中的方法名为finish_jobs并且我希望它在以下位置运行,该怎么办:

require "mygem"
# code, code code
finish_jobs

如果不强迫用户每次使用gem时添加方法,我该如何做?

具体来说,我要做的是编写一个服务器应用程序(带机架),我需要在服务器启动之前处理文件正文中的方法。

2 个答案:

答案 0 :(得分:1)

这当然是可能的。

为什么不直接将代码添加到Gem中(因为它听起来像是在你的控制之下并且不是外部依赖)?

module MyGem
  def printSomething
    p 2 + 2
  end

  module_function :printSomething
  printSomething()
  # => 4
end

如果这不是您的想法,请告诉我,我可以更新解决方案。

另请参阅Kernel#at_exit
有关Kernel#at_exit

的更具说明性的指南

答案 1 :(得分:0)

我不知道如何做你正在描述的事情。

一种解决方法是提供接受块的API。这种方法允许您在用户设置之后运行代码,而不会向其公开实现细节。

用户可以调用您的库方法,提供一个块来设置他们的服务器:

require "mygem" 

MyGem.code_code_code {
  # user's code goes here
} 

然后,您的图书馆代码将:

  • 接受块
  • 调用一些库代码

以下是一个示例实现:

module MyGem  
  # Run some user-provided code by `yield`-ing the block 
  # Then run the gem's finalizer 
  def self.code_code_code
    # Execute the block: 
    yield 
    # Finalize:
    finish_jobs
  end 
end 

这样,您可以接受来自用户的代码,但仍然可以控制设置和完成。

我希望它有所帮助!