prefactory 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c1ddab3ed8d9c159db541d5011985dd2c60aebd
4
- data.tar.gz: 0a91f6a21b04da2ba70625301c48ad59ae0e4717
3
+ metadata.gz: b705b09aea1ed091cbd6a46aabd4df33438cb214
4
+ data.tar.gz: 7f82cb399ee76a7d2aea8ceed15dc6d57b849b7b
5
5
  SHA512:
6
- metadata.gz: 879ff9d5bad02048965b36d0eec6b6404891ca3c9c7df24c50e4b55c3e41ac73e0d46fe4f9d9a6497f8557cd97a25edea5e4abf0da56185fee783aaf76cfcb0e
7
- data.tar.gz: f588c5ccb00de311fb867e3ec0e36332fa6959fd396cf04f65b888dc70307c2070b6cdbb15a860a1e47f1f21b5e3c99bec511ea87e36cf68c4a22befcd42cbdc
6
+ metadata.gz: c3e66b35c17a5cccda2760a423962ba89f04d9882aa6d7dbdebd006915ae1a706534bd5162ebaef35e04af29203024e86f11e726fc61dbf7b0c294e907049924
7
+ data.tar.gz: 6324783baa9b74fe4870ff811f21866b091aa4f89ca4ddc6eefde4359a6ac0a17e023335a63ab01d7903c11cb814ccdea80838c25daa6386fdb7a3bae08be434
@@ -0,0 +1 @@
1
+ prefactory
@@ -0,0 +1 @@
1
+ default
data/README.md CHANGED
@@ -68,34 +68,34 @@ describe User do
68
68
  # end
69
69
  set!(:other_friend) { create :user }
70
70
 
71
- context 'a new user has no friends' do
71
+ context 'a new user' do
72
72
 
73
- it { user.friends.count.should == 0 }
73
+ it { expect(user.friends.count).to eq 0 }
74
74
 
75
75
  context 'with a friend' do
76
76
  before(:all) { user.add_friend(friend) } # executes once
77
77
 
78
- it { user.friends.count.should == 1 }
78
+ it { expect(user.friends.count).to eq 1 }
79
79
 
80
80
  # these changes will be transparently rolled back
81
81
  it "allows removing the friend" do
82
82
  expect { user.remove_friend(friend) }.to_not raise_error
83
- user.friends.count.should == 0
83
+ expect(user.friends.count).to eq 0
84
84
  end
85
85
 
86
86
  it "disallows adding the same friend again" do
87
87
  expect { user.add_friend(friend) }.to raise_error
88
- user.friends.count.should == 1
88
+ expect(user.friends.count).to eq 1
89
89
  end
90
90
 
91
91
  # these changes will be transparently rolled back
92
92
  it "allows adding a different friend" do
93
93
  expect { user.add_friend(other_friend) }.to_not raise_error
94
- user.friends.count.should == 2
94
+ expect(user.friends.count).to eq 2
95
95
  end
96
96
 
97
- it { user.friends.should include friend }
98
- it { user.friends.should_not include other_friend }
97
+ it { expect(user.friends).to include friend }
98
+ it { expect(user.friends).not_to include other_friend }
99
99
  end
100
100
  end
101
101
  end
@@ -0,0 +1,11 @@
1
+ class PrefactoryLookup < ActiveRecord::Base
2
+ def self.create_table
3
+ conn = ActiveRecord::Base.connection
4
+ conn.create_table :prefactory_lookups, :force => true do |t|
5
+ t.column :key, :string
6
+ t.column :result_class, :string
7
+ t.column :result_id, :integer
8
+ t.index [:key], :unique => true
9
+ end
10
+ end
11
+ end
@@ -21,5 +21,5 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  module Prefactory
24
- VERSION = "0.3.1"
24
+ VERSION = "0.4.0"
25
25
  end
@@ -22,23 +22,28 @@
22
22
 
23
23
  require 'prefactory/active_record_integration'
24
24
  require 'rspec_around_all'
25
+ require 'prefactory/prefactory_lookup'
25
26
 
26
27
  module Prefactory
28
+ class NotDefined
29
+ end
27
30
 
28
31
  def prefactory_lookup(key)
29
- @prefactory[key]
32
+ PrefactoryLookup.where(:key => key).first
30
33
  end
31
34
 
32
35
  # instantiate, or access an already-instantiated-and-memoized, prefabricated object.
33
36
  def prefactory(key)
34
- lookup = prefactory_lookup(key)
35
- return nil unless lookup.present?
36
37
  @prefactory_memo ||= {}
