io-dispatcher 0.2 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e0a54cde17f988b5f97c145492cd71ec36e5818ce5ae5269f489fdd08d96cae
4
- data.tar.gz: a5cc0b6070eb5c694f9aac458aad9fbbea124c6004613a797ad5fe09bdeb49b5
3
+ metadata.gz: 7cf9d9de60880260030d029b5edb48f3e2253dbf4235f827a2a94359b7af32bb
4
+ data.tar.gz: a4f40be71cf6bca0bb480d0b30796035e45ebad8994c3e11c40c1a633bdc4b38
5
5
  SHA512:
6
- metadata.gz: c3c1570fbe6a5c28f7d8da8b9d85c4f136e579d2cebe2ae7520a26335a16bd298f4f1b728dc0a94925039e9001c84c11dcc94473777bf69a33cc889637a821c2
7
- data.tar.gz: 83b33290d4ec698abb0ce198139d6644a89c433df0dc477804b38204298b6c0375091ccfe3e7edd758f8d1c71ccae7aeda8a6fbaa547cc4c7db1be6ec6c01eef
6
+ metadata.gz: f93a3387eb61cbe05ca524376ea2dfaf9f17c002847d8b8da0b10357d061b0751221d49643d43672abb9bb04014fcd9ee71434cebaf4e174b75882fac0f9b6ed
7
+ data.tar.gz: 22b07858ad4012bbb29598594002b21b45b36c427329c501c9d8ea408ad6906a209264a823fe71d3a35e2fd6f7a84f4690f0da0bd1bcad84bf7d4df3c89bf249
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .DS_Store
2
+ Gemfile.lock
2
3
  *.gem
data/Rakefile CHANGED
@@ -1,3 +1 @@
1
- require 'rubygems/tasks'
2
-
3
- Gem::Tasks.new
1
+ require 'simple-rake-tasks'
@@ -16,6 +16,6 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
17
  s.require_path = 'lib'
18
18
 
19
- s.add_development_dependency 'rake', '~> 12.3'
20
- s.add_development_dependency 'rubygems-tasks', '~> 0.2'
19
+ s.add_development_dependency 'rake', '~> 13.3'
20
+ s.add_development_dependency 'simple-rake-tasks', '~> 0.1'
21
21
  end
@@ -1,5 +1,5 @@
1
1
  class IO::Dispatcher
2
2
 
3
- VERSION = '0.2'
3
+ VERSION = '0.7'
4
4
 
5
5
  end
data/lib/io-dispatcher.rb CHANGED
@@ -8,25 +8,24 @@ class IO
8
8
  end
9
9
 
10
10
  def add_io_handler(input: nil, output: nil, exception: nil, handler: nil, &block)
11
- mode, io = if input
12
- [0, input]
13
- elsif output
14
- [1, output]
15
- elsif exception
16
- [2, exception]
17
- end
18
- @io_handlers[mode][io] = handler || block
11
+ handler ||= block
12
+ set_io_handler(0, input, handler) if input
13
+ set_io_handler(1, output, handler) if output
14
+ set_io_handler(2, exception, handler) if exception
19
15
  end
20
16
 
21
17
  def remove_io_handler(input: nil, output: nil, exception: nil)
22
- mode, io = if input
23
- [0, input]
24
- elsif output
25
- [1, output]
26
- elsif exception
27
- [2, exception]
18
+ set_io_handler(0, input, nil) if input
19
+ set_io_handler(1, output, nil) if output
20
+ set_io_handler(2, exception, nil) if exception
21
+ end
22
+
23
+ def set_io_handler(mode, io, handler)
24
+ if handler
25
+ @io_handlers[mode][io] = handler
26
+ else
27
+ @io_handlers[mode].delete(io)
28
28
  end
29
- @io_handlers[mode].delete(io)
30
29
  end
31
30
 
32
31
  def set_timeout_handler(timeout, &block)
@@ -34,11 +33,17 @@ class IO
34
33
  @timeout_handler = block
35
34
  end
36
35
 
37
- def run
38
- loop do
39
- if (ready = IO.select(*@io_handlers.map(&:keys), @timeout))
36
+ def run(&block)
37
+ @stop = false
38
+ until @stop
39
+ yield if block_given?
40
+ arrays = @io_handlers.map(&:keys)
41
+ break if !@timeout && arrays.flatten.empty?
42
+ if (ready = IO.select(*arrays, @timeout))
40
43
  ready.each_with_index do |mode, i|
41
- mode.each { |io| @io_handlers[i][io].call(io) }
44
+ mode.each do |io|
45
+ (handler = @io_handlers[i][io]) && handler.call(io)
46
+ end
42
47
  end
43
48
  else
44
49
  @timeout_handler.call if @timeout_handler
@@ -46,6 +51,10 @@ class IO
46
51
  end
47
52
  end
48
53
 
54
+ def stop
55
+ @stop = true
56
+ end
57
+
49
58
  end
50
59
 
51
60
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io-dispatcher
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Labovitz
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-10-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
@@ -16,28 +15,28 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '12.3'
18
+ version: '13.3'
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '12.3'
25
+ version: '13.3'
27
26
  - !ruby/object:Gem::Dependency
28
- name: rubygems-tasks
27
+ name: simple-rake-tasks
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '0.2'
32
+ version: '0.1'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '0.2'
39
+ version: '0.1'
41
40
  description: "\n IO::Dispatcher is a simple dispatcher for IO objects.\n "
42
41
  email: johnl@johnlabovitz.com
43
42
  executables: []
@@ -54,7 +53,6 @@ homepage: http://github.com/jslabovitz/io-dispatcher
54
53
  licenses:
55
54
  - MIT
56
55
  metadata: {}
57
- post_install_message:
58
56
  rdoc_options: []
59
57
  require_paths:
60
58
  - lib
@@ -69,8 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
67
  - !ruby/object:Gem::Version
70
68
  version: '0'
71
69
  requirements: []
72
- rubygems_version: 3.0.6
73
- signing_key:
70
+ rubygems_version: 3.7.2
74
71
  specification_version: 4
75
72
  summary: Simple dispatcher for IO objects.
76
73
  test_files: []