rufus-lru 1.0.1 → 1.0.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.
Files changed (4) hide show
  1. data/README.txt +16 -5
  2. data/lib/rufus/lru.rb +20 -10
  3. data/test/test.rb +13 -1
  4. metadata +2 -2
data/README.txt CHANGED
@@ -10,7 +10,7 @@ LruHash class, a Hash with a max size, controlled by a LRU mechanism
10
10
 
11
11
  or at
12
12
 
13
- http://rubyforge.org/frs/?group_id=4812
13
+ http://rubyforge.org/frs/?group_id=4812
14
14
 
15
15
 
16
16
  == usage
@@ -34,23 +34,34 @@ least recently used (hence LRU).
34
34
  puts h.inspect # >> {:newer=>"b", 3=>"aaa", 4=>"aaaa"}
35
35
 
36
36
 
37
+ == dependencies
38
+
39
+ None.
40
+
41
+
37
42
  == mailing list
38
43
 
39
- On the OpenWFEru-user for now :
44
+ On the OpenWFEru-user list for now :
45
+
46
+ http://groups.google.com/group/openwferu-users
47
+
48
+
49
+ == issue tracker
40
50
 
41
- http://groups.google.com/group/openwferu-users
51
+ http://rubyforge.org/tracker/?atid=18584&group_id=4812&func=browse
42
52
 
43
53
 
44
54
  == source
45
55
 
46
- http://rufus.rubyforge.org/svn/trunk/lru
56
+ http://rufus.rubyforge.org/svn/trunk/lru
47
57
 
48
58
  svn checkout http://rufus.rubyforge.org/svn/trunk/lru
49
59
 
50
60
 
51
61
  == author
52
62
 
53
- John Mettraux, jmettraux@gmail.com, http://jmettraux.wordpress.com
63
+ John Mettraux, jmettraux@gmail.com
64
+ http://jmettraux.wordpress.com
54
65
 
55
66
 
56
67
  == license
data/lib/rufus/lru.rb CHANGED
@@ -75,7 +75,7 @@ class LruHash < Hash
75
75
  def maxsize= (s)
76
76
 
77
77
  @maxsize = s
78
- remove_lru while size > @maxsize
78
+ remove_lru
79
79
  end
80
80
 
81
81
  def clear
@@ -96,24 +96,31 @@ class LruHash < Hash
96
96
 
97
97
  value = super
98
98
  return nil unless value
99
- touch(key)
99
+ touch key
100
100
 
101
101
  value
102
102
  end
103
103
 
104
104
  def []= (key, value)
105
105
 
106
- remove_lru while size >= @maxsize
106
+ remove_lru
107
107
  super
108
- touch(key)
108
+ touch key
109
109
 
110
110
  value
111
111
  end
112
112
 
113
+ def merge! (hash)
114
+
115
+ hash.each { |k, v| self[k] = v }
116
+
117
+ # not using 'super', but in order not guaranteed at all...
118
+ end
119
+
113
120
  def delete (key)
114
121
 
115
122
  value = super
116
- @lru_keys.delete(key)
123
+ @lru_keys.delete key
117
124
 
118
125
  value
119
126
  end
@@ -126,18 +133,21 @@ class LruHash < Hash
126
133
  #
127
134
  def touch (key)
128
135
 
129
- @lru_keys.delete(key)
136
+ @lru_keys.delete key
130
137
  @lru_keys << key
131
138
  end
132
139
 
133
140
  #
134
- # Removes the lru value and returns it.
135
- # Returns nil if the cache is currently empty.
141
+ # Makes sure that the hash fits its maxsize. If not, will remove
142
+ # the least recently used items.
136
143
  #
137
144
  def remove_lru
138
145
 
139
- key = @lru_keys.delete_at 0
140
- delete key
146
+ while size >= @maxsize
147
+
148
+ key = @lru_keys.delete_at 0
149
+ delete key
150
+ end
141
151
  end
142
152
  end
143
153
 
data/test/test.rb CHANGED
@@ -20,7 +20,7 @@ class LruTest < Test::Unit::TestCase
20
20
  #def teardown
21
21
  #end
22
22
 
23
- def test_lru_0
23
+ def test_0
24
24
 
25
25
  h = LruHash.new 3
26
26
 
@@ -70,4 +70,16 @@ class LruTest < Test::Unit::TestCase
70
70
  assert_equal [ :b, :a, :d ], h.ordered_keys
71
71
  end
72
72
 
73
+ def test_1
74
+
75
+ h = LruHash.new 3
76
+
77
+ h[1] = 10
78
+
79
+ h.merge!({ 2 => 20, 3 => 30, 4 => 40, 5 => 50 })
80
+
81
+ assert_nil h[1]
82
+ assert_equal 3, h.size
83
+ end
84
+
73
85
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufus-lru
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-15 00:00:00 +09:00
12
+ date: 2008-01-18 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15