flagpole_sitta 0.9.0 → 0.9.2
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/flagpole_sitta.gemspec +1 -0
- data/lib/flagpole_sitta/existence_hash.rb +20 -15
- data/lib/flagpole_sitta/version.rb +1 -1
- metadata +53 -40
data/flagpole_sitta.gemspec
CHANGED
@@ -27,8 +27,8 @@ module FlagpoleSitta
|
|
27
27
|
i = 0
|
28
28
|
superclazz.find_each do |m|
|
29
29
|
#Route ID is the key. The POS is used to emulate an array, along with the length stored in the flag.
|
30
|
-
Rails.cache.write("#{superclazz}/ExistenceHash/#{m.class}/#{m.send(m.class.route_id).to_s}", {:type => m.
|
31
|
-
Rails.cache.write("#{superclazz}/ExistenceHash/#{i}", {:key => m.send(m.class.route_id).to_s, :type => m.class})
|
30
|
+
Rails.cache.write("#{superclazz}/ExistenceHash/#{m.class}/#{m.send(m.class.route_id).to_s}", {:type => m.class.to_s, :pos => i, :num => m.has_attribute?('num') ? (m.num || 0) : 0})
|
31
|
+
Rails.cache.write("#{superclazz}/ExistenceHash/#{i}", {:key => m.send(m.class.route_id).to_s, :type => m.class.to_s})
|
32
32
|
i = i + 1
|
33
33
|
end
|
34
34
|
|
@@ -91,9 +91,12 @@ module FlagpoleSitta
|
|
91
91
|
|
92
92
|
value = Rails.cache.read("#{superclazz}/ExistenceHash/#{i}")
|
93
93
|
|
94
|
-
if value.present? && value[:type].eql?(clazz)
|
94
|
+
if value.present? && value[:type].to_s.eql?(clazz.to_s)
|
95
95
|
hash = Rails.cache.read("#{superclazz}/ExistenceHash/#{value[:type]}/#{value[:key]}")
|
96
|
-
|
96
|
+
#This if statement is to make it fail gracefully if the cache has degraded.
|
97
|
+
if hash.present?
|
98
|
+
yield value[:key], hash
|
99
|
+
end
|
97
100
|
end
|
98
101
|
|
99
102
|
end
|
@@ -138,13 +141,13 @@ module FlagpoleSitta
|
|
138
141
|
#Get the Current Class and the Old Class in case the object changed classes.
|
139
142
|
#If its the base object, ie type is nil, then return class as the old_clazz.
|
140
143
|
#If the object doesn't have the type field assume it can't change classes.
|
141
|
-
new_clazz = self.has_attribute?('type') ? (self.type || self.class) : self.class
|
142
|
-
old_clazz = self.has_attribute?('type') ? (self.type_was || self.class) : self.class
|
144
|
+
new_clazz = self.has_attribute?('type') ? (self.type || self.class.to_s) : self.class.to_s
|
145
|
+
old_clazz = self.has_attribute?('type') ? (self.type_was || self.class.to_s) : self.class.to_s
|
143
146
|
superclazz = self.class.get_super_with_existence_hash
|
144
147
|
|
145
148
|
#Old key is where it was, and new is where it is going.
|
146
|
-
|
147
|
-
|
149
|
+
new_key = new_clazz.respond_to?(:constantize) ? self.send("#{new_clazz.constantize.route_id}") : nil
|
150
|
+
old_key = old_clazz.respond_to?(:constantize) ? self.send("#{old_clazz.constantize.route_id}_was") : nil
|
148
151
|
|
149
152
|
flag = Rails.cache.read("#{superclazz}/ExistenceHash/Flag")
|
150
153
|
|
@@ -169,20 +172,23 @@ module FlagpoleSitta
|
|
169
172
|
flag[:space] = flag[:space] + 1
|
170
173
|
i = flag[:space]
|
171
174
|
end
|
172
|
-
hash = {:type =>
|
175
|
+
hash = {:type => new_clazz, :num => self.has_attribute?('num') ? (self.num || 0) : 0, :pos => i}
|
173
176
|
#If its an already existing record them get its existence hash, and then remove it from the cache.
|
174
177
|
else
|
175
|
-
hash =
|
178
|
+
hash = Rails.cache.read("#{superclazz}/ExistenceHash/#{old_clazz}/#{old_key}")
|
176
179
|
hash[:type] = new_clazz
|
177
|
-
Rails.cache.delete("#{superclazz}/ExistenceHash/#{old_clazz}/#{old_key}")
|
178
180
|
end
|
179
181
|
|
182
|
+
#Before new info gets written make sure to delete all the old records just in case. The New location before it gets used too.
|
183
|
+
Rails.cache.delete("#{superclazz}/ExistenceHash/#{new_clazz}/#{new_key}")
|
184
|
+
Rails.cache.delete("#{superclazz}/ExistenceHash/#{old_clazz}/#{old_key}")
|
185
|
+
Rails.cache.delete("#{superclazz}/ExistenceHash/#{hash[:pos]}")
|
186
|
+
|
180
187
|
#If the record is not being destroyed add new route_id to existence hash
|
181
188
|
if alive
|
182
189
|
Rails.cache.write("#{superclazz}/ExistenceHash/#{new_clazz}/#{new_key}", hash)
|
183
|
-
Rails.cache.write("#{superclazz}/ExistenceHash/#{hash[:pos]}", {:
|
184
|
-
|
185
|
-
elsif !self.new_record?
|
190
|
+
Rails.cache.write("#{superclazz}/ExistenceHash/#{hash[:pos]}", {:type => new_clazz, :key => new_key})
|
191
|
+
else
|
186
192
|
if hash[:pos] == flag[:space]
|
187
193
|
flag[:space] = flag[:space] - 1
|
188
194
|
else
|
@@ -190,7 +196,6 @@ module FlagpoleSitta
|
|
190
196
|
Rails.cache.write("#{superclazz}/ExistenceHash/EmptyStack/#{flag[:empty]}", hash[:pos])
|
191
197
|
end
|
192
198
|
flag[:count] = flag[:count] - 1
|
193
|
-
Rails.cache.delete("#{superclazz}/ExistenceHash/#{hash[:pos]}")
|
194
199
|
end
|
195
200
|
|
196
201
|
Rails.cache.write("#{superclazz}/ExistenceHash/Flag", flag)
|
metadata
CHANGED
@@ -1,46 +1,49 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: flagpole_sitta
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 2
|
10
|
+
version: 0.9.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Andrew Rove (Rover)
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2012-08-21 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: dalli
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description: |-
|
35
|
+
Flagpole Sitta is a gem that main purpose is to make it easier to effectively fragment cache in dynamic fashions in Rails.
|
36
|
+
When ever a cache is created it is associated with any model and/or record you tell it to be from the view helper method. When that model and/or record is updated all it's associated caches are cleared.
|
37
|
+
Flagpole also expects you to put all your database calls into Procs/Lamdbas. This makes it so that your database calls wont have to happen unless your cache hasn't been created. Thus speeding up response time and reducing database traffic.
|
38
|
+
email:
|
39
39
|
- rovermicrover@gmail.com
|
40
40
|
executables: []
|
41
|
+
|
41
42
|
extensions: []
|
43
|
+
|
42
44
|
extra_rdoc_files: []
|
43
|
-
|
45
|
+
|
46
|
+
files:
|
44
47
|
- .gitignore
|
45
48
|
- Gemfile
|
46
49
|
- Gemfile.lock
|
@@ -94,26 +97,36 @@ files:
|
|
94
97
|
- test/test_helper.rb
|
95
98
|
homepage: https://github.com/rovermicrover/FlagpoleSitta
|
96
99
|
licenses: []
|
100
|
+
|
97
101
|
post_install_message:
|
98
102
|
rdoc_options: []
|
99
|
-
|
103
|
+
|
104
|
+
require_paths:
|
100
105
|
- lib
|
101
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
107
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
116
|
none: false
|
109
|
-
requirements:
|
110
|
-
- -
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
version: "0"
|
113
124
|
requirements: []
|
125
|
+
|
114
126
|
rubyforge_project:
|
115
127
|
rubygems_version: 1.8.24
|
116
128
|
signing_key:
|
117
129
|
specification_version: 3
|
118
130
|
summary: FlagpoleSitta is a gem for effective dynamic caching
|
119
131
|
test_files: []
|
132
|
+
|