brightbox-object-factory 0.1.3 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/Manifest +11 -0
- data/README.rdoc +23 -1
- data/Rakefile +1 -1
- data/github.rb +22 -0
- data/lib/object_factory.rb +25 -2
- data/object-factory.gemspec +3 -3
- data/spec/object_spec.rb +35 -0
- metadata +4 -2
data/CHANGELOG
CHANGED
data/Manifest
ADDED
data/README.rdoc
CHANGED
@@ -10,7 +10,7 @@ If you don't use the a_saved method then it should work with any type of model,
|
|
10
10
|
|
11
11
|
== Usage
|
12
12
|
|
13
|
-
See the wiki page at http://github.com/brightbox/object-factory/wikis/home for the latest docs.
|
13
|
+
See the wiki page at http://github.com/brightbox/object-factory/wikis/home for the latest docs. In particular, http://wiki.github.com/brightbox/object-factory/usage-with-rails-rspec-and-cucumber is a pretty good example of how to get started.
|
14
14
|
|
15
15
|
However, it works something like this:
|
16
16
|
|
@@ -28,11 +28,33 @@ And your options are:
|
|
28
28
|
* :set => { :field3 => 'value3', :field4 => 'value4' }: sets the given fields to the supplied static values
|
29
29
|
* :generate => { :field5 => lambda { Date.today } }: sets the given fields to the supplied dynamic values
|
30
30
|
|
31
|
+
If you want to generate a unique value yourself, you can use Object::Factory's next_number call (which has a simple shortcut a_number).
|
32
|
+
|
33
|
+
:generate => { :field => "unique-value-#{a_number}" }
|
34
|
+
|
35
|
+
== Cleaning up
|
36
|
+
|
37
|
+
(currently only for ActiveRecord)
|
38
|
+
|
39
|
+
If you register your (ActiveRecord) class with the clean_up option, then the factory can ensure that all instances are deleted. This is useful if you cannot use transactional_fixtures (for example using Watir or Culerity in your test suite).
|
40
|
+
|
41
|
+
Add a clean_up parameter when registering your classes:
|
42
|
+
|
43
|
+
when_creating_a Person, :auto_generate => [:first_name, :last_name], :clean_up => true
|
44
|
+
|
45
|
+
Then in your "after" section call:
|
46
|
+
|
47
|
+
Object.factory.clean_up
|
48
|
+
|
49
|
+
This will call delete_all on any registered classes (hence it is currently ActiveRecord only).
|
50
|
+
|
31
51
|
== Rails
|
32
52
|
|
33
53
|
To use this with rails, stick the following in your +environment.rb+:
|
34
54
|
|
35
55
|
config.gem "brightbox-object-factory", :lib => "object_factory", :source => "http://gems.github.com"
|
56
|
+
|
57
|
+
Also check out http://wiki.github.com/brightbox/object-factory/usage-with-rails-rspec-and-cucumber for more information on integrating Object-Factory with your application.
|
36
58
|
|
37
59
|
== Released under the MIT Licence
|
38
60
|
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('object-factory', '0.
|
5
|
+
Echoe.new('object-factory', '0.2.2') do | config |
|
6
6
|
config.description = 'A simple object factory to help you build valid objects in your tests'
|
7
7
|
config.url = 'http://github.com/brightbox/object-factory'
|
8
8
|
config.author = 'Brightbox Systems Ltd'
|
data/github.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
if ARGV.size < 1
|
5
|
+
puts "Usage: github-test.rb my-project.gemspec"
|
6
|
+
exit
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rubygems/specification'
|
10
|
+
data = File.read(ARGV[0])
|
11
|
+
spec = nil
|
12
|
+
|
13
|
+
if data !~ %r{!ruby/object:Gem::Specification}
|
14
|
+
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
15
|
+
else
|
16
|
+
spec = YAML.load(data)
|
17
|
+
end
|
18
|
+
|
19
|
+
spec.validate
|
20
|
+
|
21
|
+
puts spec
|
22
|
+
puts "OK"
|
data/lib/object_factory.rb
CHANGED
@@ -25,6 +25,14 @@ class Object
|
|
25
25
|
def reset
|
26
26
|
@confirmed_fields = {}
|
27
27
|
@generators = {}
|
28
|
+
@classes_for_clean_up = []
|
29
|
+
end
|
30
|
+
|
31
|
+
# clean up all instances
|
32
|
+
def clean_up
|
33
|
+
@classes_for_clean_up.each do | klass |
|
34
|
+
klass.delete_all
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
38
|
# Create a new instance of the given class with the given parameters and apply the auto-generated fields, according to the configured rules
|
@@ -59,6 +67,7 @@ class Object
|
|
59
67
|
need_to_generate_ip_addresses_for klass, options[:generate_ip_address] unless options[:generate_ip_address].nil?
|
60
68
|
need_to_set_values_for klass, options[:set] unless options[:set].nil?
|
61
69
|
need_to_set_generators_for klass, options[:generate] unless options[:generate].nil?
|
70
|
+
register_for_clean_up klass if options[:clean_up]
|
62
71
|
end
|
63
72
|
|
64
73
|
alias :when_creating_an :when_creating_a
|
@@ -69,6 +78,11 @@ class Object
|
|
69
78
|
@generator ||= ValueGenerator.new
|
70
79
|
end
|
71
80
|
|
81
|
+
# Generate a unique Integer
|
82
|
+
def next_number
|
83
|
+
generator.unique_integer
|
84
|
+
end
|
85
|
+
|
72
86
|
# A simple class that generates unique values
|
73
87
|
class ValueGenerator
|
74
88
|
def initialize
|
@@ -84,7 +98,7 @@ class Object
|
|
84
98
|
end
|
85
99
|
end
|
86
100
|
|
87
|
-
|
101
|
+
# Error raised when create_and_save_a cannot save the object
|
88
102
|
class CannotSaveError < RuntimeError; end
|
89
103
|
|
90
104
|
# print the rules for a given class
|
@@ -97,7 +111,7 @@ class Object
|
|
97
111
|
end
|
98
112
|
end
|
99
113
|
|
100
|
-
|
114
|
+
private
|
101
115
|
|
102
116
|
def symbol_for object
|
103
117
|
klass = object.is_a?(Class) ? object : object.class
|
@@ -170,6 +184,10 @@ class Object
|
|
170
184
|
instance.send("#{field_name.to_sym}=".to_sym, value) unless parameters.has_key?(field_name.to_sym)
|
171
185
|
end
|
172
186
|
end
|
187
|
+
|
188
|
+
def register_for_clean_up klass
|
189
|
+
@classes_for_clean_up << klass
|
190
|
+
end
|
173
191
|
end
|
174
192
|
|
175
193
|
end
|
@@ -196,4 +214,9 @@ end
|
|
196
214
|
|
197
215
|
alias when_creating_an when_creating_a
|
198
216
|
|
217
|
+
# Short-cut method for Object::Factory#next_number
|
218
|
+
def a_number
|
219
|
+
Object.factory.next_number
|
220
|
+
end
|
221
|
+
|
199
222
|
THE_OBJECT_FACTORY_INSTANCE = Object::Factory.new
|
data/object-factory.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{object-factory}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.2.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Brightbox Systems Ltd"]
|
9
|
-
s.date = %q{
|
9
|
+
s.date = %q{2009-05-21}
|
10
10
|
s.description = %q{A simple object factory to help you build valid objects in your tests}
|
11
11
|
s.email = %q{hello@brightbox.co.uk}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "lib/object_factory.rb", "README.rdoc", "tasks/rspec.rake"]
|
13
|
-
s.files = ["CHANGELOG", "init.rb", "lib/object_factory.rb", "Manifest", "object-factory.gemspec", "Rakefile", "README.rdoc", "spec/object_spec.rb", "spec/spec.opts", "tasks/rspec.rake"]
|
13
|
+
s.files = ["CHANGELOG", "github.rb", "init.rb", "lib/object_factory.rb", "Manifest", "object-factory.gemspec", "Rakefile", "README.rdoc", "spec/object_spec.rb", "spec/spec.opts", "tasks/rspec.rake"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://github.com/brightbox/object-factory}
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Object-factory", "--main", "README.rdoc"]
|
data/spec/object_spec.rb
CHANGED
@@ -97,6 +97,7 @@ describe Object::Factory, "creating simple instances" do
|
|
97
97
|
it "should raise an exception if the auto-saved object cannot be saved" do
|
98
98
|
@test_instance = mock('Test Instance')
|
99
99
|
TestClass.should_receive(:new).with({:some => :values}).and_return(@test_instance)
|
100
|
+
@test_instance.should_receive(:errors).and_return(['errors'])
|
100
101
|
@test_instance.should_receive(:save).and_return(false)
|
101
102
|
|
102
103
|
lambda {
|
@@ -299,4 +300,38 @@ describe Object::Factory, "using lambdas to generate values" do
|
|
299
300
|
@instance.field.should == 'poop'
|
300
301
|
@instance.another_field.should == Date.today.to_s
|
301
302
|
end
|
303
|
+
end
|
304
|
+
|
305
|
+
describe Object::Factory, "generating sequential numbers" do
|
306
|
+
before :each do
|
307
|
+
Object.factory.reset
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should generate a sequential number" do
|
311
|
+
first = Object.factory.next_number
|
312
|
+
second = Object.factory.next_number
|
313
|
+
|
314
|
+
second.should == first + 1
|
315
|
+
end
|
316
|
+
|
317
|
+
it "should use the shortcut to generate a sequential number" do
|
318
|
+
Object.factory.should_receive(:next_number).and_return(1)
|
319
|
+
number = a_number
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
describe Object::Factory, "cleaning up ActiveRecord models" do
|
324
|
+
before :each do
|
325
|
+
Object.factory.reset
|
326
|
+
end
|
327
|
+
|
328
|
+
it "should delete all instances for registered classes" do
|
329
|
+
Object.factory.when_creating_a TestClass, :auto_confirm => :password, :clean_up => true
|
330
|
+
Object.factory.when_creating_an AnotherTestClass, :clean_up => true
|
331
|
+
|
332
|
+
TestClass.should_receive(:delete_all).and_return(0)
|
333
|
+
AnotherTestClass.should_receive(:delete_all).and_return(0)
|
334
|
+
|
335
|
+
Object.factory.clean_up
|
336
|
+
end
|
302
337
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brightbox-object-factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brightbox Systems Ltd
|
@@ -9,11 +9,12 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-05-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: brightbox-rujitsu
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -34,6 +35,7 @@ extra_rdoc_files:
|
|
34
35
|
- tasks/rspec.rake
|
35
36
|
files:
|
36
37
|
- CHANGELOG
|
38
|
+
- github.rb
|
37
39
|
- init.rb
|
38
40
|
- lib/object_factory.rb
|
39
41
|
- Manifest
|