store_base_sti_class 0.0.1
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/Appraisals +25 -0
- data/CHANGELOG +2 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +45 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +63 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/db/storebasestiname_unittest.sql +0 -0
- data/gemfiles/rails_3.0.10.gemfile +11 -0
- data/gemfiles/rails_3.0.10.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.11.gemfile +11 -0
- data/gemfiles/rails_3.0.11.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.12.gemfile +11 -0
- data/gemfiles/rails_3.0.12.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.3.gemfile +11 -0
- data/gemfiles/rails_3.0.3.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.4.gemfile +11 -0
- data/gemfiles/rails_3.0.4.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.5.gemfile +11 -0
- data/gemfiles/rails_3.0.5.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.6.gemfile +11 -0
- data/gemfiles/rails_3.0.6.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.7.gemfile +11 -0
- data/gemfiles/rails_3.0.7.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.8.gemfile +11 -0
- data/gemfiles/rails_3.0.8.gemfile.lock +43 -0
- data/gemfiles/rails_3.0.9.gemfile +11 -0
- data/gemfiles/rails_3.0.9.gemfile.lock +43 -0
- data/gemfiles/rails_3.1.0.gemfile +11 -0
- data/gemfiles/rails_3.1.0.gemfile.lock +47 -0
- data/gemfiles/rails_3.1.1.gemfile +11 -0
- data/gemfiles/rails_3.1.1.gemfile.lock +45 -0
- data/gemfiles/rails_3.1.2.gemfile +11 -0
- data/gemfiles/rails_3.1.2.gemfile.lock +45 -0
- data/gemfiles/rails_3.1.3.gemfile +11 -0
- data/gemfiles/rails_3.1.3.gemfile.lock +45 -0
- data/gemfiles/rails_3.1.4.gemfile +11 -0
- data/gemfiles/rails_3.1.4.gemfile.lock +45 -0
- data/gemfiles/rails_3.2.0.gemfile +11 -0
- data/gemfiles/rails_3.2.0.gemfile.lock +45 -0
- data/gemfiles/rails_3.2.1.gemfile +11 -0
- data/gemfiles/rails_3.2.1.gemfile.lock +45 -0
- data/gemfiles/rails_3.2.2.gemfile +11 -0
- data/gemfiles/rails_3.2.2.gemfile.lock +45 -0
- data/gemfiles/rails_3.2.3.gemfile +11 -0
- data/gemfiles/rails_3.2.3.gemfile.lock +45 -0
- data/lib/store_base_sti_class.rb +7 -0
- data/lib/store_base_sti_class_for_3_0.rb +470 -0
- data/lib/store_base_sti_class_for_3_1_and_above.rb +304 -0
- data/store_base_sti_class.gemspec +111 -0
- data/storebasestiname_unittest.sql +0 -0
- data/test/connection.rb +22 -0
- data/test/helper.rb +63 -0
- data/test/models.rb +48 -0
- data/test/schema.rb +35 -0
- data/test/test_store_base_sti_class.rb +161 -0
- metadata +205 -0
@@ -0,0 +1,161 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'active_record/test_case'
|
3
|
+
|
4
|
+
class TestStoreBaseStiClass < ActiveRecord::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@old_store_base_sti_class = ActiveRecord::Base.store_base_sti_class
|
8
|
+
ActiveRecord::Base.store_base_sti_class = false
|
9
|
+
|
10
|
+
@thinking_post = SpecialPost.create(:title => 'Thinking', :body => "the body")
|
11
|
+
@misc_tag = Tag.create(:name => 'Misc')
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
ActiveRecord::Base.store_base_sti_class = @old_store_base_sti_class
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_polymorphic_belongs_to_assignment_with_inheritance
|
19
|
+
# should update when assigning a saved record
|
20
|
+
tagging = Tagging.new
|
21
|
+
post = SpecialPost.create(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
22
|
+
tagging.taggable = post
|
23
|
+
assert_equal post.id, tagging.taggable_id
|
24
|
+
assert_equal "SpecialPost", tagging.taggable_type
|
25
|
+
|
26
|
+
# should update when assigning a new record
|
27
|
+
tagging = Tagging.new
|
28
|
+
post = SpecialPost.new(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
29
|
+
tagging.taggable = post
|
30
|
+
assert_nil tagging.taggable_id
|
31
|
+
assert_equal "SpecialPost", tagging.taggable_type
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_polymorphic_has_many_create_model_with_inheritance
|
35
|
+
post = SpecialPost.new(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
36
|
+
|
37
|
+
tagging = @misc_tag.taggings.create(:taggable => post)
|
38
|
+
assert_equal "SpecialPost", tagging.taggable_type
|
39
|
+
|
40
|
+
post.reload
|
41
|
+
assert_equal [tagging], post.taggings
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_polymorphic_has_one_create_model_with_inheritance
|
45
|
+
post = SpecialPost.new(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
46
|
+
|
47
|
+
tagging = @misc_tag.create_tagging(:taggable => post)
|
48
|
+
assert_equal "SpecialPost", tagging.taggable_type
|
49
|
+
|
50
|
+
post.reload
|
51
|
+
assert_equal tagging, post.tagging
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_polymorphic_has_many_create_via_association
|
55
|
+
tag = SpecialTag.create!(:name => 'Special')
|
56
|
+
tagging = tag.polytaggings.create!
|
57
|
+
|
58
|
+
assert_equal "SpecialTag", tagging.polytag_type
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_polymorphic_has_many_through_create_via_association
|
62
|
+
tag = SpecialTag.create!(:name => 'Special')
|
63
|
+
post = tag.polytagged_posts.create!(:title => 'To Be or Not To Be?', :body => "the body")
|
64
|
+
|
65
|
+
assert_equal "SpecialTag", tag.polytaggings.first.polytag_type
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_include_polymorphic_has_one
|
69
|
+
post = SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
70
|
+
tagging = post.create_tagging(:tag => @misc_tag)
|
71
|
+
|
72
|
+
post = Post.find(post.id, :include => :tagging)
|
73
|
+
assert_equal tagging, assert_no_queries { post.tagging }
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_include_polymorphic_has_many
|
77
|
+
tag = SpecialTag.create!(:name => 'Special')
|
78
|
+
tag.polytagged_posts << SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
79
|
+
tag.polytagged_posts << @thinking_post
|
80
|
+
|
81
|
+
tag = Tag.find(tag.id, :include => :polytaggings)
|
82
|
+
assert_equal 2, assert_no_queries { tag.polytaggings.length }
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_include_polymorphic_has_many_through
|
86
|
+
tag = SpecialTag.create!(:name => 'Special')
|
87
|
+
tag.polytagged_posts << SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
88
|
+
tag.polytagged_posts << @thinking_post
|
89
|
+
|
90
|
+
tag = Tag.find(tag.id, :include => :polytagged_posts)
|
91
|
+
assert_equal 2, assert_no_queries { tag.polytagged_posts.length }
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_join_polymorhic_has_many
|
95
|
+
tag = SpecialTag.create!(:name => 'Special')
|
96
|
+
tag.polytagged_posts << SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
97
|
+
tag.polytagged_posts << @thinking_post
|
98
|
+
|
99
|
+
assert Tag.find_by_id(tag.id, :joins => :polytaggings, :conditions => [ 'taggings.id = ?', tag.polytaggings.first.id ])
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_join_polymorhic_has_many_through
|
103
|
+
tag = SpecialTag.create!(:name => 'Special')
|
104
|
+
tag.polytagged_posts << SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
105
|
+
tag.polytagged_posts << @thinking_post
|
106
|
+
|
107
|
+
assert Tag.find_by_id(tag.id, :joins => :polytagged_posts, :conditions => [ 'posts.id = ?', tag.polytaggings.first.taggable_id ])
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_has_many_through_polymorphic_has_one
|
111
|
+
author = Author.create!(:name => 'Bob')
|
112
|
+
post = Post.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :author => author, :body => "the body")
|
113
|
+
special_post = SpecialPost.create!(:title => 'IBM Watson''s Jeopardy play', :author => author, :body => "the body")
|
114
|
+
special_tag = SpecialTag.create!(:name => 'SpecialGeneral')
|
115
|
+
|
116
|
+
taggings = [ post.taggings.create(:tag => special_tag), special_post.taggings.create(:tag => special_tag) ]
|
117
|
+
assert_equal taggings.sort_by(&:id), author.tagging.sort_by(&:id)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_has_many_polymorphic_with_source_type
|
121
|
+
tag = SpecialTag.create!(:name => 'Special')
|
122
|
+
tag.polytagged_posts << SpecialPost.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :body => "the body")
|
123
|
+
tag.polytagged_posts << @thinking_post
|
124
|
+
|
125
|
+
tag.save!
|
126
|
+
tag.reload
|
127
|
+
|
128
|
+
tag = Tag.find(tag.id)
|
129
|
+
assert_equal 2, tag.polytagged_posts.length
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_polymorphic_has_many_through_with_double_sti_on_join_model
|
133
|
+
tag = SpecialTag.create!(:name => 'Special')
|
134
|
+
post = @thinking_post
|
135
|
+
|
136
|
+
tag.polytagged_posts << post
|
137
|
+
|
138
|
+
|
139
|
+
tag.reload
|
140
|
+
|
141
|
+
assert_equal 1, tag.polytaggings.length
|
142
|
+
|
143
|
+
tagging = tag.polytaggings.first
|
144
|
+
|
145
|
+
assert_equal 'SpecialTag', tagging.polytag_type
|
146
|
+
assert_equal 'SpecialPost', tagging.taggable_type
|
147
|
+
|
148
|
+
assert_equal tag, tagging.polytag
|
149
|
+
assert_equal post, tagging.taggable
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_finder_sql_is_supported
|
153
|
+
author = Author.create!(:name => 'Bob')
|
154
|
+
post = Post.create!(:title => 'Budget Forecasts Bigger 2011 Deficit', :author => author, :body => "the body")
|
155
|
+
special_tag = Tag.create!(:name => 'SpecialGeneral')
|
156
|
+
post.taggings.create(:tag => special_tag)
|
157
|
+
|
158
|
+
assert_equal [author], special_tag.authors
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: store_base_sti_class
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Andrew Mutz
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-05-09 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
type: :runtime
|
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
|
+
version_requirements: *id001
|
32
|
+
name: appraisal
|
33
|
+
prerelease: false
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
type: :runtime
|
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
|
+
version_requirements: *id002
|
46
|
+
name: activerecord
|
47
|
+
prerelease: false
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
type: :runtime
|
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
|
+
version_requirements: *id003
|
60
|
+
name: sqlite3
|
61
|
+
prerelease: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
type: :development
|
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
|
+
version_requirements: *id004
|
74
|
+
name: jeweler
|
75
|
+
prerelease: false
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
type: :development
|
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
|
+
version_requirements: *id005
|
88
|
+
name: rcov
|
89
|
+
prerelease: false
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
type: :development
|
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
|
+
version_requirements: *id006
|
102
|
+
name: bundler
|
103
|
+
prerelease: false
|
104
|
+
description: "\n ActiveRecord has always stored the base class in polymorphic _type columns when using STI. This can have non-trivial\n performance implications in certain cases. This gem adds 'store_base_sti_class' configuration options which controls\n whether ActiveRecord will store the base class or the actual class. Default to true for backwards compatibility.\n "
|
105
|
+
email: andrew.mutz@appfolio.com
|
106
|
+
executables: []
|
107
|
+
|
108
|
+
extensions: []
|
109
|
+
|
110
|
+
extra_rdoc_files:
|
111
|
+
- LICENSE.txt
|
112
|
+
- README.rdoc
|
113
|
+
files:
|
114
|
+
- Appraisals
|
115
|
+
- CHANGELOG
|
116
|
+
- Gemfile
|
117
|
+
- Gemfile.lock
|
118
|
+
- LICENSE.txt
|
119
|
+
- README.rdoc
|
120
|
+
- Rakefile
|
121
|
+
- VERSION
|
122
|
+
- db/storebasestiname_unittest.sql
|
123
|
+
- gemfiles/rails_3.0.10.gemfile
|
124
|
+
- gemfiles/rails_3.0.10.gemfile.lock
|
125
|
+
- gemfiles/rails_3.0.11.gemfile
|
126
|
+
- gemfiles/rails_3.0.11.gemfile.lock
|
127
|
+
- gemfiles/rails_3.0.12.gemfile
|
128
|
+
- gemfiles/rails_3.0.12.gemfile.lock
|
129
|
+
- gemfiles/rails_3.0.3.gemfile
|
130
|
+
- gemfiles/rails_3.0.3.gemfile.lock
|
131
|
+
- gemfiles/rails_3.0.4.gemfile
|
132
|
+
- gemfiles/rails_3.0.4.gemfile.lock
|
133
|
+
- gemfiles/rails_3.0.5.gemfile
|
134
|
+
- gemfiles/rails_3.0.5.gemfile.lock
|
135
|
+
- gemfiles/rails_3.0.6.gemfile
|
136
|
+
- gemfiles/rails_3.0.6.gemfile.lock
|
137
|
+
- gemfiles/rails_3.0.7.gemfile
|
138
|
+
- gemfiles/rails_3.0.7.gemfile.lock
|
139
|
+
- gemfiles/rails_3.0.8.gemfile
|
140
|
+
- gemfiles/rails_3.0.8.gemfile.lock
|
141
|
+
- gemfiles/rails_3.0.9.gemfile
|
142
|
+
- gemfiles/rails_3.0.9.gemfile.lock
|
143
|
+
- gemfiles/rails_3.1.0.gemfile
|
144
|
+
- gemfiles/rails_3.1.0.gemfile.lock
|
145
|
+
- gemfiles/rails_3.1.1.gemfile
|
146
|
+
- gemfiles/rails_3.1.1.gemfile.lock
|
147
|
+
- gemfiles/rails_3.1.2.gemfile
|
148
|
+
- gemfiles/rails_3.1.2.gemfile.lock
|
149
|
+
- gemfiles/rails_3.1.3.gemfile
|
150
|
+
- gemfiles/rails_3.1.3.gemfile.lock
|
151
|
+
- gemfiles/rails_3.1.4.gemfile
|
152
|
+
- gemfiles/rails_3.1.4.gemfile.lock
|
153
|
+
- gemfiles/rails_3.2.0.gemfile
|
154
|
+
- gemfiles/rails_3.2.0.gemfile.lock
|
155
|
+
- gemfiles/rails_3.2.1.gemfile
|
156
|
+
- gemfiles/rails_3.2.1.gemfile.lock
|
157
|
+
- gemfiles/rails_3.2.2.gemfile
|
158
|
+
- gemfiles/rails_3.2.2.gemfile.lock
|
159
|
+
- gemfiles/rails_3.2.3.gemfile
|
160
|
+
- gemfiles/rails_3.2.3.gemfile.lock
|
161
|
+
- lib/store_base_sti_class.rb
|
162
|
+
- lib/store_base_sti_class_for_3_0.rb
|
163
|
+
- lib/store_base_sti_class_for_3_1_and_above.rb
|
164
|
+
- store_base_sti_class.gemspec
|
165
|
+
- storebasestiname_unittest.sql
|
166
|
+
- test/connection.rb
|
167
|
+
- test/helper.rb
|
168
|
+
- test/models.rb
|
169
|
+
- test/schema.rb
|
170
|
+
- test/test_store_base_sti_class.rb
|
171
|
+
homepage: http://github.com/appfolio/store_base_sti_class
|
172
|
+
licenses:
|
173
|
+
- MIT
|
174
|
+
post_install_message:
|
175
|
+
rdoc_options: []
|
176
|
+
|
177
|
+
require_paths:
|
178
|
+
- lib
|
179
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
180
|
+
none: false
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
hash: 3
|
185
|
+
segments:
|
186
|
+
- 0
|
187
|
+
version: "0"
|
188
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
189
|
+
none: false
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
hash: 3
|
194
|
+
segments:
|
195
|
+
- 0
|
196
|
+
version: "0"
|
197
|
+
requirements: []
|
198
|
+
|
199
|
+
rubyforge_project:
|
200
|
+
rubygems_version: 1.8.21
|
201
|
+
signing_key:
|
202
|
+
specification_version: 3
|
203
|
+
summary: Modifies ActiveRecord 3.0.5+ with the ability to store the actual class (instead of the base class) in polymorhic _type columns when using STI
|
204
|
+
test_files: []
|
205
|
+
|