Ruby gem有更多类

时间:2014-01-29 08:46:03

标签: ruby-on-rails ruby gem

我想在ruby中创建一个gem,它包含更多的类,而不仅仅是与gem名称相同的类,并调用这些类的方法,如下所述。

我想拥有以下树:

my_handlers
-lib
--my_first_handler.rb
--my_second_handler.rb

在创建和安装gem之后,我想调用像

这样的类的方法
MyHandlers::MyFirstHandler.Method1
MyHandlers::MySecondHandler.Method1

是否可以像这样创建一个宝石? (抱歉我的英语不好)

1 个答案:

答案 0 :(得分:1)

具有相同名称shell的gem的主命名空间不是类,而是模块,所有类和其他模块shell都嵌套在其中。对于您的情况,它看起来像:

<强> LIB / my_handlers.rb:

require 'my_handlers/my_first_handler'
require 'my_handlers/my_second_handler'

<强> LIB / my_handlers / version.rb:

module MyHandlers
   Version = 0.0.1
end

<强> LIB / my_handlers / my_first_handler.rb:

module MyHandlers
   module MyFirstHandler
      def method
      end
   end
end

<强> LIB / my_handlers / my_second_handler.rb:

module MyHandlers
   module MySecondHandler
      def method
      end
   end
end

并按如下方式组织对方法的访问:

MyHandlers::Version # => 0.0.1
MyHandlers::MyFirstHandler.method
MyHandlers::MySecondHandler.method

或使用::include操作将模块的方法作为其实例方法包含在类中:

class A
   include MyHandlers::MyFirstHandler
end

A.new.method

或使用::extend操作使用模块的方法扩展类作为classe的单例方法:

class A
   extend MyHandlers::MyFirstHandler
end

A.method