covercache 0.3.2 → 0.4.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 67fd5cda6532ead49dccc9024d97ba5c18f30c4c
4
- data.tar.gz: 4e6cddd4883669b1b1049b8774bee0610b8674e2
3
+ metadata.gz: cd4db05a4c6363e98a948daeb16b2968cded4169
4
+ data.tar.gz: c3fc3a7e634958920502b7ff6971e919a0ddbb84
5
5
  SHA512:
6
- metadata.gz: 1309aea0cf020fca3b156c1343c96aa157b3c9353432104bcce6bb18787bfa5e99be01b47b9764a038d7e342db70f7e21b66177d423d1ab1ed74eb6eab69c041
7
- data.tar.gz: 5de15c9308b8b980dc5e2876531299bc252098d38793f0997f9beacba8dca54758ebec17e26f3280015b48d27b3f83ff2705ce68a297811c0e6cefa8d5b318f7
6
+ metadata.gz: 2a2a4d9e1289249fae1b850db1dc2d09b30520a923bb45da804a2db93f1c99b434b88cea512dbb4f27c1989cf84c5d1199544fc2dc036d6de92b36a08131d810
7
+ data.tar.gz: b08f824c1445ca69f4d1c8b6a818dd3537f86c5ad9ef9884b898498eed1aba22f40903e601ac142e708f6c34c9362a0ed3d05cdea402a95f275050f4af56eed0
data/covercache.gemspec CHANGED
@@ -1,5 +1,4 @@
1
1
  # encoding: utf-8
2
-
3
2
  lib = File.expand_path('../lib', __FILE__)
4
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
4
  require 'covercache/version'
@@ -21,12 +20,11 @@ Gem::Specification.new do |spec|
21
20
 
22
21
  spec.add_dependency "activesupport", '>= 3.2.0', '< 4'
23
22
  spec.add_dependency "activerecord", '>= 3.2.0', '< 4'
24
-
23
+
25
24
  spec.add_development_dependency "bundler", "~> 1.3"
26
25
  spec.add_development_dependency "rails", '>= 3.2.0', '< 4'
27
26
  spec.add_development_dependency "rdoc"
28
27
  spec.add_development_dependency "rspec"
29
28
  spec.add_development_dependency "rake"
30
29
  spec.add_development_dependency "sqlite3"
31
-
32
30
  end
@@ -1,3 +1,3 @@
1
1
  module Covercache
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/covercache.rb CHANGED
@@ -52,30 +52,27 @@ require 'active_record'
52
52
  # Comments.cached_for_post_ids post_ids, cache_key: post_ids.hash
53
53
  #
54
54
  module Covercache
55
-
55
+ # General helper method (ex <tt>cache</tt> helper in PackRat)
56
56
  def self.logger
57
57
  @logger ||= rails_logger || default_logger
58
58
  end
59
-
59
+
60
60
  def self.rails_logger
61
61
  (defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger) ||
62
62
  (defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER.respond_to?(:debug) && RAILS_DEFAULT_LOGGER)
63
63
  end
64
-
64
+
65
65
  def self.default_logger
66
66
  require 'logger'
67
67
  l = Logger.new(STDOUT)
68
68
  l.level = Logger::DEBUG
69
69
  l
70
70
  end
71
-
71
+
72
72
  def self.logger=(logger)
73
73
  @logger = logger
74
74
  end
75
75
 
76
-
77
-
78
- # General helper method (ex <tt>cache</tt> helper in PackRat)
79
76
  module Base
80
77
  # Arguments:
81
78
  #
@@ -103,36 +100,34 @@ module Covercache
103
100
  #
104
101
  private
105
102
  def covercache(*keys, &block)
106
- klass = class_or_instance_class
107
- options = keys.extract_options!
108
- cover_opts = options.extract! :debug, :without_auto_key
109
-
110
- # if :no_auto_cache_keys was set, we skip creating our own key
111
- keys.prepend get_auto_cache_key(klass.name, caller) unless cover_opts[:without_auto_key]
103
+ options = keys.extract_options!
104
+ debug, without_auto_key = options.slice! :debug, :without_auto_key
112
105
 
113
- keys.flatten!.select!{|i| i.present? }
106
+ keys.prepend get_auto_cache_key(caller) unless !!without_auto_key
107
+ keys.flatten!.compact!
114
108
 
115
- if !!cover_opts[:debug]
116
- Covercache.logger.debug keys.inspect
117
- end
118
- # puts caller.inspect if !!cover_opts[:debug],
109
+ Covercache.logger.debug %([covercache] #{get_class_name} class generate cache key: #{keys.inspect}) if !!debug
119
110
 
120
111
  Rails.cache.fetch keys, options do
121
- klass.covercache_keys |= [ keys.join('/') ]
122
- Covercache.logger.debug(klass.covercache_keys.inspect) if !!cover_opts[:debug]
112
+ push_covercache_key keys.join('/')
123
113
  block.call
124
114
  end
125
115
  end
126
116
 
127
- def get_auto_cache_key(class_name, _caller)
117
+ def push_covercache_key(key)
118
+ self.covercache_keys << key
119
+ self.covercache_keys.uniq!
120
+ end
121
+
122
+ def get_auto_cache_key(_caller)
128
123
  caller_method = _caller.map {|c| c[/`([^']*)'/, 1] }.detect {|m| !m.start_with?('block') }
129
- keys = [class_name, covercache_model_digest, caller_method].compact
130
- keys << cache_key if self.respond_to?(:cache_key)
124
+ keys = [get_class_name, covercache_model_digest, caller_method]
125
+ keys << cache_key if respond_to?(:cache_key)
131
126
  keys
132
127
  end
133
128
 
134
- def class_or_instance_class
135
- self.is_a?(Class) ? self : self.class
129
+ def get_class_name
130
+ self.instance_of?(Class) ? self.name : self.class.name
136
131
  end
137
132
 
138
133
  def extract_cache_key(*args)
@@ -140,8 +135,6 @@ module Covercache
140
135
  end
141
136
  end
142
137
 
143
-
144
-
145
138
  # == Defining Helper
146
139
  #
147
140
  module DefiningHelper
@@ -161,14 +154,14 @@ module Covercache
161
154
  options = args.extract_options!
162
155
  options[:is_class_method] = true
163
156
  args << options
164
- self.send :define_cached, method, *Array(args << options), &block
157
+ self.send :define_cached, method, *Array.wrap(args), &block
165
158
  end
166
159
 
167
160
  private
168
161
  def covercache_define_wrapper(original_method, file, line, is_class_method = false)
169
162
  method = "#{'self.' if is_class_method}cached_#{ original_method }"
170
163
 
171
- class_eval <<-EOS, file, line - 2
164
+ class_eval <<-EOT, __FILE__, __LINE__ - 2
172
165
  def #{method}(*args, &block) # def cached_example(*args, &block)
173
166
  options = Array(#{method}_data[:args]) + extract_cache_key(*args) # options = Array(cached_example_data[:args]) + extract_cache_key(*args)
174
167
  covercache *options, #{method}_data[:opts] do # covercache *options, cached_example_data[:opts] do
@@ -179,8 +172,8 @@ module Covercache
179
172
  self.send :#{original_method}, *args, &block # self.send :example, *args, &block
180
173
  end # end
181
174
  end # end
182
- end # end
183
- EOS
175
+ end # env
176
+ EOT
184
177
  end
185
178
 
186
179
  def covercache_method_arguments(method, *args, &block)
@@ -189,7 +182,7 @@ module Covercache
189
182
  end
190
183
 
191
184
  def organize_cached_method_data(*args, &block)
192
- Hash[%w{args opts block}.map { |key| [key, (args.shift || block)] }].to_options
185
+ x = Hash[%w{args opts block}.map { |key| [key, (args.shift || block)] }].to_options
193
186
  end
194
187
  end
195
188
 
@@ -199,15 +192,16 @@ module Covercache
199
192
  module ModelConcern
200
193
  extend ActiveSupport::Concern
201
194
 
202
- included do
203
- %w(keys model_source model_digest).each do |key, value|
204
- class_attribute :"covercache_#{key}"
205
- self.send(:"covercache_#{key}=", value) if value.present?
195
+ included do
196
+ cattr_accessor :covercache_keys do
197
+ []
206
198
  end
207
-
208
- self.covercache_keys ||= []
209
- self.covercache_model_source ||= @covercache_caller_source #Where.is_class self, of: 'app/models'
210
-
199
+
200
+ cattr_accessor :covercache_model_source do
201
+ @covercache_caller_source
202
+ end
203
+
204
+ cattr_accessor :covercache_model_digest
211
205
  generate_model_digest!
212
206
 
213
207
  after_commit :covercache_flush_cache!
@@ -219,7 +213,7 @@ module Covercache
219
213
  # Support class methods
220
214
  module ClassMethods
221
215
  def generate_model_digest
222
- return unless covercache_model_source?
216
+ return unless covercache_model_source.present?
223
217
  file = File.read self.covercache_model_source
224
218
  Digest::MD5.hexdigest(file)
225
219
  rescue
@@ -246,20 +240,17 @@ module Covercache
246
240
  end
247
241
  end
248
242
 
249
-
250
- # == Injecting
251
- #
252
- module Inject
253
- def covers_with_cache
254
- caller_source = caller.first[/[^:]+/]
243
+ # module CoversWithCache
244
+ # add Covercache supporting to model
245
+ def covers_with_cache
246
+ caller_source = caller.first[/[^:]+/]
255
247
 
256
- class_eval do
257
- @covercache_caller_source = caller_source
258
- include Covercache::ModelConcern
259
- extend Covercache::DefiningHelper
260
- end
248
+ class_eval do
249
+ @covercache_caller_source = caller_source
250
+ include Covercache::ModelConcern
251
+ extend Covercache::DefiningHelper
261
252
  end
262
253
  end
263
254
  end
264
255
 
265
- ActiveRecord::Base.extend Covercache::Inject
256
+ ActiveRecord::Base.extend Covercache
Binary file
@@ -16,7 +16,7 @@ describe "covercache" do
16
16
  Post.covercache_model_digest.should be_an(String)
17
17
  end
18
18
 
19
- it 'should respounds to instance method defined by define_cached' do
19
+ it "should respounds to instance method defined by define_cached" do
20
20
  comment = Comment.last
21
21
  comment.cached_post.should == comment.post
22
22
  end
@@ -52,4 +52,12 @@ describe "covercache" do
52
52
  Comment.covercache_keys.should be_an(Array)
53
53
  Comment.covercache_keys.count.should > 0
54
54
  end
55
+
56
+ it 'it should clean storage' do
57
+ Comment.find(1).covercache_flush_cache!
58
+ comments = Comment.cached_for_post(1, cache_key: 1)
59
+ pp Comment.covercache_keys
60
+ Comment.covercache_keys.should be_an(Array)
61
+ Comment.covercache_keys.count.should == 1
62
+ end
55
63
  end
data/spec/spec_helper.rb CHANGED
@@ -16,14 +16,9 @@ ActiveRecord::Base.establish_connection adapter: "sqlite3",
16
16
  database: File.expand_path("../covercache.sqlite3", __FILE__)
17
17
 
18
18
  class Rails
19
+ RAILS_CACHE = ActiveSupport::Cache::MemoryStore.new
19
20
  def self.cache
20
- Rails::Cache
21
- end
22
- end
23
-
24
- class Rails::Cache
25
- def self.fetch(*options, &block)
26
- block.call
21
+ RAILS_CACHE
27
22
  end
28
23
  end
29
24
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: covercache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tõnis Simo
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-24 00:00:00.000000000 Z
12
+ date: 2013-07-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport