forget-me-not 0.3.2.2 → 0.3.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MWQ5ODI0Njg4OGM5NmEyN2Y1YWE0Njg3Njc5ODEyMTYyNjJkMjg4Yg==
5
- data.tar.gz: !binary |-
6
- OGZkMGZjMWExMWFjNDQyZjM5NjhjMzFiZmM4MzhiMDY3MjY0Njc1NQ==
2
+ SHA1:
3
+ metadata.gz: e9d63f71859db7131922113b56e78be6ed7fa1fd
4
+ data.tar.gz: e092139b53b438533be342c47bb64a6bdc707f01
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Y2Q2ODU1N2QzZGZjZWIxOGQ1YWQ0N2ZiYTVhNGVmMDllODNiZmU5ZjNkOTM4
10
- ZGU4YTI1ZjhiNTdiYzBmNDk2NDNkYzE4MzA0ZDFiOGQ5MWEwNTE3NzY4NDRi
11
- YWEwYmVjMzhlZGJmMmFhNTJjOGQ4ODFhYjRlZDFmNDM1MmE2MjE=
12
- data.tar.gz: !binary |-
13
- ODFkMTlkZjZlZGZiYmExNzAyYWE5MGY3MDMwOWI5YWIxMjYxZWJkNTQ1YjA0
14
- M2EyNzg3NDAzOGQ0OGY3ZWNmNzc1ODEzZTc2MTJiNTM4MzBkNDc0YTE5YTQy
15
- MDZjNWY4ZjQ4N2E3Y2FmMjNhODcyYzc0YmYzZDUxZTk0MDM2YTc=
6
+ metadata.gz: 1474e10c8c3160243502f1578b95adf5b0850b1edf27852949de1f5c84b2d6dcdf9fc808ccc6e231b89f8b1dfee6768df011003db2977a0ca94abf80fbf6f4f6
7
+ data.tar.gz: 7671c7048583e1516c13f4d080f0444ba26e447b47fb7ed20cecba8dcd25e9097a6f41e98540eb831b576d9fd232f2442fa6d5cab20bd61dfb79634368453ca2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,4 @@
1
+ ## 0.3.2.3 - Improve logging control
1
2
  ## 0.3.2.1 - Add the ability to log cache hits and misses
2
3
  ## 0.3.2.0 - Revise the method for computing keys in cacheable.
3
4
  Need to use the digest for both the arguments and the instance properties.
@@ -7,4 +8,4 @@ Was using Ruby's hash(), but that varies by ruby runtime.
7
8
 
8
9
  ## 0.3.0.0 - Detect attempts to pass a block to cached or memoized methods and raise an error.
9
10
  ## 0.2.0.0 - Still pre release, but made a new method for memoizing methods with args.
10
- ## 0.1.0.0 - Pre Release
11
+ ## 0.1.0.0 - Pre Release
data/README.md CHANGED
@@ -178,6 +178,10 @@ instance of MemoryStore will be used. Failing that, cache will raise an error.
178
178
  This is intended to provide a reasonably sane default, but really, set the ForgetMeNot::Cacheable.cache with something
179
179
  shaped like an ActiveSupport::Cacheable::Store
180
180
 
181
+ ## Troubleshooting
182
+ Both Memoizable and Cacheable have logging of their cache activity (cacheable more so). By default, this is disabled.
183
+ To enable logging, change the module property log_activity to true. Both the cache and memoizable specs do this.
184
+
181
185
  ## Origins
182
186
  This is an extension of the ideas and approach found here:
183
187
  https://github.com/sferik/twitter/blob/master/lib/twitter/memoizable.rb. You guys rock.
@@ -192,4 +196,4 @@ https://github.com/sferik/twitter/blob/master/lib/twitter/memoizable.rb. You gu
192
196
  6. Create new Pull Request
193
197
 
194
198
  ## Copyright
195
- (c) 2013 Koan Health. See LICENSE.txt for further details.
199
+ (c) 2013 Koan Health. See LICENSE.txt for further details.
data/lib/forget-me-not.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'forget-me-not/version'
2
2
 
3
+ require 'forget-me-not/logging'
3
4
  require 'forget-me-not/cacheable'
4
5
  require 'forget-me-not/memoizable'
5
6
  require 'forget-me-not/hash_cache'
@@ -10,6 +10,9 @@ module ForgetMeNot
10
10
  end
11
11
  end
12
12
 
13
+ extend Logging
14
+
15
+
13
16
  module ClassMethods
