ruby_ext 4.0.2 → 4.0.3
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/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
|