在gem中扩展Faker,我在哪里放YAML文件?

时间:2015-01-26 15:46:13

标签: ruby gem faker

我有一个使用Faker帮助构建模拟数据的gem。我想添加一个新类,它使用Faker自己使用的相同语法生成一个新类别的东西。前半部分很简单,我只需定义类,并确保我的gem加载文件:

# lib/faker/restaurant.rb
module Faker
  class Restaurant < Base
    class << self
      def name
        parse('restaurant.name')
      end
    end
  end
end

到目前为止,这么好。现在,为了描述可以从中得到什么值,我创建了一个YAML文件:

faker:
  en:
    restaurant:
      suffix: [Cafe,Restaurant]
      name:
        - "#{Name.first_name}'s #{suffix}"

所以,实际的问题是:这个文件在哪里,它应该有什么名称?如果这是一个Rails应用程序,它将是config/locales/faker.en.yml。在一个gem中,这似乎不起作用 - 实际上并没有'config'目录,但是为此目的创建它并没有帮助,我得到:

> Faker::Restaurant.name
I18n::MissingTranslationData: translation missing: en.faker.restaurant.name

1 个答案:

答案 0 :(得分:2)

好的,想通了。特别感谢 dax ,他的评论使我朝着正确的方向前进。

Faker使用I18n gem进行本地化(这就是为什么YAML文件位于&#39; locales&#39;目录中)。这意味着我需要将自定义YAML添加到I18n加载路径。只要文件被添加到加载路径中,文件的确切位置并不重要。就我而言,我把它放在lib/faker/locales/en-US.yml,并将整个目录添加到加载路径,因此:

<强> LIB / my_gem.rb:

I18n.load_path += Dir[File.join(File.expand_path(File.dirname(__FILE__)), 'faker/locales', '*.yml')]
require "faker/restaurant"

我放入该目录的任何.yml文件都应加载并供Faker使用。

附注:我还需要稍微改变YAML格式 - 它应该是

en:
  faker:
    <stuff>

而不是顶级的faker,就像我拥有它一样。