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.
@@ -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