forget-me-not 0.3.2 → 0.3.2.1

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
- MjkxMWJmMmY2NWMwYmZiN2FhNDFlZjY3N2E4NGMwYjljMGMyNzJjOQ==
4
+ ZTExZjc2Zjk2OWUzNWJjODVmOWU1MTM2MWUzMzJkNjk0YTIyYTNiMQ==
5
5
  data.tar.gz: !binary |-
6
- MzczYmI5Yzc5MjIwMmY4NDc2OWQxNzkwYzlhNDllMTZmMDEyMmVhYQ==
6
+ ZTEwNTAwMDA3OWE1NTM3NWMwYzM4MTIwZTEwZTU4ZWQwY2FlZjljMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzYyY2IwZDkxZDQwNzYxMzFiNTAwMTc4NzE1NDgzNjE5NGFkM2VmNWQwOWEz
10
- NThiMTgyNzVjOGZjMTg4YjIwMDkxOGMzYWJjZDA0ZjZmMjM5NDE2NWM2YWJh
11
- MTJiOTMwOGZmNDBkODUxYmNhYWEyNDM2NDA4MWY2NGRjODYwOWM=
9
+ MjE4NjNmOGMyNTI0MmFjZWYzYjJjNzczYjFlZTc4YzM0ZGQyNjI4MjI4NzJk
10
+ ZWZlMjdlOTk4MzMyMTgwZGY0M2RkODcwYjZlZGI2MjRmZjNiM2E2OGYyMDli
11
+ ZTNlZmMwYmYwYTI2ZTgyYzkzYjZjOGIwOGVlNzMxZGZlZWQ1Zjc=
12
12
  data.tar.gz: !binary |-
13
- ZTVjZmM1NjJmZmZmNmIxZGJiZTBhODdjOGYxODMxNmFiN2E1ZDk0MTgxOThi
14
- NGVlODkyNGFiODkwNjVlMWUzMDlmNDE2ZTBiNzk3YjViN2Y5NDE3OTEyNGM5
15
- YzZkNTgyY2M2Mzc2MGIxYTVkMWU0MjcxODBiNjViOGQ4NzZkNmE=
13
+ N2RjYzY2YWY3YWRlZGU2MmE1MDRmZTA5MjBjY2NmYWY3NDA1Mjg5MWU0MGM3
14
+ NzkwYWQ5MjkwMGM4NDE5ODkyZWFhYmVlYjI1MzFiOTllNWYxZTI4NzcyYmZk
15
+ YzhiNDdlM2RkYzQ4ZTY1NDI2OGQwNDJhYmI4ZTI4YjUxMGFmOTc=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,4 @@
1
+ ## 0.3.2.1 - Add the ability to log cache hits and misses
1
2
  ## 0.3.2.0 - Revise the method for computing keys in cacheable.
2
3
  Need to use the digest for both the arguments and the instance properties.
3
4
 
@@ -31,29 +31,32 @@ 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_proc = get_instance_key_proc(options[:include]) if options.has_key?(:include)
34
+ instance_key = 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
41
39
 
42
40
  cache_key = [
43
41
  key_prefix,
44
- instance_key_hash,
42
+ (instance_key && instance_key.call(self)),
45
43
  method_name,
46
- Digest::SHA1.hexdigest(args.to_s)
44
+ args.to_s,
47
45
  ].compact.join '/'
48
46
 
49
- # 'Double bagging' the key makes sure that we do not overflow the range of a string hash key
50
47
  cache_key_hash = Digest::SHA1.hexdigest(cache_key)
51
48
 
52
- puts "key: #{cache_key} (#{cache_key_hash})" if defined?(Testing)
53
-
54
- Cacheable.cache_fetch(cache_key_hash) do
49
+ cache_hit = true
50
+ result = Cacheable.cache_fetch(cache_key_hash) do
51
+ cache_hit = false
55
52
  method.bind(self).call(*args)
56
53
  end
54
+
55
+ if Cacheable.log_cache_activity
56
+ Cacheable.logger.info "Cache #{cache_hit ? 'hit' : 'miss'} for #{cache_key} (#{cache_key_hash})"
57
+ end
58
+
59
+ result
57
60
  end
58
61
  end
59
62
 
@@ -122,6 +125,30 @@ module ForgetMeNot
122
125
  end
123
126
  end
124
127
 
128
+ class << self
129
+ attr_accessor :log_cache_activity
130
+
131
+ def logger
132
+ return @logger if defined?(@logger)
133
+ @logger = rails_logger || default_logger
134
+ end
135
+
136
+ def logger=(logger)
137
+ @logger = logger
138
+ end
139
+
140
+ def rails_logger
141
+ defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
142
+ end
143
+
144
+ def default_logger
145
+ logger = Logger.new(STDOUT)
146
+ logger.level = Logger::INFO
147
+ logger
148
+ end
149
+ end
150
+
151
+
125
152
  private
126
153
  def self.default_cache
127
154
  rails_cache ||
@@ -1,3 +1,3 @@
1
1
  module ForgetMeNot
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.2.1'
3
3
  end
@@ -65,6 +65,7 @@ module ForgetMeNot
65
65
 
66
66
  describe Cacheable do
67
67
  before do
68
+ Cacheable.log_cache_activity = true
68
69
  Cacheable.cache = ActiveSupport::Cache::MemoryStore.new
69
70
  TestClass.clear_calls
70
71
  TestClass2.clear_calls
@@ -206,9 +207,7 @@ module ForgetMeNot
206
207
  foo = TestClass2.new('general', 201312)
207
208
  foo.method1
208
209
 
209
- puts Cacheable.cache.inspect
210
- puts Cacheable.cache.instance_variable_get('@data').inspect
211
- ugly_hash_key = "dd22a078b1a5e6e8cb2a0f8f0bf1105823103249"
210
+ ugly_hash_key = '90914de582dd73182e909216e27b3898120e07c3'
212
211
  expect(Cacheable.cache.read(ugly_hash_key)).not_to be_nil
213
212
  end
214
213
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forget-me-not
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koan Health
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-19 00:00:00.000000000 Z
11
+ date: 2013-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport