remi-factory_girl_extensions 0.1.1
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 +48 -0
- data/Rakefile +57 -0
- data/VERSION.yml +4 -0
- data/lib/factory_girl_extensions.rb +48 -0
- metadata +66 -0
data/README.rdoc
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= factory_girl extensions
|
2
|
+
|
3
|
+
FactoryGirlExtensions is a simple set of extensions that I typically
|
4
|
+
like to use on projects, when using factory_girl
|
5
|
+
|
6
|
+
== Install
|
7
|
+
|
8
|
+
$ sudo gem install remi-factory_girl_extensions -s http://gems.github.com
|
9
|
+
|
10
|
+
== Usage
|
11
|
+
|
12
|
+
To use these extensions, <tt>require 'factory_girl_extensions'</tt> in your <tt>factories.rb</tt> (or wherever)
|
13
|
+
|
14
|
+
FactoryGirlExtensions adds some shortcut methods. Here are some examples:
|
15
|
+
|
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)
|
23
|
+
|
24
|
+
# TODO
|
25
|
+
I think I would like to add User.gen_admin or maybe User.gen(:admin)
|
26
|
+
as a shortcut for generating an :admin_user factory
|
27
|
+
|
28
|
+
=== Why User.gen instead of Factory(:user)
|
29
|
+
|
30
|
+
Personally, I really dislike the <tt>Factory(:user)</tt> syntax. When you have a lot of
|
31
|
+
factories, it's hard to see the names of the actual model classes. I don't like this:
|
32
|
+
|
33
|
+
Factory(:user).should be_valid
|
34
|
+
Factory(:name, :string => 'something').should be_awesome
|
35
|
+
Factory(:comment, :user => Factory(:user)).should be_cool
|
36
|
+
Factory(:user).should do_some_stuff_with(:things)
|
37
|
+
|
38
|
+
To me, the thing that draws my attention in that code snippet is <tt>Factory</tt>.
|
39
|
+
I don't care about <tt>Factory</tt>, I care about the actual models! I prefer:
|
40
|
+
|
41
|
+
User.gen.should be_valid
|
42
|
+
Name.gen( :string => 'something' ).should be_awesome
|
43
|
+
Comment.gen( :user => User.gen ).should be_cool
|
44
|
+
User.gen.should do_some_stuff_with(:things)
|
45
|
+
|
46
|
+
If you syntax highlight the above code, it's likely that the model names will
|
47
|
+
be the things that really jump out at you. Even in plain text, it's easier to
|
48
|
+
understand that code than the above <tt>Factory(:code)</tt> in my opinion.
|
data/Rakefile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'jeweler'
|
8
|
+
Jeweler::Tasks.new do |s|
|
9
|
+
s.name = "factory_girl_extensions"
|
10
|
+
s.summary = "helpful extensions for factory_girl"
|
11
|
+
s.email = "remi@remitaylor.com"
|
12
|
+
s.homepage = "http://github.com/remi/factory_girl_extensions"
|
13
|
+
s.description = "helpful extensions for factory_girl"
|
14
|
+
s.authors = %w( remi )
|
15
|
+
s.files = FileList["[A-Z]*", "{bin,lib,spec,examples}/**/*"]
|
16
|
+
# s.executables = "foo"
|
17
|
+
s.add_dependency 'thoughtbot-factory_girl'
|
18
|
+
end
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
21
|
+
end
|
22
|
+
|
23
|
+
Spec::Rake::SpecTask.new do |t|
|
24
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Run all examples with RCov"
|
28
|
+
Spec::Rake::SpecTask.new('rcov') do |t|
|
29
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
30
|
+
t.rcov = true
|
31
|
+
end
|
32
|
+
|
33
|
+
Rake::RDocTask.new do |rdoc|
|
34
|
+
rdoc.rdoc_dir = 'rdoc'
|
35
|
+
rdoc.title = 'factory_girl_extensions'
|
36
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
37
|
+
rdoc.rdoc_files.include('README.rdoc')
|
38
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'Confirm that gemspec is $SAFE'
|
42
|
+
task :safe do
|
43
|
+
require 'yaml'
|
44
|
+
require 'rubygems/specification'
|
45
|
+
data = File.read('factory_girl_extensions.gemspec')
|
46
|
+
spec = nil
|
47
|
+
if data !~ %r{!ruby/object:Gem::Specification}
|
48
|
+
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
49
|
+
else
|
50
|
+
spec = YAML.load(data)
|
51
|
+
end
|
52
|
+
spec.validate
|
53
|
+
puts spec
|
54
|
+
puts "OK"
|
55
|
+
end
|
56
|
+
|
57
|
+
task :default => :spec
|
data/VERSION.yml
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'factory_girl'
|
4
|
+
|
5
|
+
# Adds helpful factory_girl methods to objects.
|
6
|
+
#
|
7
|
+
# This uses method_missing just incase the given Object
|
8
|
+
# already responds to one of these methods.
|
9
|
+
#
|
10
|
+
# == Usage
|
11
|
+
#
|
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.build # this is equivalent to Factory.build(:user)
|
15
|
+
# User.gen :name => 'Bob' # this is equivalent to Factory(:user, :name => 'Bob')
|
16
|
+
# :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
|
+
#
|
20
|
+
# == TODO
|
21
|
+
#
|
22
|
+
# * properly implement <tt>respond_to?</tt>
|
23
|
+
# * add syntax like User.gen_admin or User.gen(:admin) for generating an :admin_user
|
24
|
+
#
|
25
|
+
module FactoryGirlExtensions
|
26
|
+
def method_missing name, *args
|
27
|
+
|
28
|
+
message = case name.to_s
|
29
|
+
when /^gen(erate)?$/
|
30
|
+
:create
|
31
|
+
when 'build'
|
32
|
+
:build
|
33
|
+
when 'next'
|
34
|
+
:next
|
35
|
+
end
|
36
|
+
|
37
|
+
if message
|
38
|
+
# if this is an instance of String/Symbol use this instance as the factory name, else use the class name
|
39
|
+
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
|
41
|
+
else
|
42
|
+
super
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
Object.send :include, FactoryGirlExtensions
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: remi-factory_girl_extensions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- remi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-25 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-factory_girl
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: helpful extensions for factory_girl
|
26
|
+
email: remi@remitaylor.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
33
|
+
files:
|
34
|
+
- Rakefile
|
35
|
+
- VERSION.yml
|
36
|
+
- README.rdoc
|
37
|
+
- lib/factory_girl_extensions.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/remi/factory_girl_extensions
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options:
|
42
|
+
- --inline-source
|
43
|
+
- --charset=UTF-8
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: "0"
|
51
|
+
version:
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
version:
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.2.0
|
62
|
+
signing_key:
|
63
|
+
specification_version: 2
|
64
|
+
summary: helpful extensions for factory_girl
|
65
|
+
test_files: []
|
66
|
+
|