io-dispatcher 0.1 → 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: d281352f7399d0dde0548bf8afa4c56036d6fe76819bee60fda6a31ce642aae1
4
- data.tar.gz: f870ec81b85111940779fbc13c9549cfe1bfec2842bc5c01c1b614d593ea53fe
3
+ metadata.gz: 7cf9d9de60880260030d029b5edb48f3e2253dbf4235f827a2a94359b7af32bb
4
+ data.tar.gz: a4f40be71cf6bca0bb480d0b30796035e45ebad8994c3e11c40c1a633bdc4b38
5
5
  SHA512:
6
- metadata.gz: 8258030ec520c846ac7496c3c20d321ff1a6a60127d77c6f473ceb180c490e196a10b0e0dfe01f8b0aec6f77627767917b06d787117c1f2e847dc98cc63842ef
7
- data.tar.gz: e898b8b9d29f78b18a91a32deacd3eca79cab26895cd51be2c8334fbae2aace4eb268816de9125f96002475a1946138b00d47d97288495b87ffe1e4272c1ce63
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.1'
3
+ VERSION = '0.7'
4
4
 
5
5
  end
data/lib/io-dispatcher.rb CHANGED
@@ -8,14 +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]
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
15
+ end
16
+
17
+ def remove_io_handler(input: nil, output: nil, exception: nil)
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)
17
28
  end
18
- @io_handlers[mode][io] = handler || block
19
29
  end
20
30
 
21
31
  def set_timeout_handler(timeout, &block)
@@ -23,11 +33,17 @@ class IO
23
33
  @timeout_handler = block
24
34
  end
25
35
 
26
- def run
27
- loop do
28
- 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))
29
43
  ready.each_with_index do |mode, i|
30
- 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
31
47
  end
32
48
  else
33
49
  @timeout_handler.call if @timeout_handler
@@ -35,6 +51,10 @@ class IO
35
51
  end
36
52
  end
37
53
 
54
+ def stop
55
+ @stop = true
56
+ end
57
+
38
58
  end
39
59
 
40
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.1'
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: 2018-03-18 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,9 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
67
  - !ruby/object:Gem::Version
70
68
  version: '0'
71
69
  requirements: []
72
- rubyforge_project:
73
- rubygems_version: 2.7.6
74
- signing_key:
70
+ rubygems_version: 3.7.2
75
71
  specification_version: 4
76
72
  summary: Simple dispatcher for IO objects.
77
73
  test_files: []