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 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,4 @@
1
+ ---
2
+ :patch: 1
3
+ :major: 0
4
+ :minor: 1
@@ -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
+