disk_store 0.2.2 → 0.3.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: b80a1438fb5454793cd77e6fa2371638c6055664
4
- data.tar.gz: 4c015900c8c3f0db8e7ecd47aab6300ef4348b4c
3
+ metadata.gz: a169969f0a6815116676b69bccfada6d9c021c00
4
+ data.tar.gz: 4047279dfc9bc369a3012e495b73a5d22e5e4f59
5
5
  SHA512:
6
- metadata.gz: 6e8c657344f7039344dd09019d44de1d5f75750ea87f29c5fb49f8d16340cba53b6c407db96fcd614bf9676445e2fe9cde2b89fb96bfae2c0a0feccf1e94c98b
7
- data.tar.gz: 158f6cedb964548dd86bc52b7bbe52e1cc4ac00325a54b3e313f74f73b86da3cd9577938e532b5c4b003d5245cd8b21947fed7ebed768ddd6b2ac15195b91d03
6
+ metadata.gz: bfbbe98e30b10f1790fc29d4136df196063eccacbf7d47dd2f28bca6e62e130c88136d79f41ceb9b2d33e341b91e5a4852803f5155ec3789ca342846fcdcbf79
7
+ data.tar.gz: d9d4184f527e83e14102b6347bb40906047581f84497bdc21533246c9aefeb8b9fd8e53ed4228874057cd521925630b8c40ba98199a6bd59d8d85fc864f23d9b
data/Gemfile.lock CHANGED
@@ -1,12 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- disk_store (0.2.2)
4
+ disk_store (0.3.0)
5
+ celluloid
5
6
  rake
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ celluloid (0.15.2)
12
+ timers (~> 1.1.0)
10
13
  diff-lcs (1.2.5)
11
14
  rake (10.3.2)
12
15
  rspec (2.14.1)
@@ -17,6 +20,7 @@ GEM
17
20
  rspec-expectations (2.14.5)
18
21
  diff-lcs (>= 1.1.3, < 2.0)
19
22
  rspec-mocks (2.14.6)
23
+ timers (1.1.0)
20
24
 
21
25
  PLATFORMS
22
26
  ruby
data/disk_store.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.require_paths = ["lib"]
21
21
 
22
22
  gem.add_dependency "rake"
23
+ gem.add_dependency "celluloid"
23
24
 
24
25
  gem.test_files = Dir.glob("spec/**/*")
25
26
  gem.add_development_dependency "rspec"
@@ -1,7 +1,11 @@
1
+ require 'celluloid'
2
+
1
3
  Dir[File.join(File.dirname(__FILE__), "eviction_strategies", "*.rb")].each { |f| require f }
2
4
 
3
5
  class DiskStore
4
6
  class Reaper
7
+ include Celluloid
8
+
5
9
  DEFAULT_OPTS = {
6
10
  cache_size: 1073741824, # 1 gigabyte
7
11
  reaper_interval: 10, # seconds,
@@ -12,27 +16,18 @@ class DiskStore
12
16
 
13
17
  # Spawn exactly 1 reaper for each cache path
14
18
  def self.spawn_for(path, opts = {})
15
- return @reapers[path] if @reapers.has_key?(path)
16
-
17
- reaper = Reaper.new(path, opts)
18
- reaper.spawn!
19
-
20
- @reapers[path] = reaper
21
- reaper
22
- end
23
-
24
- # Mostly useful for testing purposes
25
- def self.kill_all!
26
- @reapers.each { |path, reaper| reaper.thread.kill }
27
- @reapers = {}
19
+ return Celluloid::Actor[path] if !Celluloid::Actor[path].nil?
20
+
21
+ Reaper.supervise_as(path, path, opts)
22
+ Celluloid::Actor[path].async.start!
23
+ Celluloid::Actor[path]
28
24
  end
29
25
 
30
- attr_reader :path, :thread
26
+ attr_reader :path
31
27
 
32
28
  def initialize(path, opts = {})
33
29
  @path = path
34
30
  @options = DEFAULT_OPTS.merge(opts)
35
- @thread = nil
36
31
 
37
32
  set_eviction_strategy(@options[:eviction_strategy])
38
33
  end
@@ -42,23 +37,13 @@ class DiskStore
42
37
  self.class.send :prepend, DiskStore::Reaper.const_get(strategy)
43
38
  end
44
39
 
45
- def spawn!
46
- @thread = Thread.new do
47
- loop do
48
- perform_sweep! if needs_eviction?
49
- wait_for_next
50
- end
40
+ def start!
41
+ loop do
42
+ perform_sweep! if needs_eviction?
43
+ wait_for_next
51
44
  end
52
45
  end
53
46
 
54
- def alive?
55
- @thread && @thread.alive?
56
- end
57
-
58
- def running?
59
- @thread && !@thread.stop?
60
- end
61
-
62
47
  private
63
48
 
64
49
  def perform_sweep!
@@ -1,3 +1,3 @@
1
1
  class DiskStore
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
data/spec/reaper_spec.rb CHANGED
@@ -6,6 +6,9 @@ describe DiskStore::Reaper do
6
6
  let(:key) { "doge" }
7
7
 
8
8
  before(:each) do
9
+ @reaper = nil
10
+ DiskStore::Reaper.stub(:spawn_for) { |path, opts| @reaper ||= DiskStore::Reaper.new(path, opts) }
11
+
9
12
  file.write file_contents
10
13
  file.flush
11
14
  file.rewind
@@ -18,10 +21,6 @@ describe DiskStore::Reaper do
18
21
  end
19
22
  end
20
23
 
21
- after(:each) do
22
- DiskStore::Reaper.kill_all!
23
- end
24
-
25
24
  it 'is spawned with a new cache' do
26
25
  cache = DiskStore.new(@tmpdir)
27
26
  expect(cache.reaper).to_not be_nil
@@ -85,9 +84,6 @@ describe DiskStore::Reaper do
85
84
  let (:reaper) { cache.reaper }
86
85
 
87
86
  before(:each) do
88
- # Kill the thread so we can test without it getting
89
- # in the way
90
- reaper.thread.kill
91
87
  cache.write key, file
92
88
 
93
89
  file2.write file2_contents
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disk_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Sutton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-27 00:00:00.000000000 Z
11
+ date: 2014-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: celluloid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement