mongoid_counter_cache 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/Gemfile +4 -0
- data/README.markdown +17 -0
- data/Rakefile +1 -0
- data/lib/mongoid_counter_cache/version.rb +3 -0
- data/lib/mongoid_counter_cache.rb +52 -0
- metadata +115 -0
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
##Support:
|
2
|
+
|
3
|
+
**Rails3.0+/Mongoid2.0.2+**
|
4
|
+
|
5
|
+
##Usage:
|
6
|
+
|
7
|
+
class Forum
|
8
|
+
references_many :topics
|
9
|
+
references_many :posts
|
10
|
+
end
|
11
|
+
|
12
|
+
class Topic
|
13
|
+
referenced_in :forum
|
14
|
+
include Mongoid::CounterCache
|
15
|
+
counter_cache name: :forum, inverse_of: :posts
|
16
|
+
end
|
17
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require "mongoid_counter_cache/version"
|
3
|
+
|
4
|
+
#
|
5
|
+
# lib/mongoid/counter_cache.rb
|
6
|
+
# ruby
|
7
|
+
#
|
8
|
+
# Created by Zhang Alex on 2011-06-17.
|
9
|
+
# Copyright 2011 __KittyPad.com__. All rights reserved.
|
10
|
+
#
|
11
|
+
# ===================================
|
12
|
+
# class Forum
|
13
|
+
# references_many :topics
|
14
|
+
# references_many :posts
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
#
|
18
|
+
# class Topic
|
19
|
+
# referenced_in :forum
|
20
|
+
# include Mongoid::CounterCache
|
21
|
+
# counter_cache name: :forum, inverse_of: :posts
|
22
|
+
# end
|
23
|
+
# ===================================
|
24
|
+
|
25
|
+
module Mongoid
|
26
|
+
module CounterCache
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
def counter_cache(metadata)
|
31
|
+
counter_name = "#{metadata[:inverse_of]}_count"
|
32
|
+
|
33
|
+
set_callback(:create, :after) do |document|
|
34
|
+
relation = document.send(metadata[:name])
|
35
|
+
if relation
|
36
|
+
relation.inc(counter_name.to_sym, 1) if relation.class.fields.keys.include?(counter_name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
set_callback(:destroy, :after) do |document|
|
41
|
+
relation = document.send(metadata[:name])
|
42
|
+
if relation && relation.class.fields.keys.include?(counter_name)
|
43
|
+
relation.inc(counter_name.to_sym, -1)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end #ClassMethods
|
50
|
+
|
51
|
+
end #CounterCache
|
52
|
+
end #Mongoid
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid_counter_cache
|
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
|
+
- AlexZhang
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-07-01 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rails
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 8
|
34
|
+
version: 3.0.8
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: mongoid
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: bson_ext
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
65
|
+
description: Mongoid Counter Cache
|
66
|
+
email:
|
67
|
+
- blackanger.z@gmail.com
|
68
|
+
executables: []
|
69
|
+
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files: []
|
73
|
+
|
74
|
+
files:
|
75
|
+
- Gemfile
|
76
|
+
- Rakefile
|
77
|
+
- README.markdown
|
78
|
+
- lib/mongoid_counter_cache/version.rb
|
79
|
+
- lib/mongoid_counter_cache.rb
|
80
|
+
has_rdoc: true
|
81
|
+
homepage: ""
|
82
|
+
licenses: []
|
83
|
+
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
hash: 3
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
version: "0"
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
hash: 3
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
version: "0"
|
107
|
+
requirements: []
|
108
|
+
|
109
|
+
rubyforge_project: mongoid_counter_cache
|
110
|
+
rubygems_version: 1.6.2
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Mongoid Counter Cache
|
114
|
+
test_files: []
|
115
|
+
|