edrive 1.0.0 → 1.0.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 +4 -4
- data/.gitignore +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +22 -20
- data/edrive.gemspec +6 -2
- data/lib/edrive/dispatcher.rb +33 -46
- data/lib/edrive/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 196413aba8d4ffa5a125864721625ffbdaf52acc1126dfcb09e27762cea3c98c
|
4
|
+
data.tar.gz: f35cdc6664c68a55282a1c9636774253cb1a10c93c8df56f8f016a34e2c8ee1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d675ce3010139efba5432263c5e314374e62dce68baa4678971fe4d3a914d86ab9b271dd0d2b1899c7bf70cc1a6f2ce50b2a520d74144c9ffc13a9e2a51f2d1
|
7
|
+
data.tar.gz: 7243170413423430eb590518cdd7c697ed41bfc56db5b8e5592a56f128af2fc4c87944fd4ffb38ac5fe0fabf067bd1f8005642af6243879dd6b75fc18ba5e09e
|
data/.gitignore
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Edrive
|
2
2
|
|
3
|
-
|
3
|
+
[](https://badge.fury.io/rb/edrive)
|
4
|
+
|
5
|
+
Provide simple event dispatcher mechanism for all of ruby products.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -24,10 +26,10 @@ Or install it yourself as:
|
|
24
26
|
|
25
27
|
```ruby
|
26
28
|
dispatcher = Edrive::Dispatcher.new
|
27
|
-
dispatcher.
|
28
|
-
dispatcher.
|
29
|
-
dispatcher.
|
30
|
-
dispatcher.
|
29
|
+
dispatcher.on(:event, -> { puts 1 })
|
30
|
+
dispatcher.on(:event, -> { puts 2 })
|
31
|
+
dispatcher.on(:event, -> { puts 3 })
|
32
|
+
dispatcher.fire(:event)
|
31
33
|
|
32
34
|
1
|
33
35
|
2
|
@@ -38,11 +40,11 @@ dispatcher.dispatch(:event)
|
|
38
40
|
|
39
41
|
```ruby
|
40
42
|
dispatcher = Edrive::Dispatcher.new
|
41
|
-
dispatcher.
|
42
|
-
dispatcher.
|
43
|
-
dispatcher.
|
44
|
-
dispatcher.
|
45
|
-
dispatcher.
|
43
|
+
dispatcher.on(:event, ->(data) { data + 1 })
|
44
|
+
dispatcher.on(:event, ->(data) { data + 2 })
|
45
|
+
dispatcher.on(:event, ->(data) { data + 3 })
|
46
|
+
dispatcher.on(:event, ->(data) { puts data })
|
47
|
+
dispatcher.fire_with_data(:event, 100)
|
46
48
|
|
47
49
|
106
|
48
50
|
```
|
@@ -51,10 +53,10 @@ dispatcher.dispatch_with_data(:event, 100)
|
|
51
53
|
|
52
54
|
```ruby
|
53
55
|
dispatcher = Edrive::Dispatcher.new
|
54
|
-
dispatcher.
|
55
|
-
dispatcher.
|
56
|
-
dispatcher.
|
57
|
-
dispatcher.
|
56
|
+
dispatcher.on(:event) { puts 1 }
|
57
|
+
dispatcher.on(:event) { puts 2 }
|
58
|
+
dispatcher.on(:event) { puts 3 }
|
59
|
+
dispatcher.fire(:event)
|
58
60
|
|
59
61
|
1
|
60
62
|
2
|
@@ -65,10 +67,10 @@ dispatcher.dispatch(:event)
|
|
65
67
|
|
66
68
|
```ruby
|
67
69
|
dispatcher = Edrive::Dispatcher.new
|
68
|
-
dispatcher.
|
69
|
-
dispatcher.
|
70
|
-
dispatcher.
|
71
|
-
dispatcher.
|
70
|
+
dispatcher.on(:event) { |data| data + 1 }
|
71
|
+
dispatcher.on(:event) { |data| data + 2 }
|
72
|
+
dispatcher.on(:event) { |data| data + 3 }
|
73
|
+
dispatcher.fire(:event, 100)
|
72
74
|
|
73
75
|
106
|
74
76
|
```
|
@@ -76,13 +78,13 @@ dispatcher.dispatch_with_data(:event, 100)
|
|
76
78
|
### clear target event
|
77
79
|
|
78
80
|
```ruby
|
79
|
-
dispatcher.
|
81
|
+
dispatcher.clear!(:event)
|
80
82
|
```
|
81
83
|
|
82
84
|
### clean all event
|
83
85
|
|
84
86
|
```ruby
|
85
|
-
dispatcher.
|
87
|
+
dispatcher.clear_all!
|
86
88
|
```
|
87
89
|
|
88
90
|
## Development
|
data/edrive.gemspec
CHANGED
@@ -9,8 +9,12 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["MichinaoShimizu"]
|
10
10
|
spec.email = ["shimizu.michinao@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Generic Event Dispatcher
|
13
|
-
|
12
|
+
spec.summary = %q{Generic Event Dispatcher. Provide simple event dispatcher mechanism for all of ruby products.
|
13
|
+
|
14
|
+
}
|
15
|
+
spec.description = %q{Generic Event Dispatcher. Provide simple event dispatcher mechanism for all of ruby products.
|
16
|
+
|
17
|
+
}
|
14
18
|
spec.homepage = "https://github.com/MichinaoShimizu/edrive"
|
15
19
|
spec.license = "MIT"
|
16
20
|
|
data/lib/edrive/dispatcher.rb
CHANGED
@@ -2,85 +2,72 @@ module Edrive
|
|
2
2
|
# Simple Event Dispatcher
|
3
3
|
# @author Michinao Shimizu <shimizu.michinao@gmail.com>
|
4
4
|
class Dispatcher
|
5
|
-
attr_accessor :event_listeners
|
6
|
-
|
7
5
|
# initialize
|
8
6
|
def initialize
|
9
|
-
@
|
7
|
+
@events = {}
|
10
8
|
end
|
11
9
|
|
12
|
-
#
|
10
|
+
# regist handler (proc, lambda, block)
|
13
11
|
# @param [Symbol] event event name symbol
|
14
|
-
# @param [Proc]
|
12
|
+
# @param [Proc] handler handler (lambda, proc)
|
13
|
+
# @param [Block] block handler (block)
|
15
14
|
# @raise ArgumentError
|
16
|
-
# @return [Array] registered
|
17
|
-
def
|
18
|
-
|
19
|
-
|
15
|
+
# @return [Array] registered handler list
|
16
|
+
def on(event, handler = nil, &block)
|
17
|
+
hdl = block_given? ? block : handler
|
18
|
+
raise ArgumentError, 'handler must be Proc object' unless hdl.is_a?(Proc)
|
19
|
+
regist(event, hdl)
|
20
20
|
end
|
21
21
|
|
22
|
-
#
|
23
|
-
# @param [Symbol] event event name symbol
|
24
|
-
# @param [Block] subscriber subscriber
|
25
|
-
# @return [Array] registered subscriber list
|
26
|
-
def subscribe_block(event, &subscriber)
|
27
|
-
regist_subscriber_proc(event, subscriber)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Dispatch specific event subscribers
|
22
|
+
# dispatch specific event handler
|
31
23
|
# @param [Symbol] event event name
|
32
24
|
# @param [Mixed] args
|
33
|
-
# @return [Mixed] last
|
34
|
-
def
|
25
|
+
# @return [Mixed] last handler return value
|
26
|
+
def fire(event, *args)
|
35
27
|
result = nil
|
36
|
-
|
37
|
-
@event_listeners[event]&.each do |subscriber|
|
38
|
-
result = subscriber.call(*args)
|
39
|
-
end
|
28
|
+
@events[event]&.each { |hdl| result = hdl.call(*args) }
|
40
29
|
result
|
41
30
|
end
|
42
31
|
|
43
|
-
#
|
32
|
+
# dispatch specific event handlers with data
|
44
33
|
# @param [Symbol] event event name
|
45
34
|
# @param [Mixed] args
|
46
|
-
# @return [Mixed] last
|
47
|
-
def
|
35
|
+
# @return [Mixed] last handler return value
|
36
|
+
def fire_with_data(event, data, *args)
|
48
37
|
result = data.dup
|
49
|
-
@
|
50
|
-
result = subscriber.call(result, *args)
|
51
|
-
end
|
38
|
+
@events[event]&.each { |hdl| result = hdl.call(result, *args) }
|
52
39
|
result
|
53
40
|
end
|
54
41
|
|
55
|
-
#
|
42
|
+
# get event handlers
|
56
43
|
# @param [Symbol] event event name symbol
|
57
|
-
# @return [Array] registered
|
58
|
-
def
|
59
|
-
@
|
44
|
+
# @return [Array] registered handler list
|
45
|
+
def handlers(event)
|
46
|
+
@events[event] || []
|
60
47
|
end
|
61
48
|
|
62
|
-
#
|
49
|
+
# clear event handlers
|
63
50
|
# @param [Symbol] event event name symbol
|
64
51
|
# @return [Array] emnpty array
|
65
|
-
def
|
66
|
-
@
|
52
|
+
def clear!(event)
|
53
|
+
@events[event] = []
|
67
54
|
end
|
68
55
|
|
69
|
-
#
|
56
|
+
# clear all of event handlers
|
70
57
|
# @return [Hash] emnpty hash
|
71
|
-
def
|
72
|
-
@
|
58
|
+
def clear_all!
|
59
|
+
@events = {}
|
73
60
|
end
|
74
61
|
|
75
62
|
private
|
76
63
|
|
77
|
-
#
|
64
|
+
# regist hanlder to target event
|
78
65
|
# @param [Symbol] event event name symbol
|
79
|
-
# @param [Proc]
|
80
|
-
# @return [Array] registered
|
81
|
-
def
|
82
|
-
@
|
83
|
-
@
|
66
|
+
# @param [Proc] handler handler
|
67
|
+
# @return [Array] registered handler list
|
68
|
+
def regist(event, handler)
|
69
|
+
@events[event] ||= []
|
70
|
+
@events[event] << handler
|
84
71
|
end
|
85
72
|
end
|
86
73
|
end
|
data/lib/edrive/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edrive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MichinaoShimizu
|
@@ -52,13 +52,15 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
-
description: Generic Event Dispatcher
|
55
|
+
description: "Generic Event Dispatcher. Provide simple event dispatcher mechanism
|
56
|
+
for all of ruby products.\n\n "
|
56
57
|
email:
|
57
58
|
- shimizu.michinao@gmail.com
|
58
59
|
executables: []
|
59
60
|
extensions: []
|
60
61
|
extra_rdoc_files: []
|
61
62
|
files:
|
63
|
+
- ".gitignore"
|
62
64
|
- CODE_OF_CONDUCT.md
|
63
65
|
- Gemfile
|
64
66
|
- Gemfile.lock
|
@@ -94,5 +96,6 @@ rubyforge_project:
|
|
94
96
|
rubygems_version: 2.7.6
|
95
97
|
signing_key:
|
96
98
|
specification_version: 4
|
97
|
-
summary: Generic Event Dispatcher
|
99
|
+
summary: Generic Event Dispatcher. Provide simple event dispatcher mechanism for all
|
100
|
+
of ruby products.
|
98
101
|
test_files: []
|