37
- begin
38
- @prefactory_memo[key] ||= lookup[:class].find(lookup[:id])
39
- rescue
40
- end
41
- @prefactory_memo[key]
38
+ @prefactory_memo[key] ||= begin
39
+ lookup = prefactory_lookup(key)
40
+ if lookup.present?
41
+ lookup[:result_class].constantize.find(lookup[:result_id])
42
+ else
43
+ Prefactory::NotDefined
44
+ end
45
+ rescue
46
+ end
42
47
  end
43
48
 
44
49
  def in_before_all?
@@ -57,7 +62,11 @@ module Prefactory
57
62
  result = create(key, *args) if respond_to?(:create)
58
63
  end
59
64
  if result.present?
60
- @prefactory[key] = { :class => result.class, :id => result.id }
65
+ PrefactoryLookup.where(:key => key).first_or_initialize.tap do |lookup|
66
+ lookup.result_class = result.class.name
67
+ lookup.result_id = result.id
68
+ lookup.save!
69
+ end
61
70
  else
62
71
  warn "WARNING: Failed to add #{key} to prefactory: block result not present"
63
72
  end
@@ -67,10 +76,10 @@ module Prefactory
67
76
 
68
77
  def self.included(base)
69
78
  base.extend RSpecAroundAll
79
+ PrefactoryLookup.create_table
70
80
 
71
81
  # Wrap outermost describe block in a transaction, so before(:all) data is rolled back at the end of this suite.
72
82
  base.before(:all) do
73
- clear_prefactory_map
74
83
  clear_prefactory_memoizations
75
84
  end
76
85
  base.around(:all) do |group|
@@ -78,7 +87,6 @@ module Prefactory
78
87
  end
79
88
  base.after(:all) do
80
89
  clear_prefactory_memoizations
81
- clear_prefactory_map
82
90
  end
83
91
 
84
92
  # Wrap each example in a transaction, instead of using Rails' transactional
@@ -145,11 +153,8 @@ module Prefactory
145
153
  # by invoking the 'prefactory' method.
146
154
  base.class_eval do
147
155
  def method_missing(key, *args, &block)
148
- if prefactory_lookup(key)
149
- prefactory(key)
150
- else
151
- super
152
- end
156
+ result = prefactory(key)
157
+ result == Prefactory::NotDefined ? super : result
153
158
  end
154
159
  end
155
160
 
@@ -161,8 +166,4 @@ module Prefactory
161
166
  @prefactory_memo = {}
162
167
  end
163
168
 
164
- def clear_prefactory_map
165
- @prefactory = {}
166
- end
167
-
168
169
  end
@@ -238,7 +238,7 @@ describe Prefactory do
238
238
  context "when passed a nonexistent key" do
239
239
  let(:key) { :frog }
240
240
  it do
241
- is_expected.to be_nil
241
+ is_expected.to eq Prefactory::NotDefined
242
242
  expect { frog }.to raise_error(NameError)
243
243
  end
244
244
  end
@@ -281,4 +281,16 @@ describe Prefactory do
281
281
  expect(some_other_comment.text).to eq(blog.title)
282
282
  end
283
283
  end
284
+
285
+ describe "when the same key is overridden in different contexts at the same depth" do
286
+ set!(:some_blog) { create :blog, :title => 'original' }
287
+ it { expect(some_blog.title).to eq 'original' }
288
+ context "nested override" do
289
+ set!(:some_blog) { create :blog, :title => 'nested' }
290
+ it { expect(some_blog.title).to eq 'nested' }
291
+ end
292
+ context "nested unset" do
293
+ it { expect(some_blog.title).to eq 'original' }
294
+ end
295
+ end
284
296
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prefactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - developers@socialcast.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-12 00:00:00.000000000 Z
11
+ date: 2014-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec_around_all
@@ -130,7 +130,8 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
- - ".rvmrc"
133
+ - ".ruby-gemset"
134
+ - ".ruby-version"
134
135
  - ".travis.yml"
135
136
  - Gemfile
136
137
  - LICENSE.txt
@@ -138,6 +139,7 @@ files:
138
139
  - Rakefile
139
140
  - lib/prefactory.rb
140
141
  - lib/prefactory/active_record_integration.rb
142
+ - lib/prefactory/prefactory_lookup.rb
141
143
  - lib/prefactory/version.rb
142
144
  - lib/rspec/core/prefactory.rb
143
145
  - prefactory.gemspec
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use default@prefactory --create