ruby_ext 4.0.2 → 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rspec_ext.rb +6 -2
- data/lib/rspec_ext/factory.rb +27 -6
- data/lib/ruby_ext/more/callbacks_proxy.rb +3 -0
- data/spec/rspec_ext/factory_spec.rb +30 -7
- metadata +3 -3
data/lib/rspec_ext.rb
CHANGED
@@ -8,6 +8,10 @@ require 'rspec_ext/misc'
|
|
8
8
|
|
9
9
|
# FactoryGirl replacement.
|
10
10
|
autoload :Factory, 'rspec_ext/factory'
|
11
|
-
def factory
|
12
|
-
|
11
|
+
def factory *args
|
12
|
+
if args.empty?
|
13
|
+
$factory ||= Factory.new
|
14
|
+
else
|
15
|
+
factory.auto *args
|
16
|
+
end
|
13
17
|
end
|
data/lib/rspec_ext/factory.rb
CHANGED
@@ -45,15 +45,33 @@ class Factory
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def build name, attributes = {}, &block
|
48
|
-
|
49
|
-
|
48
|
+
old = creation_method
|
49
|
+
begin
|
50
|
+
self.creation_method ||= :build
|
51
|
+
|
52
|
+
builder = registry[name] || raise("no definition for :#{name}!")
|
53
|
+
builder.build attributes, &block
|
54
|
+
ensure
|
55
|
+
self.creation_method = old
|
56
|
+
end
|
50
57
|
end
|
51
|
-
alias_method :[], :build
|
52
58
|
|
53
59
|
def create name, attributes = {}, &block
|
54
|
-
|
55
|
-
|
56
|
-
|
60
|
+
old = creation_method
|
61
|
+
begin
|
62
|
+
self.creation_method ||= :create
|
63
|
+
|
64
|
+
o = build name, attributes, &block
|
65
|
+
o.respond_to?(:save!) ? o.save! : o.save
|
66
|
+
o
|
67
|
+
ensure
|
68
|
+
self.creation_method = old
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def auto *args, &block
|
73
|
+
method = creation_method || raise("creation method not defined!")
|
74
|
+
send method, *args, &block
|
57
75
|
end
|
58
76
|
|
59
77
|
def next name = :general
|
@@ -61,4 +79,7 @@ class Factory
|
|
61
79
|
counters[name] += 1
|
62
80
|
v
|
63
81
|
end
|
82
|
+
|
83
|
+
protected
|
84
|
+
attr_accessor :creation_method
|
64
85
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Factory" do
|
4
4
|
before do
|
5
5
|
factory.registry.clear
|
6
6
|
factory.counters.clear
|
7
7
|
end
|
8
|
-
after{remove_constants :User}
|
8
|
+
after{remove_constants :User, :ATmp, :BTmp}
|
9
9
|
|
10
|
-
it "
|
10
|
+
it "should build objects from definition" do
|
11
11
|
factory.define :user, class: 'OpenObject' do |u|
|
12
12
|
u.name = 'an_user'
|
13
13
|
end
|
@@ -16,7 +16,7 @@ describe "factory" do
|
|
16
16
|
{name: 'an_user', password: 'abc', roles: %w(user)}.to_openobject
|
17
17
|
end
|
18
18
|
|
19
|
-
it "parent" do
|
19
|
+
it "should provide parent to represent hierarchies" do
|
20
20
|
factory.define :user, class: 'OpenObject' do |u|
|
21
21
|
u.name = 'an_user'
|
22
22
|
end
|
@@ -29,7 +29,7 @@ describe "factory" do
|
|
29
29
|
{name: 'a_manager', password: 'abc', roles: %w(manager)}.to_openobject
|
30
30
|
end
|
31
31
|
|
32
|
-
it "create" do
|
32
|
+
it "should create create objects" do
|
33
33
|
stub = self.stub
|
34
34
|
factory.define :user, class: stub
|
35
35
|
factory.define :manager, parent: :user
|
@@ -39,12 +39,35 @@ describe "factory" do
|
|
39
39
|
factory.create :manager
|
40
40
|
end
|
41
41
|
|
42
|
-
it "input
|
42
|
+
it "should validate input" do
|
43
43
|
-> {factory.define :user}.should raise_error(/provided for :user/)
|
44
44
|
end
|
45
45
|
|
46
|
-
it "counters" do
|
46
|
+
it "should provide counters" do
|
47
47
|
factory.next(:id).should == 0
|
48
48
|
factory.next(:id).should == 1
|
49
49
|
end
|
50
|
+
|
51
|
+
it "should use correct creation method (build / create) in associations" do
|
52
|
+
class ATmp
|
53
|
+
attr_accessor :b
|
54
|
+
def save!; end
|
55
|
+
end
|
56
|
+
|
57
|
+
class BTmp
|
58
|
+
attr_accessor :saved
|
59
|
+
def save!
|
60
|
+
@saved = true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
factory.define :a, class: 'ATmp' do |o|
|
65
|
+
# b will be either build or create, method will be choosen automatically.
|
66
|
+
o.b = factory :b
|
67
|
+
end
|
68
|
+
factory.define :b, class: 'BTmp'
|
69
|
+
|
70
|
+
factory.build(:a).b.saved.should be_nil
|
71
|
+
factory.create(:a).b.saved.should be_true
|
72
|
+
end
|
50
73
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-19 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
|
-
rubygems_version: 1.8.
|
93
|
+
rubygems_version: 1.8.10
|
94
94
|
signing_key:
|
95
95
|
specification_version: 3
|
96
96
|
summary: Ruby Extensions
|