async_cache 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 500e9448eef871f617a1d0a131fd3838c231058d
4
- data.tar.gz: 3f09a314542ea93102d65d96e6417f25374483d0
3
+ metadata.gz: f27471956b05c3bb40ca9741a98a95134308fc84
4
+ data.tar.gz: 0cc68507dc421ff154b487d1db2fa2db56f4dc07
5
5
  SHA512:
6
- metadata.gz: e174c76425afb575ace71b4902b6b7fcb6acc9d2b096fc4955e0a0c88c738c4441e83529d274243dd40d2360c5f265bc69e267c4773558e2587a5849311da30a
7
- data.tar.gz: 51e30ffe8cb929710185ee2624e6a957a33b33338a3724f317414597bf75786f7b96944abf02a3878212fd7daa85137b3cbe39f58ed2d56e3e8b73ba5f637bab
6
+ metadata.gz: edacd1a9fff44a91e2791d8bcf27b9511bd2d9806d475637d93a874d51c715a11d48959138c8509d91f6a9b4f4de8b35cab6827821a61bdcc96478fd8c244df4
7
+ data.tar.gz: 88a1777e3e4e4bca3fcc51695c670e5160f1380da356ae9417e49c36aa02877b0663f6679243cf8c26623b3f4e3e5f0b92ec2c8566533c0664825b635fea35c6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- async_cache (1.0.2)
4
+ async_cache (1.1.0)
5
5
  sourcify (~> 0.5.0)
6
6
 
7
7
  GEM
@@ -21,3 +21,4 @@ end
21
21
  require 'async_cache/version'
22
22
  require 'async_cache/store'
23
23
  require 'async_cache/workers/base'
24
+ require 'async_cache/railtie' if defined?(Rails)
@@ -0,0 +1,11 @@
1
+ module AsyncCache
2
+ class Railtie < ::Rails::Railtie
3
+ rake_tasks do
4
+ %w[clear].each do |name|
5
+ file = File.join(File.dirname(__FILE__), "tasks/#{name}.rake")
6
+
7
+ load file
8
+ end
9
+ end
10
+ end
11
+ end
@@ -2,6 +2,11 @@ module AsyncCache
2
2
  class Store
3
3
  attr_accessor :backend, :worker_klass
4
4
 
5
+ # Global index of store instances
6
+ def self.stores
7
+ @stores ||= []
8
+ end
9
+
5
10
  # @param [Hash] opts Initialization options
6
11
  # @option opts [Object] :backend The backend that it will read/write
7
12
  # entries to/from
@@ -19,6 +24,9 @@ module AsyncCache
19
24
  end
20
25
 
21
26
  @backend = opts[:backend] || AsyncCache.backend
27
+
28
+ # Register ourselves in the array of known store instances
29
+ self.class.stores << self
22
30
  end
23
31
 
24
32
  # @param [String] locator The constant locator for the entry in the cache
@@ -66,6 +74,10 @@ module AsyncCache
66
74
  end
67
75
  end
68
76
 
77
+ def clear
78
+ @worker_klass.clear
79
+ end
80
+
69
81
  def determine_strategy(has_cached_data:, needs_regen:, synchronous_regen:)
70
82
  case
71
83
  when !has_cached_data
@@ -111,6 +123,18 @@ module AsyncCache
111
123
  )
112
124
  end
113
125
 
126
+ def inspect
127
+ pointer_format = '0x%014x'
128
+ pointer = Kernel.sprintf pointer_format, self.object_id * 2
129
+ backend_pointer = Kernel.sprintf pointer_format, @backend.object_id * 2
130
+
131
+ '#<' + [
132
+ "#{self.class.name}:#{pointer} ",
133
+ "@worker_klass=#{@worker_klass.name}, ",
134
+ "@backend=#<#{@backend.class.name}:#{backend_pointer}>"
135
+ ].join('') + '>'
136
+ end
137
+
114
138
  private
115
139
 
116
140
  # Ensures the arguments are primitives.
@@ -0,0 +1,16 @@
1
+ namespace :async_cache do
2
+ prereqs =
3
+ if defined?(Rails)
4
+ [:environment]
5
+ else
6
+ []
7
+ end
8
+
9
+ desc 'Clear the worker queues'
10
+ task :clear => prereqs do
11
+ AsyncCache::Store.stores.each do |store|
12
+ store.clear
13
+ puts "Cleared #{store.inspect}"
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module AsyncCache
2
- VERSION = '1.0.2'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -11,6 +11,10 @@ module AsyncCache
11
11
  true
