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 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
- To use these extensions, <tt>require 'factory_girl_extensions'</tt> in your <tt>factories.rb</tt> (or wherever)
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
- User.generate # this is equivalent to Factory(:user) or Factory.create(:user)
17
- User.gen # this is a shortcut alias for #generate
18
- User.build # this is equivalent to Factory.build(:user)
19
- User.gen :name => 'Bob' # this is equivalent to Factory(:user, :name => 'Bob')
20
- :email.next # this is equivalent to Factory.next(:email)
21
- :admin_user.gen # this is equivalent to Factory.gen(:admin_user)
22
- 'admin_user'.gen # this is equivalent to Factory.gen(:admin_user)
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
@@ -22,6 +22,7 @@ end
22
22
 
23
23
  Spec::Rake::SpecTask.new do |t|
24
24
  t.spec_files = FileList['spec/**/*_spec.rb']
25
+ t.spec_opts = ['-c', '-f specdoc']
25
26
  end
26
27
 
27
28
  desc "Run all examples with RCov"
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 1
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 1
4
+ :minor: 2
@@ -9,13 +9,16 @@ require 'factory_girl'
9
9
  #
10
10
  # == Usage
11
11
  #
12
- # User.generate # this is equivalent to Factory(:user) or Factory.create(:user)
13
- # User.gen # this is a shortcut alias for #generate
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' # this is equivalent to Factory(:user, :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
- # :admin_user.gen # this is equivalent to Factory.gen(:admin_user)
18
- # 'admin_user'.gen # this is equivalent to Factory.gen(:admin_user)
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
- message = case name.to_s
31
+ messages = case name.to_s
32
+ when /^gen(erate)?\!$/
33
+ [:build, :save!]
29
34
  when /^gen(erate)?$/
30
- :create
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 message
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
- Factory.send message, factory_name, *args
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
@@ -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.1.1
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-25 00:00:00 -07:00
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: