forget-me-not 0.3.2.2 → 0.3.2.3

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