12
12
  end
13
13
 
14
+ def self.clear
15
+ raise NotImplementedError, 'ActiveJob does not support clearing queues'
16
+ end
17
+
14
18
  def self.enqueue_async_job(key:, version:, expires_in:, block:, arguments:)
15
19
  self.perform_later key, version, expires_in, arguments, block
16
20
  end
@@ -23,6 +23,11 @@ module AsyncCache
23
23
  raise NotImplementedError
24
24
  end
25
25
 
26
+ # Clear the active jobs from this worker's queue.
27
+ def self.clear
28
+ raise NotImplementedError
29
+ end
30
+
26
31
  # Public interface for enqueuing jobs. This is what is called by
27
32
  # {AsyncCache::Store}.
28
33
  def self.enqueue_async_job(key:, version:, expires_in:, block:, arguments:)
@@ -13,22 +13,32 @@ module AsyncCache
13
13
  # Use the Sidekiq API to see if there are worker processes available to
14
14
  # handle the async cache jobs queue.
15
15
  def self.has_workers?
16
- target_queue = self.sidekiq_options['queue'].to_s
17
-
18
16
  processes = Sidekiq::ProcessSet.new.to_a
19
17
  queues_being_processed = processes.flat_map { |p| p['queues'] }
20
18
 
21
- if queues_being_processed.include? target_queue
19
+ if queues_being_processed.include? sidekiq_queue
22
20
  true
23
21
  else
24
22
  false
25
23
  end
26
24
  end
27
25
 
26
+ def self.clear
27
+ queue = Sidekiq::Queue.new sidekiq_queue
28
+
29
+ queue.clear
30
+ end
31
+
28
32
  def self.enqueue_async_job(key:, version:, expires_in:, block:, arguments:)
29
33
  self.perform_async key, version, expires_in, arguments, block
30
34
  end
31
35
 
36
+ private
37
+
38
+ def self.sidekiq_queue
39
+ self.sidekiq_options['queue'].to_s
40
+ end
41
+
32
42
  end # class SidekiqWorker
33
43
  end
34
44
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe AsyncCache do
4
+ context 'Railtie' do
5
+ class Application < Rails::Application
6
+ end
7
+
8
+ before(:all) do
9
+ app = Application.new
10
+ app.load_tasks
11
+ end
12
+
13
+ it 'adds the async_cache:* tasks' do
14
+ expect(Rake::Task.task_defined?('async_cache:clear')).to eq true
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe AsyncCache do
4
+ context 'tasks' do
5
+ before(:all) do
6
+ require 'rake'
7
+ Rake.application.clear
8
+ Rake.application.add_import File.join(File.dirname(__FILE__), '../lib/async_cache/tasks/clear.rake')
9
+ Rake.application.load_imports
10
+ end
11
+
12
+ before(:each) do
13
+ # Reset the array of known store instances
14
+ AsyncCache::Store.instance_eval { @stores = [] }
15
+ end
16
+
17
+ describe ':clear' do
18
+ it 'clears with worker queues' do
19
+ store = AsyncCache::Store.new backend: Rails.cache, worker: :sidekiq
20
+
21
+ queue_double = double 'Sidekiq::Queue'
22
+ allow(Sidekiq::Queue).to receive(:new).and_return(queue_double)
23
+
24
+ expect(queue_double).to receive(:clear)
25
+
26
+ Rake.application['async_cache:clear'].execute
27
+ end
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Derewecki
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-01-11 00:00:00.000000000 Z
12
+ date: 2016-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sourcify
@@ -185,7 +185,9 @@ files:
185
185
  - async_cache.gemspec
186
186
  - examples/examples_controller.rb
187
187
  - lib/async_cache.rb
188
+ - lib/async_cache/railtie.rb
188
189
  - lib/async_cache/store.rb
190
+ - lib/async_cache/tasks/clear.rake
189
191
  - lib/async_cache/version.rb
190
192
  - lib/async_cache/workers/active_job.rb
191
193
  - lib/async_cache/workers/base.rb
@@ -195,8 +197,10 @@ files:
195
197
  - spec/integration/support/run_all.rb
196
198
  - spec/integration/support/sinatra.rb
197
199
  - spec/integration/support/version.txt
200
+ - spec/railtie_spec.rb
198
201
  - spec/spec_helper.rb
199
202
  - spec/store_spec.rb
203
+ - spec/tasks_spec.rb
200
204
  - spec/workers/active_job_spec.rb
201
205
  - spec/workers/base_spec.rb
202
206
  - spec/workers/sidekiq_spec.rb