如何在路径中自动包含Gem?
我有foo.gem,那里有lib/foo.rb
当我向Gemfile添加gem时,我的路径中自动需要foo.rb。 但我需要自动包含它。 原因是我正在进行控制台扩展,我希望它们在没有我写“include Foo”的情况下可用。
我正在试验
SOME_CLASS.send(:include, Foo)
但不确定使用什么类将它添加到路径中,例如当我启动自动包含的控制台时。 这里有一些mixins自动包含在控制台中,我需要我的在那里:)谢谢
irb(main):006:0> self.class.included_modules => [PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, ActiveSupport::Dependencies::Loadable, Kernel]
PS
我可以解决初始化程序的问题,但我不想更改项目的代码我只想添加gem并且它可以工作。
您应该使用Object
包含的Kernel
模块。 这是定义exit
, puts
和require
等私有方法的地方,因此它是定义命令式API的绝佳选择。
当你扩展Object
,人们希望能够在任何对象上显式调用你的方法,并且他们也知道你的方法取决于该对象的状态。
Kernel
方法理解不同。 尽管它们在技术上可用于所有对象,但您不希望人们编写如下内容:
'some string'.sleep 1000
这毫无意义。 sleep
与弦乐无关; 它不以任何方式依赖它。 它应该只用隐式接收器调用,好像self
概念不存在。
将您的方法设为私有并扩展Kernel
可帮助您获取该消息。
你可以在foo.rb
做到这foo.rb
:
module Foo # … end Some::Class.send :include, Foo
当您load
或require
一些文件时,它会逐行执行。 您可以将任意代码放在文件中的任何位置,甚至可以放在模块和类定义中。 您可以利用它来正确设置您的库,以便其他人不必这样做。
你试过吗?
Object.send(:include,Foo)
要么
self.send(:include,Foo)
在你的控制台内
- 安装gem“joyride-rails”时的依赖性错误
- 深入Ruby Gem开发资源(书籍,video,网站)
- sqlite3 gem无法安装
- “gem install rails”在mac OS X上为rbenv提供FilePermissionError
- 为什么RSpec的方法,“获取”,“发布”,“放置”,“删除”不在gem(或Rails外部)的控制器规范中工作?
- 在Windows 7 64位上运行gem install时出错
- 如何覆盖资产的gem资产中的单个文件:precompile?
- 最佳灵活的rails密码安全实现
- Ruby on Rails – $ rails服务器失败,因为无法找到uglifier gem