triggerful 0.0.3 → 0.0.4
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/example/methods.rb +31 -72
- data/example/usage.rb +7 -15
- data/lib/triggerful.rb +80 -75
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9924e5a6de21a1d92e2447af8c77b528e7ebcfac
|
4
|
+
data.tar.gz: 50fb8c654671f3e945efaf4b4868b3ac985855ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17fd69f8e4dca8215e521b61aaba65a77ff36c416a678dc18e9e7cdc297a6585b3b7d57f857e8f4c2f6df1b96203c685f1ea8a9ea6d2940739675663fe527925
|
7
|
+
data.tar.gz: dc8cb9db6eef6339a962a9fd941da64777331c0e865ef0535fc7da102827a79a199ef01a97acdcd368166809ebc177e1ed717a9c234683c287ae241ed47b8745
|
data/example/methods.rb
CHANGED
@@ -1,84 +1,43 @@
|
|
1
1
|
# A more comprehensive list of methods that Triggerful supports
|
2
2
|
require 'triggerful'
|
3
3
|
|
4
|
+
$errors = 0
|
4
5
|
$foobar = 0
|
5
6
|
|
6
|
-
def
|
7
|
-
|
8
|
-
$foobar += amount_of_change
|
9
|
-
|
10
|
-
# The return value will be appended to the arguments sent
|
11
|
-
# to the callback.
|
12
|
-
amount_of_change
|
7
|
+
def add(amount = 1)
|
8
|
+
$foobar += 1
|
13
9
|
end
|
14
10
|
|
15
|
-
def
|
16
|
-
|
11
|
+
def sub(amount = 1)
|
12
|
+
$foobar -= amount
|
17
13
|
end
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# Sometimes you don't care about creating a new method the
|
25
|
-
# normal way and you just want to use a Proc instead.
|
26
|
-
_bar = Trigger.new(Proc.new{ $foobar += 1; 1 }, true, :say_foobar)
|
27
|
-
_bar.trigger
|
28
|
-
|
29
|
-
# You might even want to have a class's public method be
|
30
|
-
# an event. To get a hold of that, use instance.public_method(:symbol)
|
31
|
-
class FooBar
|
32
|
-
def initialize amount
|
33
|
-
@amount = amount
|
34
|
-
end
|
35
|
-
|
36
|
-
def add
|
37
|
-
$foobar += @amount
|
38
|
-
@amount
|
39
|
-
end
|
40
|
-
|
41
|
-
def subtract
|
42
|
-
$foobar -= @amount
|
43
|
-
@amount
|
44
|
-
end
|
45
|
-
|
46
|
-
def amount
|
47
|
-
@amount
|
15
|
+
def err_unless(line = 'unknown line', statement = true)
|
16
|
+
if !statement
|
17
|
+
$errors += 1
|
18
|
+
puts "Incorrect value at #{line}"
|
48
19
|
end
|
49
20
|
end
|
50
21
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
puts "
|
72
|
-
|
73
|
-
_twenty_subtract.delete_at(_twenty_subtract.index(:foo))
|
74
|
-
puts "(#{_twenty_subtract.length}) #{_twenty_subtract.list}\n----"
|
75
|
-
|
76
|
-
_twenty_subtract.remove_all
|
77
|
-
puts "(#{_twenty_subtract.length}) #{_twenty_subtract.list}"
|
78
|
-
|
79
|
-
# If you're ever unsure of what your event is called,
|
80
|
-
# such as when you're using a Proc, then you may call
|
81
|
-
# the Trigger.event to fetch that data
|
82
|
-
puts "Proc event: #{_bar.event}"
|
83
|
-
puts "Symbol event: #{_foo.event}"
|
84
|
-
puts "Public Method event: #{_twenty_add.event}"
|
22
|
+
event = Trigger.new(:add, true, :sub)
|
23
|
+
err_unless __LINE__, event.trigger == 1
|
24
|
+
err_unless __LINE__, (event.add(:sub,:sub).is_a? Array)
|
25
|
+
err_unless __LINE__, event.trigger == 1
|
26
|
+
err_unless __LINE__, $foobar == -2
|
27
|
+
err_unless __LINE__, (event.remove_all == [])
|
28
|
+
err_unless __LINE__, event.insert(0, ->{ $foobar -= $foobar }).size == 1
|
29
|
+
err_unless __LINE__, (proc_callback = event.list[0]; proc_callback.is_a? Proc)
|
30
|
+
err_unless __LINE__, event.remove(proc_callback).empty?
|
31
|
+
err_unless __LINE__, event.toggle_event_returns == false
|
32
|
+
err_unless __LINE__, (event << :sub).length == 1
|
33
|
+
err_unless __LINE__, event.include?(:sub)
|
34
|
+
err_unless __LINE__, (event << ->{ $foobar -= $foobar }).count == 2
|
35
|
+
# this may be a bug within Ruby itself
|
36
|
+
err_unless __LINE__, event.first == [:sub]
|
37
|
+
err_unless __LINE__, event.reverse!.last == :sub
|
38
|
+
|
39
|
+
if $errors > 0
|
40
|
+
puts "Total errors: #{$errors}"
|
41
|
+
else
|
42
|
+
puts "No errors! Looking all right to me."
|
43
|
+
end
|
data/example/usage.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# Triggerful usage
|
2
1
|
require 'triggerful'
|
3
2
|
|
4
3
|
$foobar = 0
|
@@ -11,24 +10,17 @@ def bar
|
|
11
10
|
puts $foobar
|
12
11
|
end
|
13
12
|
|
14
|
-
# create Trigger and callback, then trigger
|
13
|
+
# create Trigger with an event and callback, then trigger it
|
15
14
|
_foo = Trigger.new(:foo, :bar)
|
16
15
|
_foo.trigger
|
17
16
|
|
18
17
|
# create a method to determine if bar has been called before
|
19
|
-
$bar_called
|
20
|
-
|
21
|
-
$bar_called = true
|
22
|
-
end
|
23
|
-
|
24
|
-
# create a callback for the callback
|
25
|
-
_bar = Trigger.new(:bar, :bar_called)
|
18
|
+
$bar_called = false
|
19
|
+
_bar = Trigger.new(:bar, Proc.new{ $bar_called = true })
|
26
20
|
|
27
|
-
# replace old callback with new one
|
28
|
-
_foo.
|
29
|
-
_foo.add(_bar)
|
21
|
+
# replace old callback with new one
|
22
|
+
_foo.replace(_bar)
|
30
23
|
|
31
|
-
|
32
|
-
puts $bar_called?
|
24
|
+
puts $bar_called
|
33
25
|
_foo.trigger
|
34
|
-
puts $bar_called
|
26
|
+
puts $bar_called
|
data/lib/triggerful.rb
CHANGED
@@ -1,81 +1,76 @@
|
|
1
1
|
class Trigger
|
2
|
-
|
3
|
-
|
2
|
+
# event is the Proc, Method, Trigger, Symbol, or String that gets called before the callbacks
|
3
|
+
# event_returns determines whether or not the callbacks should receive the output of the event appended in the arguments
|
4
|
+
# *callbacks is any number of Procs, Methods, Triggers, Symbols, or Strings that will be called after the event
|
5
|
+
def initialize event, event_returns = false, *callbacks
|
6
|
+
@event_name, @event_returns, @callbacks = event, event_returns, callbacks
|
7
|
+
@event = to_method(@event_name)
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@progression = true
|
10
|
-
@callbacks.delete_at(0)
|
11
|
-
when FalseClass
|
12
|
-
@progression = false
|
13
|
-
@callbacks.delete_at(0)
|
14
|
-
else
|
15
|
-
@progression = false
|
9
|
+
case @event_returns
|
10
|
+
when Proc, Method, Symbol, String, Trigger
|
11
|
+
@callbacks.unshift(event_returns)
|
12
|
+
@event_returns = false
|
16
13
|
end
|
14
|
+
|
15
|
+
update_callback_procs
|
17
16
|
end
|
18
17
|
|
19
18
|
# fires the event and all callbacks normally
|
20
19
|
def trigger(*args)
|
21
20
|
arguments = *args.dup
|
22
|
-
event_data =
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
silent_trigger(*arguments)
|
32
|
-
end
|
33
|
-
|
34
|
-
# triggers the callbacks without executing the original event
|
35
|
-
def silent_trigger(*args)
|
36
|
-
@callbacks.each do |callback|
|
37
|
-
if callback.instance_of? Trigger
|
38
|
-
callback.trigger(*args)
|
39
|
-
else
|
40
|
-
case callback
|
41
|
-
when Proc, Method
|
42
|
-
callback.call(*args)
|
43
|
-
else
|
44
|
-
method(callback).call(*args)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
21
|
+
event_data = @event.call(*args)
|
22
|
+
arguments << event_data if @event_returns
|
23
|
+
@callback_procs.each{ |c| c.call(*arguments) }
|
24
|
+
event_data
|
25
|
+
end
|
26
|
+
|
27
|
+
def toggle_event_returns
|
28
|
+
@event_returns = !@event_returns
|
48
29
|
end
|
49
30
|
|
50
31
|
# add callback(s) to instance
|
51
32
|
def add(*callbacks)
|
52
33
|
@callbacks.concat(callbacks)
|
34
|
+
update_callback_procs
|
53
35
|
end
|
54
36
|
|
55
37
|
# insert a callback at a specific index
|
56
38
|
def insert(index, *callbacks)
|
57
|
-
@callbacks.insert(index, callbacks)
|
39
|
+
@callbacks.insert(index, *callbacks)
|
40
|
+
update_callback_procs
|
58
41
|
end
|
59
42
|
|
60
|
-
# remove callback(s) from instance
|
43
|
+
# remove specified callback(s) from instance
|
61
44
|
def remove(*callbacks)
|
45
|
+
callbacks.each do |callback|
|
46
|
+
@callbacks.delete(callback)
|
47
|
+
end
|
48
|
+
update_callback_procs
|
49
|
+
end
|
50
|
+
|
51
|
+
# remove first callback for each specified callback(s) from instance
|
52
|
+
def remove_first(*callbacks)
|
62
53
|
callbacks.each do |callback|
|
63
54
|
@callbacks.delete_at(@callbacks.index(callback) || @callbacks.length)
|
64
55
|
end
|
56
|
+
update_callback_procs
|
65
57
|
end
|
66
58
|
|
67
59
|
def delete(callback)
|
68
60
|
@callbacks.delete(callback)
|
61
|
+
update_callback_procs
|
69
62
|
end
|
70
63
|
|
71
64
|
# remove a callback from a specific index
|
72
65
|
def delete_at(index)
|
73
66
|
@callbacks.delete_at(index)
|
67
|
+
update_callback_procs
|
74
68
|
end
|
75
69
|
|
76
70
|
# remove all callbacks from the event
|
77
71
|
def remove_all
|
78
72
|
@callbacks = []
|
73
|
+
update_callback_procs
|
79
74
|
end
|
80
75
|
|
81
76
|
# fetch index of a callback from instance
|
@@ -89,8 +84,8 @@ class Trigger
|
|
89
84
|
end
|
90
85
|
|
91
86
|
# fetch a callback at an index
|
92
|
-
def fetch(index,
|
93
|
-
@callbacks.fetch(index,
|
87
|
+
def fetch(index, err_log = nil)
|
88
|
+
@callbacks.fetch(index, err_log)
|
94
89
|
end
|
95
90
|
|
96
91
|
# fetch the first callback(s) on event
|
@@ -103,41 +98,11 @@ class Trigger
|
|
103
98
|
@callbacks.last(count)
|
104
99
|
end
|
105
100
|
|
106
|
-
# fetch the event, which may be a Proc, Symbol, String, or Method
|
107
|
-
def event
|
108
|
-
@event
|
109
|
-
end
|
110
|
-
|
111
101
|
# fetch the number of callbacks
|
112
102
|
def length
|
113
103
|
@callbacks.length
|
114
104
|
end
|
115
105
|
|
116
|
-
# fetch the number of callbacks
|
117
|
-
def count
|
118
|
-
@callbacks.count
|
119
|
-
end
|
120
|
-
|
121
|
-
# fetch the number of callbacks
|
122
|
-
def size
|
123
|
-
@callbacks.size
|
124
|
-
end
|
125
|
-
|
126
|
-
# returns an array object of callbacks
|
127
|
-
def list
|
128
|
-
@callbacks
|
129
|
-
end
|
130
|
-
|
131
|
-
# alias for list
|
132
|
-
def callbacks
|
133
|
-
@callbacks
|
134
|
-
end
|
135
|
-
|
136
|
-
# remove all callbacks from the event
|
137
|
-
def clear
|
138
|
-
@callbacks = []
|
139
|
-
end
|
140
|
-
|
141
106
|
# returns true if there are no callbacks or false otherwise
|
142
107
|
def empty?
|
143
108
|
@callbacks.empty?
|
@@ -148,9 +113,10 @@ class Trigger
|
|
148
113
|
@callbacks.include?(callback)
|
149
114
|
end
|
150
115
|
|
151
|
-
# replaces callbacks with a new
|
152
|
-
def replace(callbacks)
|
116
|
+
# replaces callbacks with a new splat of callbacks
|
117
|
+
def replace(*callbacks)
|
153
118
|
@callbacks.replace(callbacks)
|
119
|
+
update_callback_procs
|
154
120
|
end
|
155
121
|
|
156
122
|
# returns a reversed version of callbacks
|
@@ -161,5 +127,44 @@ class Trigger
|
|
161
127
|
# returns a reversed version of callbacks and changes the original
|
162
128
|
def reverse!
|
163
129
|
@callbacks.reverse!
|
130
|
+
update_callback_procs
|
131
|
+
end
|
132
|
+
|
133
|
+
def <<(callback)
|
134
|
+
@callbacks << callback
|
135
|
+
update_callback_procs
|
136
|
+
end
|
137
|
+
|
138
|
+
def +(*callbacks)
|
139
|
+
@callbacks + callbacks
|
140
|
+
end
|
141
|
+
|
142
|
+
def -(*callbacks)
|
143
|
+
@callbacks - callbacks
|
144
|
+
end
|
145
|
+
|
146
|
+
attr_accessor :event_name, :event_returns, :callbacks
|
147
|
+
alias :list :callbacks
|
148
|
+
alias :event :event_name
|
149
|
+
|
150
|
+
alias_method :call, :trigger
|
151
|
+
alias_method :size, :length
|
152
|
+
alias_method :count, :length
|
153
|
+
alias_method :clear, :remove_all
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
# turns the array of Procs, Methods, Triggers, Symbols, and Strings into a callable array
|
158
|
+
def update_callback_procs
|
159
|
+
@callback_procs = @callbacks.map{ |c| to_method(c) }
|
160
|
+
@callbacks
|
161
|
+
end
|
162
|
+
|
163
|
+
# converts Triggers, Strings, and Symbols into objects that can be used with the .call method
|
164
|
+
def to_method(event)
|
165
|
+
case event
|
166
|
+
when Proc, Method, Trigger then event
|
167
|
+
else self.class.superclass.method(event)
|
168
|
+
end
|
164
169
|
end
|
165
170
|
end
|
metadata
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: triggerful
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Bob Garrett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
14
|
-
|
13
|
+
description: |
|
14
|
+
Create callbacks to methods that you can easily and dynamically
|
15
|
+
create/remove. Quite useful for lightweight event based programming. Even
|
16
|
+
the medic agrees. If there's any kind of feature you think this gem is
|
17
|
+
missing or if there is a bug, feel free to email me at andrew@karbon.tk
|
18
|
+
any time. Special thanks to: My brother Matt, m_x
|
19
|
+
(http://codereview.stackexchange.com/users/24548/m-x), and Cary Swoveland
|
20
|
+
(http://codereview.stackexchange.com/users/30157/cary-swoveland)'
|
15
21
|
email: andrew@karbon.tk
|
16
22
|
executables: []
|
17
23
|
extensions: []
|
@@ -33,7 +39,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
33
39
|
requirements:
|
34
40
|
- - '>='
|
35
41
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
42
|
+
version: 2.0.0
|
37
43
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
44
|
requirements:
|
39
45
|
- - '>='
|