saviour 0.4.0 → 0.4.1

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: bc893ccb84bdea17562e885649be535589247449
4
- data.tar.gz: b626abd923dbcde6e9a44f0a6c6e5f608d9e7f85
3
+ metadata.gz: d67c7eda9780fbf27c6fe5c4c1b621839b81b82a
4
+ data.tar.gz: 634ea69a334a72f9690fbc1102dd7ea6b98f3683
5
5
  SHA512:
6
- metadata.gz: 76b2b7986d9c44f006396a445ec188973a44ffc5c631a48a7b089ce3585428ad9565e29cc42d6c1153d0aaf662c0d1039abc218d0121d37b3fd7357a9fe166b8
7
- data.tar.gz: 42e2ca1a05a2e57233e80c4f4f90909095ec7b64b8858bc40b0bf2448d951391765521d618146f115b5bb61ac648a77568ec7d25196950f3316bc30bd7b74683
6
+ metadata.gz: 3df7814a85bd316abe2d2a0c82436fdc66bec1860867344faccd834b581d38a81dc9172ba61eff57ffe649d068ede726d1e25ef652a6a4ef8738bc63c4765c64
7
+ data.tar.gz: 67b818e120b6f389fecebb883fdc3df26cd2f536222d7e10f0a2ed53b1b22ec0cc43a8f023193ec19129e3407e31d108697931d44375ab67c57ff3245756a2cd
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  module Saviour
2
4
  class Config
3
5
  class NotImplemented
@@ -6,29 +8,35 @@ module Saviour
6
8
  end
7
9
  end
8
10
 
11
+ @semaphore = Mutex.new
12
+
9
13
  class << self
10
14
  def processing_enabled
11
- Thread.current["Saviour::Config"] ||= {}
12
- Thread.current["Saviour::Config"][:processing_enabled] || true
15
+ Thread.current.thread_variable_set("Saviour::Config", {}) unless Thread.current.thread_variable_get("Saviour::Config")
16
+ Thread.current.thread_variable_get("Saviour::Config")[:processing_enabled] || true
13
17
  end
14
18
 
15
19
  def processing_enabled=(value)
16
- Thread.current["Saviour::Config"] ||= {}
17
- Thread.current["Saviour::Config"][:processing_enabled] = value
20
+ Thread.current.thread_variable_set("Saviour::Config", {}) unless Thread.current.thread_variable_get("Saviour::Config")
21
+ Thread.current.thread_variable_get("Saviour::Config")[:processing_enabled] = value
18
22
  end
19
23
 
20
24
  def storage
21
- Thread.current["Saviour::Config"] ||= {}
22
- Thread.current["Saviour::Config"][:storage] || (Thread.main["Saviour::Config"] && Thread.main["Saviour::Config"][:storage]) || NotImplemented.new
25
+ @semaphore.synchronize do
26
+ Thread.current.thread_variable_set("Saviour::Config", {}) unless Thread.current.thread_variable_get("Saviour::Config")
27
+ Thread.current.thread_variable_get("Saviour::Config")[:storage] || (Thread.main.thread_variable_get("Saviour::Config") && Thread.main.thread_variable_get("Saviour::Config")[:storage]) || NotImplemented.new
28
+ end
23
29
  end
24
30
 
25
31
  def storage=(value)
26
- Thread.current["Saviour::Config"] ||= {}
27
- Thread.current["Saviour::Config"][:storage] = value
32
+ @semaphore.synchronize do
33
+ Thread.current.thread_variable_set("Saviour::Config", {}) unless Thread.current.thread_variable_get("Saviour::Config")
34
+ Thread.current.thread_variable_get("Saviour::Config")[:storage] = value
28
35
 
29
- if Thread.main["Saviour::Config"].nil?
30
- Thread.main["Saviour::Config"] ||= {}
31
- Thread.main["Saviour::Config"][:storage] = value
36
+ if Thread.main.thread_variable_get("Saviour::Config").nil?
37
+ Thread.main.thread_variable_set("Saviour::Config", {})
38
+ Thread.main.thread_variable_get("Saviour::Config")[:storage] = value
39
+ end
32
40
  end
33
41
  end
34
42
  end
@@ -1,3 +1,3 @@
1
1
  module Saviour
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -28,7 +28,7 @@ describe Saviour::Config do
28
28
  end
29
29
 
30
30
  it "raises correct exception if the main thread is not yet configured" do
31
- Thread.main["Saviour::Config"] = nil
31
+ Thread.main.thread_variable_set("Saviour::Config", nil)
32
32
 
33
33
  Thread.new {
34
34
  expect { Saviour::Config.storage.anything }.to raise_error(RuntimeError)
@@ -36,7 +36,7 @@ describe Saviour::Config do
36
36
  end
37
37
 
38
38
  it "forwards configuration to main thread if not configured" do
39
- Thread.main["Saviour::Config"] = nil
39
+ Thread.main.thread_variable_set("Saviour::Config", nil)
40
40
 
41
41
  Thread.new {
42
42
  Saviour::Config.storage = 'config_set_on_thread_1'
@@ -55,6 +55,18 @@ describe Saviour::Config do
55
55
  end.join
56
56
  expect(Saviour::Config.storage).to eq 12
57
57
  end
58
+
59
+ it "shares values per-fiber" do
60
+ Thread.new {
61
+ Saviour::Config.storage = "value_#{Thread.current.object_id}"
62
+
63
+ f = Fiber.new do
64
+ Saviour::Config.storage
65
+ end
66
+
67
+ expect(f.resume).to eq "value_#{Thread.current.object_id}"
68
+ }.join
69
+ end
58
70
  end
59
71
  end
60
72
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saviour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Campos