Расширение Faker в геме, куда мне поместить файл YAML?

У меня есть драгоценный камень, который использует Faker для создания фиктивных данных. Я хотел бы добавить новый класс, который генерирует новую категорию вещей, используя тот же синтаксис, который использует Faker. Первая половина проста, я просто определяю класс и убеждаюсь, что мой гем загружает файл:

# 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. В драгоценном камне это, похоже, не работает - на самом деле нет каталога «config», с одной стороны, но его создание для этой цели не помогает, я получаю:

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

person MrTheWalrus    schedule 26.01.2015    source источник
comment
в самом геме подделки они находятся в каталоге «locales»: github.com /stympy/faker/tree/master/lib/locales   -  person dax    schedule 26.01.2015
comment
@дакс Верно. Однако я пытался поставить свой в <my_gem>/lib/locales безрезультатно.   -  person MrTheWalrus    schedule 26.01.2015
comment
может отсутствующее требование, как в lib/faker.rb?   -  person dax    schedule 26.01.2015


Ответы (1)


Ок, разобрался. Особая благодарность dax, чьи комментарии подтолкнули меня в правильном направлении.

Faker использует гем I18n для локализации (поэтому файлы YAML находятся в каталоге «locales»). Это означает, что мне нужно было добавить свой пользовательский 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>

а не с фейкером на верхнем уровне, как было у меня.

person MrTheWalrus    schedule 26.01.2015