garner 0.4.2 → 0.4.3
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/README.md +1 -0
- data/lib/garner/cache/binding.rb +11 -10
- data/lib/garner/cache/context.rb +1 -1
- data/lib/garner/cache/identity.rb +15 -2
- data/lib/garner/mixins/mongoid/document.rb +9 -1
- data/lib/garner/mixins/rack.rb +2 -4
- data/lib/garner/strategies/binding/key/binding_index.rb +2 -0
- data/lib/garner/strategies/context/key/base.rb +1 -1
- data/lib/garner/strategies/context/key/caller.rb +1 -1
- data/lib/garner/strategies/context/key/jsonp.rb +1 -1
- data/lib/garner/strategies/context/key/request_get.rb +1 -1
- data/lib/garner/strategies/context/key/request_path.rb +1 -1
- data/lib/garner/strategies/context/key/request_post.rb +1 -1
- data/lib/garner/version.rb +1 -1
- metadata +3 -3
data/README.md
CHANGED
@@ -196,6 +196,7 @@ The full list of `Garner.config` attributes is:
|
|
196
196
|
* `:binding_invalidation_strategy`: Binding invalidation strategy. Defaults to `Garner::Strategies::Binding::Invalidation::Touch`.
|
197
197
|
* `:mongoid_identity_fields`: Identity fields considered legal for the `identity` method. Defaults to `[:_id]`.
|
198
198
|
* `:caller_root`: Root path of application, to be stripped out of value strings generated by the `Caller` context key strategy. Defaults to `Rails.root` if in a Rails environment; otherwise to the nearest ancestor directory containing a Gemfile.
|
199
|
+
* `:invalidate_mongoid_root`: If set to true, invalidates the `_root` document along with any embedded Mongoid document binding. Defaults to `true`.
|
199
200
|
|
200
201
|
Contributing
|
201
202
|
------------
|
data/lib/garner/cache/binding.rb
CHANGED
@@ -8,6 +8,9 @@ Garner.config.option(:binding_invalidation_strategy, {
|
|
8
8
|
Garner.config.option(:mongoid_identity_fields, {
|
9
9
|
:default => [:_id]
|
10
10
|
})
|
11
|
+
Garner.config.option(:invalidate_mongoid_root, {
|
12
|
+
:default => true
|
13
|
+
})
|
11
14
|
|
12
15
|
module Garner
|
13
16
|
module Cache
|
@@ -38,27 +41,25 @@ module Garner
|
|
38
41
|
#
|
39
42
|
# @return [Boolean] Returns true on success.
|
40
43
|
def invalidate_garner_caches
|
41
|
-
|
44
|
+
_invalidate
|
42
45
|
true
|
43
46
|
end
|
44
47
|
|
45
48
|
protected
|
49
|
+
def _invalidate
|
50
|
+
invalidation_strategy.apply(self)
|
51
|
+
end
|
52
|
+
|
46
53
|
def _garner_after_create
|
47
|
-
if invalidation_strategy.apply_on_callback?(:create)
|
48
|
-
invalidation_strategy.apply(self)
|
49
|
-
end
|
54
|
+
_invalidate if invalidation_strategy.apply_on_callback?(:create)
|
50
55
|
end
|
51
56
|
|
52
57
|
def _garner_after_update
|
53
|
-
if invalidation_strategy.apply_on_callback?(:update)
|
54
|
-
invalidation_strategy.apply(self)
|
55
|
-
end
|
58
|
+
_invalidate if invalidation_strategy.apply_on_callback?(:update)
|
56
59
|
end
|
57
60
|
|
58
61
|
def _garner_after_destroy
|
59
|
-
if invalidation_strategy.apply_on_callback?(:destroy)
|
60
|
-
invalidation_strategy.apply(self)
|
61
|
-
end
|
62
|
+
_invalidate if invalidation_strategy.apply_on_callback?(:destroy)
|
62
63
|
end
|
63
64
|
|
64
65
|
end
|
data/lib/garner/cache/context.rb
CHANGED
@@ -23,7 +23,7 @@ module Garner
|
|
23
23
|
# end
|
24
24
|
# @return [Garner::Cache::Identity] The cache identity.
|
25
25
|
def garner(&block)
|
26
|
-
identity = Garner::Cache::Identity.new
|
26
|
+
identity = Garner::Cache::Identity.new(self)
|
27
27
|
Garner.config.context_key_strategies.each do |strategy|
|
28
28
|
identity = strategy.apply(identity, self)
|
29
29
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module Garner
|
2
2
|
module Cache
|
3
3
|
class Identity
|
4
|
+
attr_accessor :ruby_context
|
4
5
|
attr_accessor :bindings, :key_hash, :options_hash
|
5
6
|
|
6
|
-
def initialize
|
7
|
+
def initialize(ruby_context = nil)
|
8
|
+
@ruby_context = ruby_context
|
9
|
+
|
7
10
|
@bindings = []
|
8
11
|
@key_hash = {}
|
9
12
|
|
@@ -13,7 +16,17 @@ module Garner
|
|
13
16
|
end
|
14
17
|
|
15
18
|
def fetch(&block)
|
16
|
-
|
19
|
+
if @nocache
|
20
|
+
yield
|
21
|
+
else
|
22
|
+
Garner::Cache.fetch(@bindings, @key_hash, @options_hash, &block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Disable caching for this identity.
|
27
|
+
def nocache
|
28
|
+
@nocache = true
|
29
|
+
block_given? ? fetch(&block) : self
|
17
30
|
end
|
18
31
|
|
19
32
|
# Bind this cache identity to a (bindable) object.
|
@@ -62,8 +62,16 @@ module Garner
|
|
62
62
|
:updated_at => :desc
|
63
63
|
}).first
|
64
64
|
end
|
65
|
-
end
|
66
65
|
|
66
|
+
def _invalidate
|
67
|
+
invalidation_strategy.apply(self)
|
68
|
+
|
69
|
+
if _root != self && Garner.config.invalidate_mongoid_root
|
70
|
+
invalidation_strategy.apply(_root)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
67
75
|
end
|
68
76
|
end
|
69
77
|
end
|
data/lib/garner/mixins/rack.rb
CHANGED
@@ -19,14 +19,12 @@ module Garner
|
|
19
19
|
# end
|
20
20
|
# @return [Garner::Cache::Identity] The cache identity.
|
21
21
|
def garner(&block)
|
22
|
-
identity = Garner::Cache::Identity.new
|
22
|
+
identity = Garner::Cache::Identity.new(self)
|
23
23
|
Garner.config.rack_context_key_strategies.each do |strategy|
|
24
24
|
identity = strategy.apply(identity, self)
|
25
25
|
end
|
26
26
|
|
27
|
-
unless cache_enabled?
|
28
|
-
identity.options({ :force_miss => true })
|
29
|
-
end
|
27
|
+
identity = identity.nocache unless cache_enabled?
|
30
28
|
|
31
29
|
block_given? ? identity.fetch(&block) : identity
|
32
30
|
end
|
@@ -26,6 +26,7 @@ module Garner
|
|
26
26
|
# @return [String] A cache key string.
|
27
27
|
def self.fetch_cache_key_for(binding)
|
28
28
|
canonical_binding = fetch_canonical_binding_for(binding)
|
29
|
+
return nil unless canonical_binding
|
29
30
|
key = index_key_for(canonical_binding)
|
30
31
|
Garner.config.cache.fetch(key) { new_cache_key_for(canonical_binding) }
|
31
32
|
end
|
@@ -36,6 +37,7 @@ module Garner
|
|
36
37
|
# @return [String] A cache key string.
|
37
38
|
def self.write_cache_key_for(binding)
|
38
39
|
canonical_binding = fetch_canonical_binding_for(binding)
|
40
|
+
return nil unless canonical_binding
|
39
41
|
key = index_key_for(canonical_binding)
|
40
42
|
value = new_cache_key_for(canonical_binding)
|
41
43
|
value.tap { |v| Garner.config.cache.write(key, v) }
|
@@ -10,7 +10,7 @@ module Garner
|
|
10
10
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
11
11
|
# @param ruby_context [Object] An optional Ruby context.
|
12
12
|
# @return [Garner::Cache::Identity] The modified identity.
|
13
|
-
def self.apply(identity, ruby_context =
|
13
|
+
def self.apply(identity, ruby_context = nil)
|
14
14
|
identity
|
15
15
|
end
|
16
16
|
|
@@ -36,7 +36,7 @@ module Garner
|
|
36
36
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
37
37
|
# @param ruby_context [Object] An optional Ruby context.
|
38
38
|
# @return [Garner::Cache::Identity] The modified identity.
|
39
|
-
def self.apply(identity, ruby_context =
|
39
|
+
def self.apply(identity, ruby_context = nil)
|
40
40
|
value = nil
|
41
41
|
|
42
42
|
if ruby_context.send(:caller)
|
@@ -13,7 +13,7 @@ module Garner
|
|
13
13
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
14
14
|
# @param ruby_context [Object] An optional Ruby context.
|
15
15
|
# @return [Garner::Cache::Identity] The modified identity.
|
16
|
-
def self.apply(identity, ruby_context =
|
16
|
+
def self.apply(identity, ruby_context = nil)
|
17
17
|
key_hash = identity.key_hash
|
18
18
|
return identity unless key_hash[field]
|
19
19
|
|
@@ -13,7 +13,7 @@ module Garner
|
|
13
13
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
14
14
|
# @param ruby_context [Object] An optional Ruby context.
|
15
15
|
# @return [Garner::Cache::Identity] The modified identity.
|
16
|
-
def self.apply(identity, ruby_context =
|
16
|
+
def self.apply(identity, ruby_context = nil)
|
17
17
|
return identity unless (ruby_context.respond_to?(:request))
|
18
18
|
|
19
19
|
request = ruby_context.request
|
@@ -13,7 +13,7 @@ module Garner
|
|
13
13
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
14
14
|
# @param ruby_context [Object] An optional Ruby context.
|
15
15
|
# @return [Garner::Cache::Identity] The modified identity.
|
16
|
-
def self.apply(identity, ruby_context =
|
16
|
+
def self.apply(identity, ruby_context = nil)
|
17
17
|
return identity unless (ruby_context.respond_to?(:request))
|
18
18
|
|
19
19
|
request = ruby_context.request
|
@@ -13,7 +13,7 @@ module Garner
|
|
13
13
|
# @param identity [Garner::Cache::Identity] The cache identity.
|
14
14
|
# @param ruby_context [Object] An optional Ruby context.
|
15
15
|
# @return [Garner::Cache::Identity] The modified identity.
|
16
|
-
def self.apply(identity, ruby_context =
|
16
|
+
def self.apply(identity, ruby_context = nil)
|
17
17
|
return identity unless (ruby_context.respond_to?(:request))
|
18
18
|
|
19
19
|
request = ruby_context.request
|
data/lib/garner/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: garner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-07-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|
@@ -400,7 +400,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
400
400
|
version: '0'
|
401
401
|
segments:
|
402
402
|
- 0
|
403
|
-
hash: -
|
403
|
+
hash: -4381547871951397125
|
404
404
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
405
405
|
none: false
|
406
406
|
requirements:
|