perry 0.5.5 → 0.6.0
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/lib/perry.rb +5 -0
- data/lib/perry/base.rb +0 -2
- data/lib/perry/caching.rb +87 -0
- data/lib/perry/middlewares/cache_records.rb +15 -3
- data/lib/perry/version.rb +2 -2
- metadata +6 -5
data/lib/perry.rb
CHANGED
@@ -27,6 +27,11 @@ require 'ostruct'
|
|
27
27
|
require 'perry/core_ext/kernel/singleton_class'
|
28
28
|
|
29
29
|
module Perry
|
30
|
+
|
31
|
+
autoload :Middlewares, 'perry/middlewares'
|
32
|
+
autoload :Processors, 'perry/processors'
|
33
|
+
autoload :Caching, 'perry/caching'
|
34
|
+
|
30
35
|
@@log_file = nil
|
31
36
|
|
32
37
|
def self.logger
|
data/lib/perry/base.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
class Perry::Caching
|
3
|
+
|
4
|
+
##
|
5
|
+
# Resets all registered caching services. These can be middlewares, processors, adapters, or
|
6
|
+
# anything that needs to be called upon a cache reset.
|
7
|
+
#
|
8
|
+
def self.reset
|
9
|
+
registry.each { |method| method.call }
|
10
|
+
end
|
11
|
+
|
12
|
+
##
|
13
|
+
# Register a method to be reset
|
14
|
+
#
|
15
|
+
def self.register(method=nil, &block)
|
16
|
+
registry
|
17
|
+
@registry << (method || block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.registry
|
21
|
+
@registry ||= []
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# Return a list of registered methods
|
26
|
+
#
|
27
|
+
def self.registered
|
28
|
+
@registry || []
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Enable caching flag
|
33
|
+
#
|
34
|
+
def self.enable
|
35
|
+
@enabled = true
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Disable caching flag
|
40
|
+
#
|
41
|
+
def self.disable
|
42
|
+
@enabled = false
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Return enabled flag status
|
47
|
+
#
|
48
|
+
def self.enabled?
|
49
|
+
@enabled
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Accept a block to use caching in -- cache will be reset after the block and the original state
|
54
|
+
# of the enabled flag will be set after the block exits
|
55
|
+
#
|
56
|
+
def self.use(&block)
|
57
|
+
caching_block(true, &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
##
|
61
|
+
# Accept a block to NOT cache in -- caching will be disabled for this block and then returned to
|
62
|
+
# the previous status.
|
63
|
+
#
|
64
|
+
def self.forgo(&block)
|
65
|
+
caching_block(false, &block)
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.clean_registry
|
69
|
+
@registry = []
|
70
|
+
@enabled = nil
|
71
|
+
end
|
72
|
+
|
73
|
+
protected
|
74
|
+
|
75
|
+
def self.caching_block(status)
|
76
|
+
initial_status = @enabled
|
77
|
+
begin
|
78
|
+
@enabled = status
|
79
|
+
yield
|
80
|
+
ensure
|
81
|
+
reset if status
|
82
|
+
@enabled = initial_status
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
@@ -12,12 +12,20 @@ class Perry::Middlewares::CacheRecords
|
|
12
12
|
# TRP: Default to a 5 minute cache
|
13
13
|
DEFAULT_LONGEVITY = 5*60
|
14
14
|
|
15
|
+
def self.global_cache
|
16
|
+
@@global_cache ||= {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.reset_global_cache
|
20
|
+
@@global_cache = {}
|
21
|
+
end
|
22
|
+
|
15
23
|
def reset_cache_store(default_longevity=DEFAULT_LONGEVITY)
|
16
|
-
|
24
|
+
self.class.global_cache[self] = Perry::Middlewares::CacheRecords::Store.new(default_longevity)
|
17
25
|
end
|
18
26
|
|
19
27
|
def cache_store
|
20
|
-
|
28
|
+
self.class.global_cache[self] || reset_cache_store
|
21
29
|
end
|
22
30
|
|
23
31
|
def initialize(adapter, config={})
|
@@ -26,7 +34,7 @@ class Perry::Middlewares::CacheRecords
|
|
26
34
|
end
|
27
35
|
|
28
36
|
def call(options)
|
29
|
-
if options[:relation]
|
37
|
+
if options[:relation] && Perry::Caching.enabled?
|
30
38
|
call_with_cache(options)
|
31
39
|
else
|
32
40
|
@adapter.call(options)
|
@@ -67,3 +75,7 @@ class Perry::Middlewares::CacheRecords
|
|
67
75
|
!options[:noop]
|
68
76
|
end
|
69
77
|
end
|
78
|
+
|
79
|
+
# Register the cache clearing method with the Caching class
|
80
|
+
Perry::Caching.register(Perry::Middlewares::CacheRecords.method(:reset_global_cache))
|
81
|
+
|
data/lib/perry/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 6
|
9
|
+
- 0
|
10
|
+
version: 0.6.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Travis Petticrew
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-25 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/perry/associations/contains.rb
|
149
149
|
- lib/perry/associations/external.rb
|
150
150
|
- lib/perry/base.rb
|
151
|
+
- lib/perry/caching.rb
|
151
152
|
- lib/perry/core_ext/kernel/singleton_class.rb
|
152
153
|
- lib/perry/errors.rb
|
153
154
|
- lib/perry/logger.rb
|