machinist 2.0.0.beta2 → 2.0

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.
@@ -18,7 +18,7 @@ describe Machinist::Machinable do
18
18
  MachinableSpecs::Post.clear_blueprints!
19
19
  end
20
20
 
21
- it "should make an object" do
21
+ it "makes an object" do
22
22
  MachinableSpecs::Post.blueprint do
23
23
  title { "First Post" }
24
24
  end
@@ -28,7 +28,7 @@ describe Machinist::Machinable do
28
28
  post.title.should == "First Post"
29
29
  end
30
30
 
31
- it "should make an object from a named blueprint" do
31
+ it "makes an object from a named blueprint" do
32
32
  MachinableSpecs::Post.blueprint do
33
33
  title { "First Post" }
34
34
  body { "Woot!" }
@@ -44,7 +44,7 @@ describe Machinist::Machinable do
44
44
  post.body.should == "Woot!"
45
45
  end
46
46
 
47
- it "should make an array of objects" do
47
+ it "makes an array of objects" do
48
48
  MachinableSpecs::Post.blueprint do
49
49
  title { "First Post" }
50
50
  end
@@ -58,7 +58,7 @@ describe Machinist::Machinable do
58
58
  end
59
59
  end
60
60
 
61
- it "should make array attributes from the blueprint" do
61
+ it "makes array attributes from the blueprint" do
62
62
  MachinableSpecs::Comment.blueprint { }
63
63
  MachinableSpecs::Post.blueprint do
64
64
  comments(3) { MachinableSpecs::Comment.make }
@@ -72,7 +72,7 @@ describe Machinist::Machinable do
72
72
  end
73
73
  end
74
74
 
75
- it "should fail without a blueprint" do
75
+ it "fails without a blueprint" do
76
76
  expect do
77
77
  MachinableSpecs::Post.make
78
78
  end.should raise_error(Machinist::NoBlueprintError) do |exception|
@@ -88,7 +88,7 @@ describe Machinist::Machinable do
88
88
  end
89
89
  end
90
90
 
91
- it "should fail when calling make! on an unsavable object" do
91
+ it "fails when calling make! on an unsavable object" do
92
92
  MachinableSpecs::Post.blueprint { }
93
93
 
94
94
  expect do
@@ -5,7 +5,3 @@ require 'rubygems'
5
5
  require 'test/unit'
6
6
  require 'rspec'
7
7
  require 'machinist'
8
-
9
- Machinist.configure do |config|
10
- config.cache_objects = true
11
- end
metadata CHANGED
@@ -1,14 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machinist
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1848230038
5
- prerelease: true
4
+ hash: 3
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
- - 0
10
- - beta2
11
- version: 2.0.0.beta2
9
+ version: "2.0"
12
10
  platform: ruby
13
11
  authors:
14
12
  - Pete Yandell
@@ -16,21 +14,105 @@ autorequire:
16
14
  bindir: bin
17
15
  cert_chain: []
18
16
 
19
- date: 2010-07-07 00:00:00 +10:00
20
- default_executable:
21
- dependencies: []
22
-
17
+ date: 2012-01-13 00:00:00 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: activerecord
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: mysql
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :development
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: rcov
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ type: :development
74
+ version_requirements: *id004
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ prerelease: false
78
+ requirement: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ type: :development
88
+ version_requirements: *id005
89
+ - !ruby/object:Gem::Dependency
90
+ name: rdoc
91
+ prerelease: false
92
+ requirement: &id006 !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ type: :development
102
+ version_requirements: *id006
23
103
  description:
24
- email: pete@notahat.com
104
+ email:
105
+ - pete@notahat.com
25
106
  executables: []
26
107
 
27
108
  extensions: []
28
109
 
29
- extra_rdoc_files:
30
- - README.markdown
110
+ extra_rdoc_files: []
111
+
31
112
  files:
32
113
  - .gitignore
33
114
  - Gemfile
115
+ - Gemfile.lock
34
116
  - MIT-LICENSE
35
117
  - README.markdown
36
118
  - Rakefile
@@ -45,29 +127,24 @@ files:
45
127
  - lib/machinist/active_record/blueprint.rb
46
128
  - lib/machinist/active_record/lathe.rb
47
129
  - lib/machinist/blueprint.rb
48
- - lib/machinist/configuration.rb
49
130
  - lib/machinist/exceptions.rb
50
131
  - lib/machinist/lathe.rb
51
132
  - lib/machinist/machinable.rb
52
- - lib/machinist/shop.rb
53
- - lib/machinist/warehouse.rb
133
+ - lib/machinist/version.rb
54
134
  - machinist.gemspec
55
135
  - spec/active_record_spec.rb
56
136
  - spec/blueprint_spec.rb
57
137
  - spec/exceptions_spec.rb
58
138
  - spec/inheritance_spec.rb
59
139
  - spec/machinable_spec.rb
60
- - spec/shop_spec.rb
61
140
  - spec/spec_helper.rb
62
141
  - spec/support/active_record_environment.rb
63
- - spec/warehouse_spec.rb
64
- has_rdoc: true
65
142
  homepage: http://github.com/notahat/machinist
66
143
  licenses: []
67
144
 
68
145
  post_install_message:
69
- rdoc_options:
70
- - --charset=UTF-8
146
+ rdoc_options: []
147
+
71
148
  require_paths:
72
149
  - lib
73
150
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -82,18 +159,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
159
  required_rubygems_version: !ruby/object:Gem::Requirement
83
160
  none: false
84
161
  requirements:
85
- - - ">"
162
+ - - ">="
86
163
  - !ruby/object:Gem::Version
87
- hash: 25
164
+ hash: 3
88
165
  segments:
89
- - 1
90
- - 3
91
- - 1
92
- version: 1.3.1
166
+ - 0
167
+ version: "0"
93
168
  requirements: []
94
169
 
95
- rubyforge_project:
96
- rubygems_version: 1.3.7
170
+ rubyforge_project: machinist
171
+ rubygems_version: 1.8.10
97
172
  signing_key:
98
173
  specification_version: 3
99
174
  summary: Fixtures aren't fun. Machinist is.
@@ -103,7 +178,5 @@ test_files:
103
178
  - spec/exceptions_spec.rb
104
179
  - spec/inheritance_spec.rb
105
180
  - spec/machinable_spec.rb
106
- - spec/shop_spec.rb
107
181
  - spec/spec_helper.rb
108
182
  - spec/support/active_record_environment.rb
109
- - spec/warehouse_spec.rb
@@ -1,32 +0,0 @@
1
- module Machinist
2
-
3
- # Configure Machinist.
4
- #
5
- # To change Machinist configuration, do something like this in your
6
- # config/environments/test.rb or somewhere similar:
7
- #
8
- # Machinist.configure do |config|
9
- # config.cache_objects = false
10
- # end
11
- class Configuration
12
- # Set this to false to disable object caching. Defaults to true.
13
- attr_accessor :cache_objects
14
-
15
- def cache_objects? #:nodoc:
16
- @cache_objects
17
- end
18
-
19
- def initialize #:nodoc:
20
- self.cache_objects = true
21
- end
22
- end
23
-
24
- def self.configuration
25
- @configuration ||= Configuration.new
26
- end
27
-
28
- def self.configure
29
- yield(configuration)
30
- end
31
-
32
- end
@@ -1,52 +0,0 @@
1
- module Machinist
2
-
3
- # The shop takes care of caching database objects.
4
- #
5
- # Calling make! on a class requests objects from the shop; you don't
6
- # normally access the shop directly.
7
- #
8
- # Read more about object caching on the
9
- # wiki[http://wiki.github.com/notahat/machinist/object-caching].
10
- class Shop
11
-
12
- # Return the singleton Shop instance.
13
- def self.instance
14
- @instance ||= Shop.new
15
- end
16
-
17
- def initialize #:nodoc:
18
- reset!
19
- end
20
-
21
- # Throw out the entire collection of cached objects.
22
- def reset!
23
- @warehouse = Warehouse.new
24
- restock
25
- end
26
-
27
- # Restock the shop with all the cached objects we've got.
28
- #
29
- # This should be called before each test.
30
- def restock
31
- @back_room = @warehouse.clone
32
- end
33
-
34
- # Buy a (possibly cached) object from the shop.
35
- #
36
- # This is just like constructing an object by calling Blueprint#make!,
37
- # but it will return a previously cached object if one is available.
38
- def buy(blueprint, attributes = {})
39
- raise BlueprintCantSaveError.new(blueprint) unless blueprint.respond_to?(:make!)
40
-
41
- shelf = @back_room[blueprint, attributes]
42
- if shelf.empty?
43
- object = blueprint.outside_transaction { blueprint.make!(attributes) }
44
- @warehouse[blueprint, attributes] << blueprint.box(object)
45
- object
46
- else
47
- blueprint.unbox(shelf.shift)
48
- end
49
- end
50
-
51
- end
52
- end
@@ -1,36 +0,0 @@
1
- module Machinist
2
-
3
- # A Warehouse is a hash supports lists as keys.
4
- #
5
- # It's used for storing cached objects created by Machinist::Shop.
6
- #
7
- # warehouse[1, 2] = "Hello, world!"
8
- # warehouse[1, 2] # => "Hello, world!"
9
- class Warehouse < Hash
10
-
11
- # Assign a value for the given list of keys.
12
- def []=(*keys)
13
- value = keys.pop
14
- super(keys, value)
15
- end
16
-
17
- # Return the value for the given list of keys.
18
- #
19
- # If the list of keys doesn't exist in the hash, this assigns a new empty
20
- # array to that list of keys.
21
- def [](*keys)
22
- self[*keys] = [] if !has_key?(keys)
23
- super(keys)
24
- end
25
-
26
- # Return a new warehouse with the same keys, and dups of all the values.
27
- def clone
28
- clone = Warehouse.new
29
- each_pair do |key, value|
30
- clone[*key] = value.dup
31
- end
32
- clone
33
- end
34
-
35
- end
36
- end
@@ -1,94 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
- require 'support/active_record_environment'
3
-
4
- describe Machinist::Shop do
5
-
6
- before(:each) do
7
- @shop = Machinist::Shop.new
8
- end
9
-
10
- def fake_a_test
11
- ActiveRecord::Base.transaction do
12
- @shop.restock
13
- yield
14
- raise ActiveRecord::Rollback
15
- end
16
- end
17
-
18
- it "should cache an object" do
19
- blueprint = Machinist::ActiveRecord::Blueprint.new(Post) { }
20
-
21
- post_a, post_b = nil, nil
22
- fake_a_test { post_a = @shop.buy(blueprint) }
23
- fake_a_test { post_b = @shop.buy(blueprint) }
24
-
25
- post_b.should == post_a
26
- post_b.should_not equal(post_a)
27
- end
28
-
29
- it "should cache an object with attributes" do
30
- blueprint = Machinist::ActiveRecord::Blueprint.new(Post) { }
31
-
32
- post_a, post_b = nil, nil
33
- fake_a_test { post_a = @shop.buy(blueprint, :title => "Test Title") }
34
- fake_a_test { post_b = @shop.buy(blueprint, :title => "Test Title") }
35
-
36
- post_b.should == post_a
37
- post_b.should_not equal(post_a)
38
- end
39
-
40
- it "should not confuse objects with different blueprints" do
41
- blueprint_a = Machinist::ActiveRecord::Blueprint.new(Post) { }
42
- blueprint_b = Machinist::ActiveRecord::Blueprint.new(Post) { }
43
-
44
- post_a, post_b = nil, nil
45
- fake_a_test { post_a = @shop.buy(blueprint_a) }
46
- fake_a_test { post_b = @shop.buy(blueprint_b) }
47
-
48
- post_b.should_not == post_a
49
- end
50
-
51
- it "should not confuse objects with the same blueprint but different attributes" do
52
- blueprint = Machinist::ActiveRecord::Blueprint.new(Post) { }
53
-
54
- post_a, post_b = nil, nil
55
- fake_a_test { post_a = @shop.buy(blueprint, :title => "A Title") }
56
- fake_a_test { post_b = @shop.buy(blueprint, :title => "Not A Title") }
57
-
58
- post_b.should_not == post_a
59
- end
60
-
61
- it "should cache multiple similar objects" do
62
- blueprint = Machinist::ActiveRecord::Blueprint.new(Post) { }
63
-
64
- post_a, post_b = nil, nil
65
- fake_a_test do
66
- post_a = @shop.buy(blueprint, :title => "Test Title")
67
- post_b = @shop.buy(blueprint, :title => "Test Title")
68
- post_b.should_not == post_a
69
- end
70
-
71
- fake_a_test do
72
- @shop.buy(blueprint, :title => "Test Title").should == post_a
73
- @shop.buy(blueprint, :title => "Test Title").should == post_b
74
- post_c = @shop.buy(blueprint, :title => "Test Title")
75
- post_c.should_not == post_a
76
- post_c.should_not == post_b
77
- end
78
- end
79
-
80
- it "should ensure future copies of a cached object do not reflect changes to the original" do
81
- blueprint = Machinist::ActiveRecord::Blueprint.new(Post) { }
82
-
83
- post_a, post_b = nil, nil
84
- fake_a_test do
85
- post_a = @shop.buy(blueprint, :title => "Test Title")
86
- post_a.title = "Changed Title"
87
- post_a.save!
88
- end
89
- fake_a_test { post_b = @shop.buy(blueprint, :title => "Test Title") }
90
-
91
- post_b.title.should == "Test Title"
92
- end
93
-
94
- end