forget-me-not 0.3.2 → 0.3.2.1

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.
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