fibre 0.9.7 → 0.9.9

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: 07320e52433387848e04df86513a2084afb47c5f
4
- data.tar.gz: 00fcf61e035ed39c5dcde9307f42511891051785
3
+ metadata.gz: 076cc4e6dae00554040ca8e3063d3469a63e1324
4
+ data.tar.gz: f741ab822b35765328caf475e4b86e65e1e21c2b
5
5
  SHA512:
6
- metadata.gz: 345d4ddf8891a06747a859fd8d63eec61239eab74d5f91e97cc99d8a573e901eab0da69f1f5a5f5cc319c8fe6d2b10b5b0c3fa7f68138389cd2c56fc915ebc09
7
- data.tar.gz: bb604e4a82e42707b733b8f356b8fc6e91821d63cd202d6e7aa2a6e345dee4478732332a6b91ffec5ebdd9ad3a8cbbcfb809d0c6f5c9a6dffaba4a0ea42704b7
6
+ metadata.gz: bf5708e702e36d8e118ed143f719bd20da66a37298055546f970aa3f124a4e7b957cf03bc81725c837fcbf22baaca982064668b589a817bca497a0c461d95eba
7
+ data.tar.gz: c88451330fecee054e8c7bcb4f1ba803d3fbab4ff43062ec6f5ea0b045b02d34be5e0a076f6eff3dfaedbd49cc231b38087519142156b196f12edf069569a3a0
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 che
1
+ Copyright (c) 2014 Inre Storm
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -29,18 +29,4 @@ Fibre.pool_size = 10
29
29
  Fibre.pool.checkout do
30
30
  puts "runned in fiber"
31
31
  end
