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.
@@ -8,6 +8,10 @@ require 'rspec_ext/misc'
8
8
 
9
9
  # FactoryGirl replacement.
10
10
  autoload :Factory, 'rspec_ext/factory'
11
- def factory name = nil
12
- name ? factory.build(name) : $factory ||= Factory.new
11
+ def factory *args
12
+ if args.empty?
13
+ $factory ||= Factory.new
14
+ else
15
+ factory.auto *args
16
+ end
13
17
  end
@@ -45,15 +45,33 @@ class Factory
45
45
  end
46
46
 
47
47
  def build name, attributes = {}, &block
48
- builder = registry[name] || raise("no definition for :#{name}!")
49
- builder.build attributes, &block
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
- o = build name, attributes, &block
55
- o.respond_to?(:save!) ? o.save! : o.save
56
- o
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
@@ -9,6 +9,9 @@ class RubyExt::CallbacksProxy < BasicObject
9
9
  true
10
10
  end
11
11
 
12
+ alias_method :send, :__send__
13
+ alias_method :public_send, :__send__
14
+
12
15
  protected
13
16
  def method_missing m, *args, &block
14
17
  object.run_callbacks @callback_name, m do
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "factory" do
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 "basic" do
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 validations" do
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.2
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-11-22 00:00:00.000000000Z
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.6
93
+ rubygems_version: 1.8.10
94
94
  signing_key:
95
95
  specification_version: 3
96
96
  summary: Ruby Extensions