pinky 2.0.0-java → 2.0.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/pinky/cache.rb +7 -6
- data/lib/pinky/has_caches.rb +5 -7
- data/lib/pinky/lru_cache.rb +17 -0
- data/pinky.gemspec +2 -1
- data/spec/pinky/cache_spec.rb +17 -1
- data/spec/pinky/has_caches_spec.rb +2 -2
- data/spec/pinky/model_fetch_methods_spec.rb +1 -1
- metadata +2 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1
|
data/lib/pinky/cache.rb
CHANGED
@@ -2,7 +2,7 @@ module Pinky
|
|
2
2
|
class Cache
|
3
3
|
extend Forwardable
|
4
4
|
|
5
|
-
attr_reader :name
|
5
|
+
attr_reader :name, :capacity
|
6
6
|
def_delegators :cache, :size, :count, :empty?
|
7
7
|
|
8
8
|
class << self
|
@@ -11,8 +11,9 @@ module Pinky
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(
|
15
|
-
@
|
14
|
+
def initialize(item_methods, capacity)
|
15
|
+
@capacity = capacity
|
16
|
+
@item_methods = [item_methods].flatten.sort
|
16
17
|
@name = self.class.name_for(@item_methods)
|
17
18
|
end
|
18
19
|
|
@@ -25,13 +26,13 @@ module Pinky
|
|
25
26
|
if action == :destroy
|
26
27
|
cache.delete key
|
27
28
|
else
|
28
|
-
cache
|
29
|
+
cache.put(key, item)
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
33
|
def query(query_hash = {})
|
33
34
|
key = query_hash.sort.map { |k,v| v }.join '.'
|
34
|
-
cache
|
35
|
+
cache.get(key)
|
35
36
|
end
|
36
37
|
|
37
38
|
def clear_cache
|
@@ -44,7 +45,7 @@ module Pinky
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def cache
|
47
|
-
@cache ||=
|
48
|
+
@cache ||= Collections.synchronizedMap(LruCache.new(@capacity));
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
data/lib/pinky/has_caches.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
module Pinky
|
1
|
+
module Pinky
|
2
2
|
module HasCaches
|
3
|
-
def cachable_by(
|
4
|
-
create_cache_for
|
3
|
+
def cachable_by(opts)
|
4
|
+
create_cache_for opts[:method_names], opts[:capacity]
|
5
5
|
end
|
6
6
|
|
7
7
|
def update_caches_with(item_hash, action = :create)
|
@@ -15,8 +15,8 @@ module Pinky
|
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
|
-
def create_cache_for(method_names)
|
19
|
-
cache = Cache.new
|
18
|
+
def create_cache_for(method_names, capacity)
|
19
|
+
cache = Cache.new(method_names, capacity || 100)
|
20
20
|
pinky_caches_by_name[cache.name] = cache
|
21
21
|
end
|
22
22
|
|
@@ -27,7 +27,5 @@ module Pinky
|
|
27
27
|
def pinky_caches
|
28
28
|
pinky_caches_by_name.values
|
29
29
|
end
|
30
|
-
|
31
30
|
end
|
32
|
-
|
33
31
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
java_import java.util.LinkedHashMap
|
2
|
+
java_import java.util.Collections
|
3
|
+
|
4
|
+
module Pinky
|
5
|
+
class LruCache < LinkedHashMap
|
6
|
+
attr_reader :maxEntries
|
7
|
+
|
8
|
+
def initialize(maxEntries)
|
9
|
+
super(maxEntries + 1, 1, true)
|
10
|
+
@maxEntries = maxEntries;
|
11
|
+
end
|
12
|
+
|
13
|
+
def removeEldestEntry(map)
|
14
|
+
return true if size > @maxEntries
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/pinky.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pinky"
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.1"
|
9
9
|
s.platform = "java"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/pinky/cache.rb",
|
32
32
|
"lib/pinky/exceptions.rb",
|
33
33
|
"lib/pinky/has_caches.rb",
|
34
|
+
"lib/pinky/lru_cache.rb",
|
34
35
|
"lib/pinky/model.rb",
|
35
36
|
"lib/pinky/model_fetch_methods.rb",
|
36
37
|
"pinky.gemspec",
|
data/spec/pinky/cache_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'date'
|
|
3
3
|
|
4
4
|
module Pinky
|
5
5
|
describe Cache do
|
6
|
-
let(:cache) { Cache.new
|
6
|
+
let(:cache) { Cache.new([:id, :name], 100) }
|
7
7
|
|
8
8
|
context 'Cache#name_for' do
|
9
9
|
it { Cache.name_for(:id).should == 'cache_by_id' }
|
@@ -36,6 +36,22 @@ module Pinky
|
|
36
36
|
cache.update_with(item, :destroy)
|
37
37
|
cache.empty?.should be_true
|
38
38
|
end
|
39
|
+
|
40
|
+
it 'should only store 20 items if capacity is capped at 20' do
|
41
|
+
cache = Cache.new([:id, :name], 2)
|
42
|
+
10.times {|i| cache.update_with(mock(id: i, name: 'foo'), :create) }
|
43
|
+
cache.send(:cache).size.should == 2
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'orders most recently used items ordered by usage' do
|
47
|
+
cache = Cache.new([:id, :name], 5)
|
48
|
+
10.times do |i|
|
49
|
+
cache.update_with(mock(id: i, name: 'foo'), :create)
|
50
|
+
cache.query(:id => 5, :name => 'foo')
|
51
|
+
cache.query(:id => 7, :name => 'foo')
|
52
|
+
end
|
53
|
+
cache.send(:cache).keys.last(2).should == ['5.foo', '7.foo']
|
54
|
+
end
|
39
55
|
end
|
40
56
|
|
41
57
|
context 'queryable' do
|
@@ -5,8 +5,8 @@ module Pinky
|
|
5
5
|
context 'with cachable_by declared' do
|
6
6
|
klass = Class.new do
|
7
7
|
extend Pinky::HasCaches
|
8
|
-
cachable_by :token
|
9
|
-
cachable_by :id, :foo
|
8
|
+
cachable_by method_names: :token
|
9
|
+
cachable_by method_names: [:id, :foo]
|
10
10
|
|
11
11
|
attr_reader :id, :foo, :bar, :token
|
12
12
|
def initialize id, foo, bar, token
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: pinky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.0.
|
5
|
+
version: 2.0.1
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Joel Friedman
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- lib/pinky/cache.rb
|
153
153
|
- lib/pinky/exceptions.rb
|
154
154
|
- lib/pinky/has_caches.rb
|
155
|
+
- lib/pinky/lru_cache.rb
|
155
156
|
- lib/pinky/model.rb
|
156
157
|
- lib/pinky/model_fetch_methods.rb
|
157
158
|
- pinky.gemspec
|