32
- # some fiber raised exception
33
- using EventObject
34
- Fibre.pool.on :error do |e|
35
- puts e.to_s
36
- exit
37
- end
38
32
  ```
39
-
40
- ## Contributing
41
-
42
- 1. Fork it ( https://github.com/chelovekov/fibre/fork )
43
- 2. Create your feature branch (`git checkout -b my-new-feature`)
44
- 3. Commit your changes (`git commit -am 'Add some feature'`)
45
- 4. Push to the branch (`git push origin my-new-feature`)
46
- 5. Create a new Pull Request
@@ -6,8 +6,8 @@ require 'fibre/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "fibre"
8
8
  spec.version = Fibre::VERSION
9
- spec.authors = ["che"]
10
- spec.email = ["max@kupibilet.ru"]
9
+ spec.authors = ["inre"]
10
+ spec.email = ["inre.storm@gmail.com"]
11
11
  spec.summary = %q{Fibre - fiber pool, mock and scoping fibres}
12
12
  #spec.description = %q{TODO: Write a longer description. Optional.}
13
13
  spec.homepage = ""
@@ -21,7 +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
+ spec.add_development_dependency "eventmachine-le"
25
25
  spec.add_development_dependency "bundler", "~> 1.6"
26
26
  spec.add_development_dependency "rake", "~> 10.0"
27
27
  spec.add_development_dependency "rspec", "~> 3"
@@ -2,6 +2,7 @@ require "event_object"
2
2
  require "fibre/version"
3
3
  require "fibre/core_ext/fiber"
4
4
  require "fibre/core_ext/synchrony"
5
+ require "fibre/fiber_error"
5
6
 
6
7
  module Fibre
7
8
  autoload :FiberPool, 'fibre/fiber_pool'
@@ -12,8 +13,6 @@ module Fibre
12
13
  autoload :FiberPool, 'fibre/rack/fiber_pool'
13
14
  end
14
15
 
15
- class LeaveError < StandardError; end
16
-
17
16
  # Configuration module
18
17
 
19
18
  extend self
@@ -30,24 +30,23 @@ class Fiber
30
30
  end
31
31
 
32
32
  def sync(*a, &b)
33
- Fibre::Scope.scope? ? Fibre::Scope.sync(*a, &b) : sync_it(*a, &b)
33
+ Fibre::Scope.scope? ? Fibre::Scope.sync(*a, &b) : wait(*a, &b)
34
34
  end
35
35
 
36
36
  # raise exception if we catch exception
37
37
  def yield!
38
38
  Fiber.yield.tap do |y|
39
- raise y if y.is_a?(Exception)
39
+ raise FiberError.new(y) if y.is_a?(Exception)
40
40
  end
41
41
  end
42
42
 
43
-
44
- def sync_it
43
+ def wait
45
44
  yield(Fiber.current) if block_given?
46
45
  Fiber.yield!
47
46
  end
48
47
  end
49
48
 
50
- def leave(exception=Fibre::LeaveError, message=nil)
51
- resume exception.new(message)
49
+ def leave(exception, message=nil) # deprecated
50
+ raise exception.new(message)
52
51
  end
53
52
  end
@@ -0,0 +1,18 @@
1
+ class FiberError < StandardError
2
+ attr_accessor :parent
3
+
4
+ def initialize parent = $!
5
+ @parent = parent
6
+ super(parent && parent.to_s)
7
+ end
8
+
9
+ def set_backtrace backtrace
10
+ bt = backtrace
11
+ if parent
12
+ bt = parent.backtrace
13
+ bt << "<<< parent fiber: #{parent.class.name}: #{parent}"
14
+ bt.concat backtrace
15
+ end
16
+ super bt
17
+ end
18
+ end
@@ -7,17 +7,12 @@
7
7
  # pool.checkout do
8
8
  # puts "runned in fiber"
9
9
  # end
10
- #
11
- # # some fiber raised exception
12
- # pool.on :error do |e|
13
- # puts e.to_s
14
- # end
15
10
 
16
11
  module Fibre
17
12
  using EventObject
18
13
 
19
14
  class FiberPool
20
- events :error, :before, :after
15
+ events :before, :after
21
16
 
22
17
  # Initialize fibers pool
23
18
  def initialize(size)
@@ -37,8 +32,9 @@ module Fibre
37
32
  end
38
33
 
39
34
  @pool.shift.tap do |fiber|
40
- @reserved[fiber.object_id] = fiber
41
- fiber.resume(spec)
35
+ @reserved[fiber.object_id] = spec
36
+ err = fiber.resume(spec)
37
+ raise FiberError.new(err) if err.is_a?(Exception)
42
38
  end
43
39
 
44
40
  self
@@ -64,19 +60,19 @@ module Fibre
64
60
  loop do
65
61
  raise "wrong spec in fiber block" unless spec.is_a?(Hash)
66
62
 
63
+ result = nil
67
64
  begin
68
65
  before!(spec)
69
66
  spec[:block].call# *Fiber.current.args
70
67
  after!(spec)
71
- # catch ArgumentError, IOError, EOFError, IndexError, LocalJumpError, NameError, NoMethodError
72
- # RangeError, FloatDomainError, RegexpError, RuntimeError, SecurityError, SystemCallError
73
- # SystemStackError, ThreadError, TypeError, ZeroDivisionError
68
+
69
+ # catch ArgumentError, IOError, EOFError, IndexError, LocalJumpError, NameError, NoMethodError
70
+ # RangeError, FloatDomainError, RegexpError, RuntimeError, SecurityError, SystemCallError
71
+ # SystemStackError, ThreadError, TypeError, ZeroDivisionError
74
72
  rescue StandardError => e
75
- raise e if error.empty?
76
- error!(e)
77
- # catch NoMemoryError, ScriptError, SignalException, SystemExit, fatal etc
78
- rescue Exception => e
79
- raise e
73
+ result = e
74
+ # catch NoMemoryError, ScriptError, SignalException, SystemExit, fatal etc
75
+ #rescue Exception
80
76
  end
81
77
 
82
78
  unless @queue.empty?
@@ -84,15 +80,15 @@ module Fibre
84
80
  next
85
81
  end
86
82
 
87
- spec = checkin
83
+ spec = checkin(result)
88
84
  end
89
85
  end
90
86
 
91
87
  # Check-in fiber to pool
92
- def checkin
88
+ def checkin(result=nil)
93
89
  @reserved.delete ::Fiber.current.object_id
94
90
  @pool.unshift ::Fiber.current
95
- ::Fiber.yield
91
+ ::Fiber.yield result
96
92
  end
97
93
  end
98
94
  end
@@ -1,3 +1,3 @@
1
1
  module Fibre
2
- VERSION = "0.9.7"
2
+ VERSION = "0.9.9"
3
3
  end
@@ -21,7 +21,7 @@ describe Fibre do
21
21
  expect(probe).to receive(:call)
22
22
  Fibre.pool.checkout(&probe)
23
23
  end
24
-
24
+ =begin
25
25
  it "should rescue error in fiber" do
26
26
  expect(probe).to receive(:call)
27
27
  Fibre.pool.on(:error) do |error|
@@ -32,6 +32,7 @@ describe Fibre do
32
32
  raise
33
33
  end
34
34
  end
35
+ =end
35
36
 
36
37
  it "should scope" do
37
38
  expect(probe).to receive(:call)
@@ -42,14 +43,18 @@ describe Fibre do
42
43
  end
43
44
  end
44
45
 
46
+ def raise_method
47
+ raise "test exception"
48
+ end
49
+
45
50
  it "should raise uncatched exceptions" do
46
51
  expect {
47
52
  Fibre.pool.checkout do
48
- raise
53
+ raise_method
49
54
  end
50
55
  }.to raise_error
51
56
  end
52
-
57
+ =begin
53
58
  it "should catch exception" do
54
59
  Fibre.pool.on :error do |error|
55
60
  # catch exception here
@@ -61,7 +66,7 @@ describe Fibre do
61
66
  end
62
67
  }.to_not raise_error
63
68
  end
64
-
69
+ =end
65
70
  describe "in fiber specs" do
66
71
 
67
72
  around do |examples|
@@ -84,6 +89,20 @@ describe Fibre do
84
89
  end
85
90
  end
86
91
 
92
+ class FibreTestOperationWithException
93
+ def initialize(number)
94
+ @number = number
95
+ end
96
+
97
+ def sync
98
+ Fiber.sync do |f|
99
+ Fibre.pool.checkout do
100
+ raise "test"
101
+ end
102
+ end
103
+ end
104
+ end
105
+
87
106
  it "should Fiber.sync works well" do
88
107
  result = Fiber.sync do |fiber|
89
108
  EM.next_tick do
@@ -93,14 +112,19 @@ describe Fibre do
93
112
  expect(result).to be :success
94
113
  end
95
114
 
96
- it "should method leave raise exception" do
115
+ it "should raise exception in fiber" do
97
116
  expect {
98
- Fiber.sync do |fiber|
99
- EM.next_tick do
100
- fiber.leave
101
- end
117
+ Fibre.pool.checkout do
118
+ raise "test"
102
119
  end
103
- }.to raise_error Fibre::LeaveError
120
+ }.to raise_error FiberError
121
+ end
122
+
123
+ it "should sync with exception" do
124
+ expect {
125
+ op = FibreTestOperationWithException.new(4)
126
+ op.sync
127
+ }.to raise_error FiberError
104
128
  end
105
129
 
106
130
  it "should sync array (scoping test)" do
@@ -132,7 +156,7 @@ describe Fibre do
132
156
  op45: [op4, { op5: op5 }]
133
157
  }
134
158
  }.sync!
135
-
159
+
136
160
  expect(res).to include(
137
161
  op3: 5,
138
162
  ops: match_array([3,13]),
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fibre
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
- - che
7
+ - inre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-08 00:00:00.000000000 Z
11
+ date: 2015-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: eventmachine
14
+ name: eventmachine-le
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.3
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.3
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  version: '0.9'
83
83
  description:
84
84
  email:
85
- - max@kupibilet.ru
85
+ - inre.storm@gmail.com
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
@@ -96,6 +96,7 @@ files:
96
96
  - lib/fibre.rb
97
97
  - lib/fibre/core_ext/fiber.rb
98
98
  - lib/fibre/core_ext/synchrony.rb
99
+ - lib/fibre/fiber_error.rb
99
100
  - lib/fibre/fiber_pool.rb
100
101
  - lib/fibre/mock.rb
101
102
  - lib/fibre/rack/fiber_pool.rb
@@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  version: 2.3.0
124
125
  requirements: []
125
126
  rubyforge_project:
126
- rubygems_version: 2.4.1
127
+ rubygems_version: 2.4.3
127
128
  signing_key:
128
129
  specification_version: 4
129
130
  summary: Fibre - fiber pool, mock and scoping fibres