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