fibre 0.9.6 → 0.9.7
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 +4 -4
- data/fibre.gemspec +1 -0
- data/lib/fibre.rb +2 -0
- data/lib/fibre/core_ext/fiber.rb +3 -7
- data/lib/fibre/core_ext/synchrony.rb +70 -0
- data/lib/fibre/mock.rb +3 -2
- data/lib/fibre/scope.rb +4 -3
- data/lib/fibre/version.rb +1 -1
- data/spec/fibre_spec.rb +83 -1
- data/spec/spec_helper.rb +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 07320e52433387848e04df86513a2084afb47c5f
|
|
4
|
+
data.tar.gz: 00fcf61e035ed39c5dcde9307f42511891051785
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 345d4ddf8891a06747a859fd8d63eec61239eab74d5f91e97cc99d8a573e901eab0da69f1f5a5f5cc319c8fe6d2b10b5b0c3fa7f68138389cd2c56fc915ebc09
|
|
7
|
+
data.tar.gz: bb604e4a82e42707b733b8f356b8fc6e91821d63cd202d6e7aa2a6e345dee4478732332a6b91ffec5ebdd9ad3a8cbbcfb809d0c6f5c9a6dffaba4a0ea42704b7
|
data/fibre.gemspec
CHANGED
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.required_ruby_version = '>= 2.1.0'
|
|
22
22
|
spec.required_rubygems_version = '>= 2.3.0'
|
|
23
23
|
|
|
24
|
+
spec.add_development_dependency "eventmachine", "~> 1.0.3"
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
26
27
|
spec.add_development_dependency "rspec", "~> 3"
|
data/lib/fibre.rb
CHANGED
data/lib/fibre/core_ext/fiber.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require 'fiber'
|
|
2
2
|
|
|
3
|
-
#
|
|
4
3
|
# Fiber.sync do |fiber|
|
|
5
4
|
# fiber.resume response
|
|
6
5
|
# fiber.leave StandardError, "Something"
|
|
7
6
|
# end
|
|
7
|
+
|
|
8
8
|
class Fiber
|
|
9
9
|
|
|
10
10
|
def attributes
|
|
@@ -40,18 +40,14 @@ class Fiber
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
# Fiber.sync do |fiber|
|
|
45
|
-
# fiber.resume # ...
|
|
46
|
-
# end
|
|
47
|
-
#
|
|
43
|
+
|
|
48
44
|
def sync_it
|
|
49
45
|
yield(Fiber.current) if block_given?
|
|
50
46
|
Fiber.yield!
|
|
51
47
|
end
|
|
52
48
|
end
|
|
53
49
|
|
|
54
|
-
def leave(exception, message=nil)
|
|
50
|
+
def leave(exception=Fibre::LeaveError, message=nil)
|
|
55
51
|
resume exception.new(message)
|
|
56
52
|
end
|
|
57
53
|
end
|
|
@@ -5,6 +5,76 @@ module Fibre::Synchrony
|
|
|
5
5
|
res = Fiber.scope { collect(&:sync) }
|
|
6
6
|
res.collect(&:result)
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
def sync!
|
|
10
|
+
res = Fiber.scope do
|
|
11
|
+
deep_sync_scoped
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
res.each do |mock|
|
|
15
|
+
node = self
|
|
16
|
+
path = mock.path.split(/./)
|
|
17
|
+
key = path.pop
|
|
18
|
+
path.each { |k| node = node[k] }
|
|
19
|
+
node[key] = mock.result
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
self
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def deep_sync_scoped(path: [])
|
|
26
|
+
each_with_index do |item, index|
|
|
27
|
+
# deeeep
|
|
28
|
+
if item.is_a?(Array) || item.is_a?(Hash) # item.respond_to?(:deep_sync_scoped) not works in ruby 2.1.2
|
|
29
|
+
item.deep_sync_scoped(path: path + [index])
|
|
30
|
+
next
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
item.sync.tap do |mock|
|
|
34
|
+
mock.path = path + [index]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
refine Hash do
|
|
41
|
+
def sync
|
|
42
|
+
res = Fiber.scope { values.collect(&:sync) }
|
|
43
|
+
hash = {}
|
|
44
|
+
res.each_with_index do |mock, index|
|
|
45
|
+
hash[keys[index]] = mock.result
|
|
46
|
+
end
|
|
47
|
+
hash
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def sync!
|
|
51
|
+
res = Fiber.scope do
|
|
52
|
+
deep_sync_scoped
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
res.each do |mock|
|
|
56
|
+
node = self
|
|
57
|
+
path = mock.path
|
|
58
|
+
key = path.pop
|
|
59
|
+
path.each { |k| node = node[k] }
|
|
60
|
+
node[key] = mock.result
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
self
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def deep_sync_scoped(path: [])
|
|
67
|
+
each do |key, item|
|
|
68
|
+
# deeeep
|
|
69
|
+
if item.is_a?(Array) || item.is_a?(Hash) # item.respond_to?(:deep_sync_scoped) not works in ruby 2.1.2
|
|
70
|
+
item.deep_sync_scoped(path: path + [key])
|
|
71
|
+
next
|
|
72
|
+
end
|
|
73
|
+
item.sync.tap do |mock|
|
|
74
|
+
mock.path = path + [key]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
8
78
|
end
|
|
9
79
|
|
|
10
80
|
#<<<
|
data/lib/fibre/mock.rb
CHANGED
data/lib/fibre/scope.rb
CHANGED
|
@@ -7,11 +7,12 @@ module Fibre
|
|
|
7
7
|
|
|
8
8
|
def scope
|
|
9
9
|
raise "nested scopes" if Fiber.current[:scope]
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
scope = self.new(Fiber.current)
|
|
11
|
+
Fiber.current[:scope] = scope
|
|
12
|
+
yield
|
|
12
13
|
Fiber.current[:scope] = nil
|
|
13
14
|
Fiber.yield!
|
|
14
|
-
|
|
15
|
+
scope.mocks
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def scope?
|
data/lib/fibre/version.rb
CHANGED
data/spec/fibre_spec.rb
CHANGED
|
@@ -2,8 +2,10 @@ require "spec_helper"
|
|
|
2
2
|
|
|
3
3
|
describe Fibre do
|
|
4
4
|
using EventObject
|
|
5
|
+
using Fibre::Synchrony
|
|
5
6
|
|
|
6
7
|
before { Fibre.pool = nil }
|
|
8
|
+
let(:probe) { lambda {} }
|
|
7
9
|
|
|
8
10
|
it "should create default pool with default size" do
|
|
9
11
|
expect(Fibre.pool.size).to be(20)
|
|
@@ -14,7 +16,6 @@ describe Fibre do
|
|
|
14
16
|
expect(Fiber.current.root?).to be true
|
|
15
17
|
end
|
|
16
18
|
|
|
17
|
-
let(:probe) { lambda {} }
|
|
18
19
|
|
|
19
20
|
it "should checkout fiber" do
|
|
20
21
|
expect(probe).to receive(:call)
|
|
@@ -60,4 +61,85 @@ describe Fibre do
|
|
|
60
61
|
end
|
|
61
62
|
}.to_not raise_error
|
|
62
63
|
end
|
|
64
|
+
|
|
65
|
+
describe "in fiber specs" do
|
|
66
|
+
|
|
67
|
+
around do |examples|
|
|
68
|
+
EventMachine.run_block do
|
|
69
|
+
Fibre.pool.checkout(&examples)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class FibreTestOperation
|
|
74
|
+
def initialize(number)
|
|
75
|
+
@number = number
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def sync
|
|
79
|
+
Fiber.sync do |fiber|
|
|
80
|
+
EM.next_tick do
|
|
81
|
+
fiber.resume @number
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should Fiber.sync works well" do
|
|
88
|
+
result = Fiber.sync do |fiber|
|
|
89
|
+
EM.next_tick do
|
|
90
|
+
fiber.resume :success
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
expect(result).to be :success
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should method leave raise exception" do
|
|
97
|
+
expect {
|
|
98
|
+
Fiber.sync do |fiber|
|
|
99
|
+
EM.next_tick do
|
|
100
|
+
fiber.leave
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
}.to raise_error Fibre::LeaveError
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should sync array (scoping test)" do
|
|
107
|
+
op1 = FibreTestOperation.new(4)
|
|
108
|
+
op2 = FibreTestOperation.new(7)
|
|
109
|
+
res = [op1, op2].sync
|
|
110
|
+
expect(res[0]).to be(4)
|
|
111
|
+
expect(res[1]).to be(7)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should sync hash" do
|
|
115
|
+
op1 = FibreTestOperation.new(3)
|
|
116
|
+
op2 = FibreTestOperation.new(13)
|
|
117
|
+
op3 = FibreTestOperation.new(5)
|
|
118
|
+
res = {op1: op1, op2: op2, op3: op3}.sync
|
|
119
|
+
expect(res).to include(op1: 3, op2: 13, op3: 5)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should deep sync and sync! method (two in one)" do
|
|
123
|
+
op1 = FibreTestOperation.new(3)
|
|
124
|
+
op2 = FibreTestOperation.new(13)
|
|
125
|
+
op3 = FibreTestOperation.new(5)
|
|
126
|
+
op4 = FibreTestOperation.new(8)
|
|
127
|
+
op5 = FibreTestOperation.new(9)
|
|
128
|
+
res = {
|
|
129
|
+
ops: [op1, op2],
|
|
130
|
+
op3: op3,
|
|
131
|
+
child: {
|
|
132
|
+
op45: [op4, { op5: op5 }]
|
|
133
|
+
}
|
|
134
|
+
}.sync!
|
|
135
|
+
|
|
136
|
+
expect(res).to include(
|
|
137
|
+
op3: 5,
|
|
138
|
+
ops: match_array([3,13]),
|
|
139
|
+
child: include(
|
|
140
|
+
op45: match_array([8, include(op5: 9)])
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
63
145
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fibre
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.9.
|
|
4
|
+
version: 0.9.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- che
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-10-
|
|
11
|
+
date: 2014-10-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: eventmachine
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 1.0.3
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 1.0.3
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: bundler
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|