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