disk_store 0.2.2 → 0.3.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: 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