14
17
  def cache_results(*methods)
15
18
  options = methods.last.is_a?(Hash) ? methods.pop : {}
@@ -38,10 +41,10 @@ module ForgetMeNot
38
41
  raise 'Cannot pass blocks to cached methods' if block
39
42
 
40
43
  cache_key = [
41
- key_prefix,
42
- (instance_key && instance_key.call(self)),
43
- method_name,
44
- args.to_s,
44
+ key_prefix,
45
+ (instance_key && instance_key.call(self)),
46
+ method_name,
47
+ args.to_s,
45
48
  ].compact.join '/'
46
49
 
47
50
  cache_key_hash = Digest::SHA1.hexdigest(cache_key)
@@ -52,7 +55,7 @@ module ForgetMeNot
52
55
  method.bind(self).call(*args)
53
56
  end
54
57
 
55
- if Cacheable.log_cache_activity
58
+ if Cacheable.log_activity
56
59
  Cacheable.logger.info "Cache #{cache_hit ? 'hit' : 'miss'} for #{cache_key} (#{cache_key_hash})"
57
60
  end
58
61
 
@@ -132,40 +135,17 @@ module ForgetMeNot
132
135
  end
133
136
  end
134
137
 
135
- class << self
136
- attr_accessor :log_cache_activity
137
-
138
- def logger
139
- return @logger if defined?(@logger)
140
- @logger = rails_logger || default_logger
141
- end
142
-
143
- def logger=(logger)
144
- @logger = logger
145
- end
146
-
147
- def rails_logger
148
- defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
149
- end
150
-
151
- def default_logger
152
- logger = Logger.new(STDOUT)
153
- logger.level = Logger::INFO
154
- logger
155
- end
156
- end
157
-
158
138
 
159
139
  private
160
140
  def self.default_cache
161
141
  rails_cache ||
162
- active_support_cache ||
163
- raise(
164
- <<-ERR_TEXT
165
- When using Cacheable in a project that does not have a Rails or ActiveSupport Cache,
166
- you must explicitly set the cache to an object shaped like ActiveSupport::Cache::Store
167
- ERR_TEXT
168
- )
142
+ active_support_cache ||
143
+ raise(
144
+ <<-ERR_TEXT
145
+ When using Cacheable in a project that does not have a Rails or ActiveSupport Cache,
146
+ you must explicitly set the cache to an object shaped like ActiveSupport::Cache::Store
147
+ ERR_TEXT
148
+ )
169
149
  end
170
150
 
171
151
  def self.rails_cache
@@ -174,10 +154,10 @@ module ForgetMeNot
174
154
 
175
155
  def self.active_support_cache
176
156
  defined?(ActiveSupport) &&
177
- defined?(ActiveSupport::Cache) &&
178
- defined?(ActiveSupport::Cache::MemoryStore) &&
179
- ActiveSupport::Cache::MemoryStore.new
157
+ defined?(ActiveSupport::Cache) &&
158
+ defined?(ActiveSupport::Cache::MemoryStore) &&
159
+ ActiveSupport::Cache::MemoryStore.new
180
160
  end
181
161
 
182
162
  end
183
- end
163
+ end
@@ -0,0 +1,24 @@
1
+ module ForgetMeNot
2
+ module Logging
3
+ attr_accessor :log_activity
4
+
5
+ def logger
6
+ return @logger if defined?(@logger)
7
+ @logger = rails_logger || default_logger
8
+ end
9
+
10
+ def logger=(logger)
11
+ @logger = logger
12
+ end
13
+
14
+ def rails_logger
15
+ defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
16
+ end
17
+
18
+ def default_logger
19
+ logger = Logger.new(STDOUT)
20
+ logger.level = Logger::INFO
21
+ logger
22
+ end
23
+ end
24
+ end
@@ -6,6 +6,8 @@ module ForgetMeNot
6
6
  base.extend(ClassMethods)
7
7
  end
8
8
  end
9
+ extend Logging
10
+
9
11
 
10
12
  module ClassMethods
11
13
  def memoize(*methods)
@@ -22,7 +24,7 @@ module ForgetMeNot
22
24
  private
23
25
  def memoize_method(method_name, options)
24
26
  method = instance_method(method_name)
25
- raise 'Cannot memoize with arity > 0. Use memoize_with_args instead.' if method.arity > 0 && ! options[:allow_args]
27
+ raise 'Cannot memoize with arity > 0. Use memoize_with_args instead.' if method.arity > 0 && !options[:allow_args]
26
28
  visibility = method_visibility(method_name)
27
29
  define_memoized_method(method, options)
28
30
  send(visibility, method_name)
@@ -37,12 +39,14 @@ module ForgetMeNot
37
39
  raise 'Cannot pass blocks to memoized methods' if block
38
40
 
39
41
  memoize_key = [
40
- key_prefix,
41
- method_name,
42
- args.hash
42
+ key_prefix,
43
+ method_name,
44
+ args.hash
43
45
  ].compact.join '/'
44
46
 
45
- puts "key: #{memoize_key}" if (defined?(Rails) && Rails.env.test?)
47
+ if Memoizable.log_activity
48
+ Memoizable.logger.info("key: #{memoize_key}")
49
+ end
46
50
 
47
51
  fetch_from_storage(memoize_key) do
48
52
  method.bind(self).call(*args)
@@ -61,6 +65,10 @@ module ForgetMeNot
61
65
  end
62
66
  end
63
67
 
68
+ def log(message)
69
+ ForgetMeNot.logger.info "key: #{memoize_key}" if ForgetMeNot.logger
70
+ end
71
+
64
72
  def fetch_from_storage(key, &block)
65
73
  storage.fetch(key, &block)
66
74
  end
@@ -71,7 +79,7 @@ module ForgetMeNot
71
79
 
72
80
  class << self
73
81
  def storage_builder
74
- @storage_builder ||= Proc.new {HashCache.new}
82
+ @storage_builder ||= Proc.new { HashCache.new }
75
83
  end
76
84
 
77
85
  def storage_builder=(builder)
@@ -80,4 +88,6 @@ module ForgetMeNot
80
88
  end
81
89
 
82
90
  end
91
+ mattr_accessor :logger
92
+
83
93
  end
@@ -1,3 +1,3 @@
1
1
  module ForgetMeNot
2
- VERSION = '0.3.2.2'
2
+ VERSION = '0.3.2.3'
3
3
  end
@@ -93,7 +93,7 @@ module ForgetMeNot
93
93
 
94
94
  describe Cacheable do
95
95
  before do
96
- Cacheable.log_cache_activity = true
96
+ Cacheable.log_activity = true
97
97
  Cacheable.cache = ActiveSupport::Cache::MemoryStore.new
98
98
  TestClass.clear_calls
99
99
  TestClass2.clear_calls
@@ -37,6 +37,8 @@ module ForgetMeNot
37
37
 
38
38
  describe Memoizable do
39
39
  before do
40
+ Memoizable.log_activity = true
41
+
40
42
  MemoizeTestClass.clear_calls
41
43
  end
42
44
 
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forget-me-not
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2.2
4
+ version: 0.3.2.3
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-20 00:00:00.000000000 Z
11
+ date: 2016-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 2.14.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 2.14.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: timecop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: coveralls
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  description: Caching and Memoization Mixins
@@ -101,15 +101,16 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - lib/forget-me-not/cacheable.rb
105
- - lib/forget-me-not/hash_cache.rb
106
- - lib/forget-me-not/memoizable.rb
107
- - lib/forget-me-not/version.rb
108
- - lib/forget-me-not.rb
109
104
  - CHANGELOG.md
110
105
  - LICENSE.txt
111
106
  - README.md
112
107
  - Rakefile
108
+ - lib/forget-me-not.rb
109
+ - lib/forget-me-not/cacheable.rb
110
+ - lib/forget-me-not/hash_cache.rb
111
+ - lib/forget-me-not/logging.rb
112
+ - lib/forget-me-not/memoizable.rb
113
+ - lib/forget-me-not/version.rb
113
114
  - spec/cacheable_spec.rb
114
115
  - spec/memoizable_spec.rb
115
116
  - spec/spec_helper.rb
@@ -124,17 +125,17 @@ require_paths:
124
125
  - lib
125
126
  required_ruby_version: !ruby/object:Gem::Requirement
126
127
  requirements:
127
- - - ! '>='
128
+ - - ">="
128
129
  - !ruby/object:Gem::Version
129
130
  version: '1.9'
130
131
  required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  requirements:
132
- - - ! '>='
133
+ - - ">="
133
134
  - !ruby/object:Gem::Version
134
135
  version: 1.3.6
135
136
  requirements: []
136
137
  rubyforge_project:
137
- rubygems_version: 2.1.11
138
+ rubygems_version: 2.4.6
138
139
  signing_key:
139
140
  specification_version: 4
140
141
  summary: Mixins that provide caching and memoization for Ruby classes