acts_as_king 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/acts_as_king.rb +9 -7
- data/lib/acts_as_king/version.rb +1 -1
- data/test/acts_as_king_test.rb +5 -0
- data/test/helper.rb +5 -1
- metadata +3 -3
data/lib/acts_as_king.rb
CHANGED
@@ -13,6 +13,11 @@ module ActsAsKing
|
|
13
13
|
# association (parent) and has_many association (children). It also defines
|
14
14
|
# a <tt>kings</tt> scope for your model to return all top level records.
|
15
15
|
#
|
16
|
+
# === Options
|
17
|
+
#
|
18
|
+
# * <tt>:foreign_key</tt> - The foreign key used for the association. Normally this will be 'parent_id'. Default is 'parent_id'.
|
19
|
+
# * <tt>:counter_cache</tt> - Defines a counter_cache for the belongs_to association that is created. Set true for the default column name (ex: Comment model would be 'comments_count'). Otherwise specify the column name you wish to use. Default is false (no counter cache).
|
20
|
+
#
|
16
21
|
# === Example
|
17
22
|
#
|
18
23
|
# class Comment < ActiveRecord::Base
|
@@ -33,16 +38,13 @@ module ActsAsKing
|
|
33
38
|
#
|
34
39
|
#
|
35
40
|
def acts_as_king(options = {})
|
36
|
-
options = { :foreign_key => 'parent_id' }.merge(options)
|
41
|
+
options = { :foreign_key => 'parent_id', :counter_cache => false }.merge(options)
|
37
42
|
|
38
|
-
belongs_to :parent, :class_name => name, :foreign_key => options[:foreign_key]
|
43
|
+
belongs_to :parent, :class_name => name, :foreign_key => options[:foreign_key], :counter_cache => options[:counter_cache]
|
39
44
|
has_many :children, :class_name => name, :foreign_key => options[:foreign_key], :dependent => :destroy
|
40
45
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
scope :kings, where("#{options[:foreign_key]} IS NULL")
|
45
|
-
EOL
|
46
|
+
include ActsAsKing::InstanceMethods
|
47
|
+
scope :kings, where("#{options[:foreign_key]} IS NULL")
|
46
48
|
|
47
49
|
end
|
48
50
|
|
data/lib/acts_as_king/version.rb
CHANGED
data/test/acts_as_king_test.rb
CHANGED
@@ -39,6 +39,11 @@ class ActsAsKingTest < Test::Unit::TestCase
|
|
39
39
|
should "return multiple ancestors" do
|
40
40
|
assert_equal [@sub_comment, @comment], @level_3.ancestors
|
41
41
|
end
|
42
|
+
|
43
|
+
should "should use counter caching" do
|
44
|
+
assert_equal 1, @comment.reload.comments_count
|
45
|
+
assert_equal 1, @sub_comment.reload.comments_count
|
46
|
+
end
|
42
47
|
|
43
48
|
end
|
44
49
|
|
data/test/helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
2
|
|
3
|
+
require 'logger'
|
3
4
|
require 'active_record'
|
4
5
|
require 'acts_as_king'
|
5
6
|
require 'test/unit'
|
@@ -9,6 +10,8 @@ ActiveRecord::Base.send(:include, ActsAsKing)
|
|
9
10
|
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
10
11
|
ActiveRecord::Migration.verbose = false
|
11
12
|
|
13
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT) if ENV['SHOW_SQL'] && ENV['SHOW_SQL'] == 'true'
|
14
|
+
|
12
15
|
def setup_db
|
13
16
|
ActiveRecord::Schema.define(:version => 1) do
|
14
17
|
create_table :posts, :force => true do |t|
|
@@ -17,6 +20,7 @@ def setup_db
|
|
17
20
|
create_table :comments, :force => true do |t|
|
18
21
|
t.integer :post_id, :null => false
|
19
22
|
t.integer :parent_id
|
23
|
+
t.integer :comments_count
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
@@ -33,6 +37,6 @@ end
|
|
33
37
|
|
34
38
|
class Comment < ActiveRecord::Base
|
35
39
|
belongs_to :post
|
36
|
-
acts_as_king
|
40
|
+
acts_as_king :counter_cache => true
|
37
41
|
end
|
38
42
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: acts_as_king
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Drew Tempelmeyer
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-16 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements: []
|
100
100
|
|
101
101
|
rubyforge_project:
|
102
|
-
rubygems_version: 1.
|
102
|
+
rubygems_version: 1.7.2
|
103
103
|
signing_key:
|
104
104
|
specification_version: 3
|
105
105
|
summary: Hierarchical ActiveRecord models. Inspired by acts_as_tree. Trees are shady.
|