Rails
factory_girl

FactoryGirl用のデータを作るコード

開発中に必要になったのでメモ代わりに。
昔作ってたコードが下の感じ。(もしかしたらどこかを参考にしてたのかも)

config/initializers/to_factory.rb
module ActiveRecord
  class Base
    def to_factory
      factory_name = "#{self.class.name.underscore}_#{self.id}"
      result_str = "  factory :#{factory_name}, :class => #{self.class} do \n"
      self.attributes.each do | column, value |
        next if %w(created_at updated_at).include?(column)
        next if value.nil?
        result_str += "    #{column} "
        if value.is_a? Numeric
          result_str += value.to_s
        elsif value.is_a?(TrueClass) ||  value.is_a?(FalseClass)
          result_str += value  ? "true" : "false"
        elsif value.nil?
          result_str += " nil"
        elsif value.is_a?(String)
          result_str += "\"#{value && value.gsub(/"/, "\\\"")}\""
        else
          result_str += "\"#{value}\""
        end 
        result_str += "\n"
      end 
      result_str += "  end\n"
      result_str
    end 
  end 
end

これがあると、以下の様にModel毎にto_factoryできるので、このデータをちょっとspec/factories/に書きたいという時に便利

puts Account.first.to_factory