sized_list 0.1.0 → 0.2.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/VERSION +1 -1
- data/lib/active_support/cache/lru.rb +122 -0
- data/lib/sized_list.rb +5 -0
- data/sized_list.gemspec +57 -0
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# Most of the logic here was based on the dalli gem
|
2
|
+
module ActiveSupport
|
3
|
+
module Cache
|
4
|
+
class Lru
|
5
|
+
attr_reader :silence, :options
|
6
|
+
alias_method :silence?, :silence
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@options = options
|
10
|
+
@sized_list = SizedList.new @options[:max_size]
|
11
|
+
end
|
12
|
+
|
13
|
+
# Silence the logger.
|
14
|
+
def silence!
|
15
|
+
@silence = true
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
# Silence the logger within a block.
|
20
|
+
def mute
|
21
|
+
previous_silence, @silence = defined?(@silence) && @silence, true
|
22
|
+
yield
|
23
|
+
ensure
|
24
|
+
@silence = previous_silence
|
25
|
+
end
|
26
|
+
|
27
|
+
def fetch(name, options=nil)
|
28
|
+
if block_given?
|
29
|
+
entry = instrument(:read, name, options) do |payload|
|
30
|
+
payload[:super_operation] = :fetch if payload
|
31
|
+
read(name, options)
|
32
|
+
end
|
33
|
+
|
34
|
+
if !entry.nil?
|
35
|
+
instrument(:fetch_hit, name, options) { |payload| }
|
36
|
+
entry
|
37
|
+
else
|
38
|
+
result = instrument(:generate, name, options) do |payload|
|
39
|
+
yield
|
40
|
+
end
|
41
|
+
write(name, result, options)
|
42
|
+
result
|
43
|
+
end
|
44
|
+
else
|
45
|
+
read(name, options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def read(name, options=nil)
|
50
|
+
instrument(:read, name, options) do |payload|
|
51
|
+
entry = @sized_list[name]
|
52
|
+
payload[:hit] = !!entry if payload
|
53
|
+
entry
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def write(name, value, options=nil)
|
58
|
+
instrument(:write, name, options) do |payload|
|
59
|
+
@sized_list[name] = value
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def exist?(name, options=nil)
|
64
|
+
@sized_list.exist? name
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete(name, options=nil)
|
68
|
+
raise 'not implemented'
|
69
|
+
end
|
70
|
+
|
71
|
+
def read_multi(*names)
|
72
|
+
{}.tap do |results|
|
73
|
+
names.each do |n|
|
74
|
+
if v = @sized_list[n]
|
75
|
+
results[n] = v
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def increment(name, amount = 1, options=nil)
|
82
|
+
if v = @sized_list[name]
|
83
|
+
@sized_list[name] = v + amount
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def decrement(name, amount = 1, options=nil)
|
88
|
+
if v = @sized_list[name]
|
89
|
+
@sized_list[name] = v - amount
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def reset
|
94
|
+
@sized_list = SizedList.new @options[:max_size]
|
95
|
+
end
|
96
|
+
alias clear reset
|
97
|
+
|
98
|
+
protected
|
99
|
+
|
100
|
+
def instrument(operation, key, options=nil)
|
101
|
+
log(operation, key, options)
|
102
|
+
|
103
|
+
if ActiveSupport::Cache::Store.instrument
|
104
|
+
payload = { :key => key }
|
105
|
+
payload.merge!(options) if options.is_a?(Hash)
|
106
|
+
ActiveSupport::Notifications.instrument("cache_#{operation}.active_support", payload){ yield(payload) }
|
107
|
+
else
|
108
|
+
yield(nil)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def log(operation, key, options=nil)
|
113
|
+
return unless logger && logger.debug? && !silence?
|
114
|
+
logger.debug("Cache #{operation}: #{key}#{options.blank? ? "" : " (#{options.inspect})"}")
|
115
|
+
end
|
116
|
+
|
117
|
+
def logger
|
118
|
+
Rails.logger
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/sized_list.rb
CHANGED
data/sized_list.gemspec
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "sized_list"
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Doug Youch"]
|
12
|
+
s.date = "2013-05-20"
|
13
|
+
s.description = "Uses LRU functionality to keep a limited size list of items"
|
14
|
+
s.email = "doug@sessionm.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"lib/active_support/cache/lru.rb",
|
28
|
+
"lib/sized_list.rb",
|
29
|
+
"sized_list.gemspec",
|
30
|
+
"spec/sized_list_spec.rb",
|
31
|
+
"spec/spec_helper.rb"
|
32
|
+
]
|
33
|
+
s.homepage = "http://github.com/dyouch5@yahoo.com/sized_list"
|
34
|
+
s.licenses = ["MIT"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = "1.8.23"
|
37
|
+
s.summary = "Limited size list"
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 3
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
44
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
45
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
46
|
+
else
|
47
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
48
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
49
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
53
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
54
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sized_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -74,7 +74,9 @@ files:
|
|
74
74
|
- README.rdoc
|
75
75
|
- Rakefile
|
76
76
|
- VERSION
|
77
|
+
- lib/active_support/cache/lru.rb
|
77
78
|
- lib/sized_list.rb
|
79
|
+
- sized_list.gemspec
|
78
80
|
- spec/sized_list_spec.rb
|
79
81
|
- spec/spec_helper.rb
|
80
82
|
homepage: http://github.com/dyouch5@yahoo.com/sized_list
|
@@ -92,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
94
|
version: '0'
|
93
95
|
segments:
|
94
96
|
- 0
|
95
|
-
hash:
|
97
|
+
hash: 2720490057972214731
|
96
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
99
|
none: false
|
98
100
|
requirements:
|