No commit activity in last 3 years
No release in over 3 years
Uses ruby_parser and ruby_scribe to dynamically convert factory_girl factories in the V1 DSL into the V2 DSL.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
~> 2.0

Runtime

~> 0.6.0
~> 2.3.1
~> 0.1.4
~> 0.13
 Project Readme

<img src=“https://secure.travis-ci.org/rubiety/factory_girl_upgrader.png?branch=master” alt=“Build Status” />

Factory Girl Upgrader¶ ↑

Uses ruby_parser and ruby_scribe to dynamically convert factory_girl factories in the V1 DSL into the V2 DSL.

In-Progress¶ ↑

NOTE: This gem is not essentially unusable and is being continually worked on - more of a proof of concept for now.

Command-Line Usage¶ ↑

The gem comes with a thor task that you can use to print out a converted version of any Ruby file containing factory_girl V1 code:

$ factory_girl_upgrader cat test_project.rb

API Usage¶ ↑

This is built on the tree-walking base class RubyTransform::Transformer from the ruby_transform project. The principal transform, which is a composite of other more granular transforms, is RSpecify::Transformer. Here’s how it can be used in conjunction with ruby_parser:

sexp = RubyParser.new.parse(File.read(path))
sexp = FactoryGirl::Upgrader::Transformer.new.transform(sexp)

emitter = RubyScribe::Emitter.new
emitter.methods_without_parenthesis += ["factory"]
emitter.emit(sexp)

Supported factory_girl V1 features:¶ ↑

  • Simple attribute setting

  • Sequences with a block

  • Associations (without options)

NOTE: Indeed, this is only the basics. This will be expanded in the future to be a more comprehensive set of transformations.

Limitations¶ ↑

To make this more DSL-friendly without parentheses requires expansion of the emitter configuration on ruby_scribe (we need to be able to give ruby_scribe AST node hints on parentheses and block style).

Example:¶ ↑

Original (factory_girl V1):¶ ↑

Factory.define(:product) do |f|
  f.association :category
  f.sequence(:name) {|n| "Product #{n}" }
  f.price 19.95
end

Transformed (factory_girl V2):¶ ↑

FactoryGirl.define do 
  factory :product do
    category
    price(19.95)
    sequence(:name) do |n| 
      "Product #{n}"
    end
  end
end