saviour 0.4.0 → 0.4.1

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: 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