Project

watchmaker

0.0
No commit activity in last 3 years
No release in over 3 years
Extract test setup and factory instantiation into reusable objects
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Watchmaker¶ ↑

Extract test setup and factory instantiation into reusable objects.

Motivation¶ ↑

Extract complex setup code for integration tests out into a central place; for example:

  • Share setup code between cucumber and test/unit by centralizing it.

  • Run this code in the console in development mode to seed your db with test data.

Using¶ ↑

Define profiles¶ ↑

Specify car, garage and boat as a dependency for lots of things. Watchmaker will either use a watchmaker by that name to fulfill that dependency, or fall back to the factory if it doesn’t exist.

Watchmaker.define :lots_of_things => [:car, :garage, :boat]

Specify a block with things to do do:

Watchmaker.define :two_garages do
  2.times do 
    Factory.create :garage
  end
end

Specify a factory as a dependency:

Watchmaker.define :garage, :factories => [:garage] do
  # Some other post-factory creation setup here.
end

Specify multiple factories as dependencies:

Watchmaker.define :garages, :factories => [:garage, :garage] do
  # Some other post-factory creation setup here.
end

Pass those objects in to the block:

Watchmaker.define :car_and_driver, :factories => [:garage, :car] do |garage, car|
  garage.cars << car
end

Sepcify another watchmaker as a dependency:

Watchmaker.define :car, :watchmakers => [:garage]

Specify a factory and a watchmaker as a dependency:

Watchmaker.define :car, :factories => [:car], :watchmakers => [:garage]

Manufacture objects¶ ↑

Build in-memory objects using the two garages profile.

Watchmaker.build :two_garages

Build persisted objects using the two garages profile.

Watchmaker.create :two_garages

Get your objects back¶ ↑

Watchmaker returns the objects created.

Watchmaker.create(:garage).first.class # Garage

Inspiration for the name¶ ↑

William Paley’s Watchmaker Analogy and Argument.

License¶ ↑

Watchmaker is Copyright © 2011 Christopher Meiklejohn. It is free software, and may be redistributed under the terms specified in the LICENSE file.

About¶ ↑

The watchmaker gem was written by Christopher Meiklejohn from Swipely, Inc..