Невозможно расширить фальшивый гем

Я следую инструкциям с: http://cloudspace.com/blog/2013/10/18/extending-faker/#.VLdumx9sY8o

Мой /config/locales/faker.en.yml выглядит так:

en:
  faker:
    girls: 
      first_name: ["priyanka", "Tanya", "aditi", "Tanvi"]
      last_name: ["Acharya", "Agarwal", "Agate", "Aggarwal"]
      name: 
       - "#{first_name} #{last_name}"

И у меня есть следующее: /lib/faker/girls.rb выглядит так:

module Faker
  class Girl < Base
    class << self
      def first_name
        parse('girls.first_name')
      end

      def last_name
        parse('girls.last_name')
      end

      def name
        fetch('girls.name')
      end
    end
  end
end

Сразу после запуска консоли rails я запускаю: require Rails.root.join 'lib/faker/girls', которому возвращается true.

После этого выполнение следующих команд не работает должным образом.

Выход:

2.1.1 :004 > Faker::Girl.first_name  => "" 
2.1.1 :005 > Faker::Girl.last_name  => "" 
2.1.1 :006 > Faker::Girl.name  => "\#{first_name} \#{last_name}"

Пожалуйста, помогите мне найти, где я ошибся..


person whizcreed    schedule 15.01.2015    source источник


Ответы (1)


Вы перепутали parse и fetch: простые свойства должны быть fetched, а составные - parsed. Еще одна ошибка заключается в том, что имя вашего класса должно соответствовать yml (по соглашению):

#         ⇓
class Girls < Base
  class << self
    def first_name
     #⇓⇓⇓⇓⇓ it is a simple property 
      fetch('girls.first_name')
    end

    def last_name
     #⇓⇓⇓⇓⇓ it is a simple property 
      fetch('girls.last_name')
    end

    def name
     #⇓⇓⇓⇓⇓ it is a composed property 
      parse('girls.name')
    end
  ...

Надеюсь, поможет.

person Aleksei Matiushkin    schedule 15.01.2015
comment
mudaobwa, можете ли вы рассказать мне, как использовать те же переменные для электронной почты. Я добавил свойство как - #{first_name}.#last_name‹at›domain‹dot›com, но здесь используется другой набор имени и фамилии. заранее спасибо.. - person whizcreed; 15.01.2015
comment
Вообще говоря, вы должны fetch переменную один раз. fetch (на удивление) извлекает случайное значение из заданного ввода. Возьмите его, сохраните где-нибудь и используйте. - person Aleksei Matiushkin; 15.01.2015