remi-factory_girl_extensions 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +14 -8
- data/Rakefile +1 -0
- data/VERSION.yml +2 -2
- data/lib/factory_girl_extensions.rb +25 -11
- data/spec/dog_spec.rb +35 -0
- data/spec/extensions_spec.rb +39 -0
- data/spec/spec_helper.rb +31 -0
- metadata +5 -2
data/README.rdoc
CHANGED
@@ -3,23 +3,29 @@
|
|
3
3
|
FactoryGirlExtensions is a simple set of extensions that I typically
|
4
4
|
like to use on projects, when using factory_girl
|
5
5
|
|
6
|
+
NOTE: I might try adding this as an official factory_girl 'syntax', in which case
|
7
|
+
these extensions will be available to anyone using factory_girl
|
8
|
+
|
6
9
|
== Install
|
7
10
|
|
8
11
|
$ sudo gem install remi-factory_girl_extensions -s http://gems.github.com
|
9
12
|
|
10
13
|
== Usage
|
11
14
|
|
12
|
-
|
15
|
+
To use these extensions, <tt>require 'factory_girl_extensions'</tt> in your <tt>factories.rb</tt> (or wherever)
|
13
16
|
|
14
17
|
FactoryGirlExtensions adds some shortcut methods. Here are some examples:
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
User.generate! # this is equivalent to Factory(:user) or Factory.create(:user)
|
20
|
+
User.gen! # this is a shortcut alias for #generate
|
21
|
+
User.generate # this is equivalent to Factory.build(:user) and then #save
|
22
|
+
User.gen # this is equivalent to Factory.build(:user) and then #save
|
23
|
+
User.build # this is equivalent to Factory.build(:user)
|
24
|
+
User.gen! :name => 'Bob' # this is equivalent to Factory(:user, :name => 'Bob')
|
25
|
+
:email.next # this is equivalent to Factory.next(:email)
|
26
|
+
'email'.next # this will NOT work because String#next already exists
|
27
|
+
:admin_user.gen! # this is equivalent to Factory.gen(:admin_user)
|
28
|
+
'admin_user'.gen! # this is equivalent to Factory.gen(:admin_user)
|
23
29
|
|
24
30
|
# TODO
|
25
31
|
I think I would like to add User.gen_admin or maybe User.gen(:admin)
|
data/Rakefile
CHANGED
data/VERSION.yml
CHANGED
@@ -9,13 +9,16 @@ require 'factory_girl'
|
|
9
9
|
#
|
10
10
|
# == Usage
|
11
11
|
#
|
12
|
-
# User.generate
|
13
|
-
# User.gen
|
12
|
+
# User.generate! # this is equivalent to Factory(:user) or Factory.create(:user)
|
13
|
+
# User.gen! # this is a shortcut alias for #generate
|
14
|
+
# User.generate # this is equivalent to Factory.build(:user) and then #save
|
15
|
+
# User.gen # this is equivalent to Factory.build(:user) and then #save
|
14
16
|
# User.build # this is equivalent to Factory.build(:user)
|
15
|
-
# User.gen :name => 'Bob'
|
17
|
+
# User.gen! :name => 'Bob' # this is equivalent to Factory(:user, :name => 'Bob')
|
16
18
|
# :email.next # this is equivalent to Factory.next(:email)
|
17
|
-
#
|
18
|
-
#
|
19
|
+
# 'email'.next # this will NOT work because String#next already exists
|
20
|
+
# :admin_user.gen! # this is equivalent to Factory.gen(:admin_user)
|
21
|
+
# 'admin_user'.gen! # this is equivalent to Factory.gen(:admin_user)
|
19
22
|
#
|
20
23
|
# == TODO
|
21
24
|
#
|
@@ -25,19 +28,30 @@ require 'factory_girl'
|
|
25
28
|
module FactoryGirlExtensions
|
26
29
|
def method_missing name, *args
|
27
30
|
|
28
|
-
|
31
|
+
messages = case name.to_s
|
32
|
+
when /^gen(erate)?\!$/
|
33
|
+
[:build, :save!]
|
29
34
|
when /^gen(erate)?$/
|
30
|
-
:
|
35
|
+
[:build, :save]
|
31
36
|
when 'build'
|
32
|
-
:build
|
37
|
+
[:build]
|
33
38
|
when 'next'
|
34
|
-
:next
|
39
|
+
[:next]
|
35
40
|
end
|
36
41
|
|
37
|
-
if
|
42
|
+
if messages
|
38
43
|
# if this is an instance of String/Symbol use this instance as the factory name, else use the class name
|
39
44
|
factory_name = ( kind_of?(Symbol) || kind_of?(String) ) ? self.to_s.to_sym : self.name.underscore.to_sym
|
40
|
-
|
45
|
+
|
46
|
+
factory_method, instance_method = messages
|
47
|
+
instance = Factory.send factory_method, factory_name, *args
|
48
|
+
|
49
|
+
if instance_method
|
50
|
+
instance.send instance_method if instance.respond_to? instance_method
|
51
|
+
end
|
52
|
+
|
53
|
+
instance
|
54
|
+
|
41
55
|
else
|
42
56
|
super
|
43
57
|
end
|
data/spec/dog_spec.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
#
|
4
|
+
# make sure our example class works as expected
|
5
|
+
#
|
6
|
+
describe Dog do
|
7
|
+
|
8
|
+
it 'should have a name' do
|
9
|
+
Dog.new.name.should be_nil
|
10
|
+
Dog.new( :name => 'Rover' ).name.should == 'Rover'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should have a breed' do
|
14
|
+
Dog.new.breed.should be_nil
|
15
|
+
Dog.new( :breed => 'American Pit Bull Terrier' ).breed.should == 'American Pit Bull Terrier'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should require a name' do
|
19
|
+
Dog.new.should_not be_valid
|
20
|
+
Dog.new( :name => 'rover' ).should be_valid
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return true/false if #save OK' do
|
24
|
+
Dog.new.save.should be_false
|
25
|
+
Dog.new.should_not be_valid
|
26
|
+
Dog.new( :name => 'rover' ).should be_valid
|
27
|
+
Dog.new( :name => 'rover' ).save.should be_true
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should raise an exception if not #save! OK' do
|
31
|
+
lambda { Dog.new.save! }.should raise_error
|
32
|
+
Dog.new( :name => 'rover' ).save!.should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
Factory.sequence(:string){|n| "HelloWorld#{ n }" }
|
4
|
+
|
5
|
+
Factory.define :dog do |d|
|
6
|
+
d.name { :string.next }
|
7
|
+
end
|
8
|
+
|
9
|
+
describe FactoryGirlExtensions do
|
10
|
+
|
11
|
+
it '#gen[erate] should build and save' do
|
12
|
+
Dog.gen.should be_valid
|
13
|
+
Dog.generate.should be_valid
|
14
|
+
|
15
|
+
Dog.gen( :name => nil ).should_not be_valid
|
16
|
+
Dog.generate( :name => nil ).should_not be_valid
|
17
|
+
end
|
18
|
+
|
19
|
+
it '#gen[erate]! should build and save!' do
|
20
|
+
Dog.gen!.should be_valid
|
21
|
+
Dog.generate!.should be_valid
|
22
|
+
|
23
|
+
lambda { Dog.gen!( :name => nil ) }.should raise_error
|
24
|
+
lambda { Dog.generate!( :name => nil ) }.should raise_error
|
25
|
+
end
|
26
|
+
|
27
|
+
it '"dog".gen and :dog.gen should work' do
|
28
|
+
:dog.gen!.should be_valid
|
29
|
+
'dog'.gen!.should be_valid
|
30
|
+
end
|
31
|
+
|
32
|
+
it ':foo.next should generate the :foo sequence' do
|
33
|
+
lambda { :foo.next }.should raise_error(/No such sequence: foo/)
|
34
|
+
Factory.sequence(:foo){|n| "Foo ##{n}" }
|
35
|
+
:foo.next.should == 'Foo #1'
|
36
|
+
:foo.next.should == 'Foo #2'
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require 'factory_girl'
|
4
|
+
require File.dirname(__FILE__) + '/../lib/factory_girl_extensions'
|
5
|
+
|
6
|
+
#
|
7
|
+
# a class that we can use to test factory_girl_extensions with
|
8
|
+
#
|
9
|
+
class Dog
|
10
|
+
attr_accessor :name, :breed
|
11
|
+
|
12
|
+
def initialize options = {}
|
13
|
+
options.each {|k,v| instance_variable_set "@#{k}", v }
|
14
|
+
end
|
15
|
+
|
16
|
+
def save
|
17
|
+
valid?
|
18
|
+
end
|
19
|
+
|
20
|
+
def valid?
|
21
|
+
! @name.blank?
|
22
|
+
end
|
23
|
+
|
24
|
+
def save!
|
25
|
+
if valid?
|
26
|
+
true
|
27
|
+
else
|
28
|
+
raise 'Invalid Dog!'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remi-factory_girl_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- remi
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-29 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -35,6 +35,9 @@ files:
|
|
35
35
|
- VERSION.yml
|
36
36
|
- README.rdoc
|
37
37
|
- lib/factory_girl_extensions.rb
|
38
|
+
- spec/dog_spec.rb
|
39
|
+
- spec/spec_helper.rb
|
40
|
+
- spec/extensions_spec.rb
|
38
41
|
has_rdoc: true
|
39
42
|
homepage: http://github.com/remi/factory_girl_extensions
|
40
43
|
post_install_message:
|