---
title: Factory Bot 2.5 Gets Custom Constructors
teaser:
tags: news,web,rails,open source,factory_girl,factory_bot
author: Josh Clayton
published_on: 2012-01-21
---

Today marks a big day in the life of Factory Bot; you can now override the
constructor for factories! This is great news for people who've been upset that
they can't use Factory Bot with objects who have constructors with required
arguments, as Factory Bot would previously just call `new` without passing any
arguments.

Here's the syntax:

    # app/models/report_generator.rb
    class ReportGenerator
      def initialize(name, data)
        @name = name
        @data = data
      end

      # ...
    end

    # spec/factories.rb
    FactoryBot.define do
      factory :report_generator do
        ignore do
          name { "Generic Report" }
          data { {:foo => "bar", :baz => "buzz"} }
        end

        initialize_with { ReportGenerator.new(name, data) }
      end

      # ...
    end

Note that I wrapped the `name` and `data` attributes in an ignore block. Factory
Bot doesn't differentiate between attributes passed in the custom constructor
and normal attributes to assign, so moving them to the ignore block ensures that
I don't instantiate the report generator and then attempt to assign `name` and
`data` again.

Grab a copy of [2.5.0](http://rubygems.org/gems/factory_girl/versions/2.5.0) and
start using Factory Bot with your other objects today!

* * *

**Disclaimer:**

Looking for FactoryGirl? The library was renamed in 2017.
[Project name history can be found here.](https://github.com/thoughtbot/factory_bot/blob/master/NAME.md)
