forget-me-not 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDBlMjk4MDJmODI1YmU4Njc5NDA0ZjMxNjA3MmUwZTMyODgzMDg1YQ==
4
+ MjkxMWJmMmY2NWMwYmZiN2FhNDFlZjY3N2E4NGMwYjljMGMyNzJjOQ==
5
5
  data.tar.gz: !binary |-
6
- Mjc4Yjg0YjcwOGJjOTE4NDVkZWQ3MDg0NWZhODhiMjI4N2RhNTFmNg==
6
+ MzczYmI5Yzc5MjIwMmY4NDc2OWQxNzkwYzlhNDllMTZmMDEyMmVhYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmZhOTEwOTE3NGY2YzljODFhNzgzZTU0YjMwMzU3YjBhMjA1ZjEwYjZmN2Jh
10
- MmFmYzM2YjFlOTQzNmExNzAxYjE3YzFhNzUyZmQ1MzZlMzQyYWMzZTNhODhh
11
- M2EyY2M5Y2U0MjE3OTU2Zjk0ODg5OTUxOTQ4ZDNjOTUzY2NkYTE=
9
+ YzYyY2IwZDkxZDQwNzYxMzFiNTAwMTc4NzE1NDgzNjE5NGFkM2VmNWQwOWEz
10
+ NThiMTgyNzVjOGZjMTg4YjIwMDkxOGMzYWJjZDA0ZjZmMjM5NDE2NWM2YWJh
11
+ MTJiOTMwOGZmNDBkODUxYmNhYWEyNDM2NDA4MWY2NGRjODYwOWM=
12
12
  data.tar.gz: !binary |-
13
- YzRiN2VhZmNkYTBlNzYwY2YxYWY5MzM1MGE4MzQxYWU4YTllZGFlNTA4OGM5
14
- MTgxZjlkYzhlYjdmNDU3ZWVjYTliMTk4MDZmNWJmOTBjZWViZDg5NTdiMWMy
15
- YWFmNGU3MjI5ZmJiM2RkZTY3MDY4Y2FhNWI5ZWM1M2U1ZjhiNGE=
13
+ ZTVjZmM1NjJmZmZmNmIxZGJiZTBhODdjOGYxODMxNmFiN2E1ZDk0MTgxOThi
14
+ NGVlODkyNGFiODkwNjVlMWUzMDlmNDE2ZTBiNzk3YjViN2Y5NDE3OTEyNGM5
15
+ YzZkNTgyY2M2Mzc2MGIxYTVkMWU0MjcxODBiNjViOGQ4NzZkNmE=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.3.2.0 - Revise the method for computing keys in cacheable.
2
+ Need to use the digest for both the arguments and the instance properties.
3
+
4
+ ## 0.3.1.0 - Fix the method for computing argument keys in cacheable.
5
+ Was using Ruby's hash(), but that varies by ruby runtime.
6
+
1
7
  ## 0.3.0.0 - Detect attempts to pass a block to cached or memoized methods and raise an error.
2
8
  ## 0.2.0.0 - Still pre release, but made a new method for memoizing methods with args.
3
9
  ## 0.1.0.0 - Pre Release
@@ -31,22 +31,27 @@ module ForgetMeNot
31
31
  def define_cache_method(method, options)
32
32
  method_name = method.name.to_sym
33
33
  key_prefix = "/cached_method_result/#{self.name}"
34
- instance_key = get_instance_key_proc(options[:include]) if options.has_key?(:include)
34
+ instance_key_proc = get_instance_key_proc(options[:include]) if options.has_key?(:include)
35
35
 
36
36
  undef_method(method_name)
37
37
  define_method(method_name) do |*args, &block|
38
38
  raise 'Cannot pass blocks to cached methods' if block
39
+ instance_key = instance_key_proc.call(self) if instance_key_proc
40
+ instance_key_hash = Digest::SHA1.hexdigest(instance_key.to_s) if instance_key
39
41
 
40
42
  cache_key = [
41
43
  key_prefix,
42
- (instance_key && instance_key.call(self)),
44
+ instance_key_hash,
43
45
  method_name,
44
46
  Digest::SHA1.hexdigest(args.to_s)
45
47
  ].compact.join '/'
46
48
 
47
- puts "key: #{cache_key}" if defined?(Testing)
49
+ # 'Double bagging' the key makes sure that we do not overflow the range of a string hash key
50
+ cache_key_hash = Digest::SHA1.hexdigest(cache_key)
48
51
 
49
- Cacheable.cache_fetch(cache_key) do
52
+ puts "key: #{cache_key} (#{cache_key_hash})" if defined?(Testing)
53
+
54
+ Cacheable.cache_fetch(cache_key_hash) do
50
55
  method.bind(self).call(*args)
51
56
  end
52
57
  end
@@ -55,7 +60,7 @@ module ForgetMeNot
55
60
  def get_instance_key_proc(instance_key_methods)
56
61
  instance_keys = Array.new(instance_key_methods).flatten
57
62
  Proc.new do |instance|
58
- instance_keys.map { |key| instance.send(key) }.hash
63
+ instance_keys.map { |key| instance.send(key) }
59
64
  end
60
65
  end
61
66
 
@@ -1,3 +1,3 @@
1
1
  module ForgetMeNot
2
- VERSION = '0.3.1'
2
+ VERSION = '0.3.2'
3
3
  end
@@ -201,6 +201,16 @@ module ForgetMeNot
201
201
  expect(bar.method1).to eq '[general,201311].method1'
202
202
  expect(TestClass2.count(:method1)).to eq 2
203
203
  end
204
+
205
+ it 'Retains key consistency across process runs' do
206
+ foo = TestClass2.new('general', 201312)
207
+ foo.method1
208
+
209
+ puts Cacheable.cache.inspect
210
+ puts Cacheable.cache.instance_variable_get('@data').inspect
211
+ ugly_hash_key = "dd22a078b1a5e6e8cb2a0f8f0bf1105823103249"
212
+ expect(Cacheable.cache.read(ugly_hash_key)).not_to be_nil
213
+ end
204
214
  end
205
215
 
206
216
  describe 'cachers' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forget-me-not
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koan Health