组织宝石结构

时间:2014-06-23 16:27:48

标签: ruby gem metaprogramming faker

我写的是宝石,它是faker宝石的补充(俄语函数,如tax& vat et.c。)

所以,我遇到了麻烦:每一段代码都很大,所以我需要把它拆分成逻辑部分。

IE我将Inn功能称为Faker::Russian.inn()

所以,我写了

Dir['faker/russian/*.rb'].each { |file| require file }

module Faker
  class Russian
    extend Inn
  end
end

否则我(在faker/russian/inn.rb)(这是必需的)此文件

module Inn
  def inn ; puts 'inn goes here' ; end
end

但我有一个错误:lib/faker/russian.rb:5:in <class:Russian>': uninitialized constant Faker::Russian::Inn (NameError)

如何避免此错误并成功自动包含代码和extend所有连接的模块?

1 个答案:

答案 0 :(得分:3)

选项1是在扩展

时引用顶级命名空间
extend ::Inn

选项2是定义具有正确名称空间的Inn

module Faker
  module Russian
    module Inn
      def inn; end
    end
  end
end

在gem选项2中,首选将所有模块命名为此gem的顶级模块。想象一下,如果你使用选项1并在应用程序中有一个Inn模块而不是gem,那么你就会遇到问题。