triggerful 0.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 +7 -0
- data/lib/triggerful.rb +156 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fd53d3d5522d0f26ab9e548d60d8293f7d8436b4
|
4
|
+
data.tar.gz: d12cc610d506493d41beb7af9548849ca3ea199c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 21bdeba842b1ad98bd72c409023bec9fbde21341606578be81a71a1cee1e56623b49c1a005e73d72b647377bef75ef5289ef0078eeaa9c956e426f9577127dbd
|
7
|
+
data.tar.gz: 8dbb63237849d91e9ab155ae6baae9f6073fb3dcc613494da87d813686e86b5e83c00f300aff2234f6444ae60da970dfca54b5f4e866986173dbc0a31dfc85cd
|
data/lib/triggerful.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
=begin
|
2
|
+
# USAGE:
|
3
|
+
|
4
|
+
$foobar = 0
|
5
|
+
|
6
|
+
def foo
|
7
|
+
$foobar += 1
|
8
|
+
end
|
9
|
+
|
10
|
+
def bar
|
11
|
+
puts $foobar
|
12
|
+
end
|
13
|
+
|
14
|
+
# create Trigger and callback, then trigger the Trigger
|
15
|
+
_foo = Trigger.new(:foo, :bar)
|
16
|
+
_foo.trigger
|
17
|
+
|
18
|
+
# create a method to determine if bar has been called before
|
19
|
+
bar_called? = false
|
20
|
+
def bar_called
|
21
|
+
bar_called = true
|
22
|
+
end
|
23
|
+
|
24
|
+
# create a callback for the callback
|
25
|
+
_bar = Trigger.new(:bar, :bar_called)
|
26
|
+
|
27
|
+
# replace old callback with new one (note that no symbol was used for the callback)
|
28
|
+
_foo.remove(:bar)
|
29
|
+
_foo.add(_bar)
|
30
|
+
|
31
|
+
# methods are not called when added to Trigger callbacks, only when triggered
|
32
|
+
puts bar_called?
|
33
|
+
_foo.trigger
|
34
|
+
puts bar_called?
|
35
|
+
=end
|
36
|
+
|
37
|
+
class Trigger
|
38
|
+
def initialize event, *callbacks
|
39
|
+
@callbacks = callbacks
|
40
|
+
@event = event
|
41
|
+
|
42
|
+
if @callbacks[0].is_a? TrueClass
|
43
|
+
@progression = true
|
44
|
+
@callbacks.delete_at(0)
|
45
|
+
elsif @callbacks[0].is_a? FalseClass
|
46
|
+
@progression = false
|
47
|
+
@callbacks.delete_at(0)
|
48
|
+
else
|
49
|
+
@progression = false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def trigger(*args)
|
54
|
+
case @event.class.to_s
|
55
|
+
when 'Proc'
|
56
|
+
event_data = @event.call
|
57
|
+
when 'Method'
|
58
|
+
event_data = @event.call
|
59
|
+
else
|
60
|
+
event_data = self.method(@event).call(*args)
|
61
|
+
end
|
62
|
+
@callbacks.each do |callback|
|
63
|
+
if callback.instance_of? Trigger
|
64
|
+
if @progression
|
65
|
+
callback.trigger(*args, event_data)
|
66
|
+
else
|
67
|
+
callback.trigger(*args)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
case callback.class.to_s
|
71
|
+
when 'Proc'
|
72
|
+
if @progression
|
73
|
+
callback.call(*args, event_data)
|
74
|
+
else
|
75
|
+
callback.call(*args)
|
76
|
+
end
|
77
|
+
when 'Method'
|
78
|
+
if @progression
|
79
|
+
callback.call(*args, event_data)
|
80
|
+
else
|
81
|
+
callback.call(*args)
|
82
|
+
end
|
83
|
+
else
|
84
|
+
if @progression
|
85
|
+
method(callback).call(*args, event_data)
|
86
|
+
else
|
87
|
+
method(callback).call(*args)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
#triggers the callbacks without executing the original method
|
95
|
+
def silent_trigger(*args)
|
96
|
+
@callbacks.each do |callback|
|
97
|
+
if callback.instance_of? Trigger
|
98
|
+
callback.trigger(*args)
|
99
|
+
else
|
100
|
+
case callback.class.to_s
|
101
|
+
when 'Proc'
|
102
|
+
callback.call
|
103
|
+
else
|
104
|
+
method(callback).call(*args)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# add callback(s) to instance
|
111
|
+
def add(*callbacks)
|
112
|
+
@callbacks.concat callbacks
|
113
|
+
end
|
114
|
+
|
115
|
+
def insert(index, *callbacks)
|
116
|
+
@callbacks.insert(index, callbacks)
|
117
|
+
end
|
118
|
+
|
119
|
+
# remove callback(s) from instance
|
120
|
+
def remove(*callbacks)
|
121
|
+
callbacks.each do |callback|
|
122
|
+
@callbacks.delete_at(@callbacks.index(callback) || @callbacks.length)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def delete_at(index)
|
127
|
+
@callbacks.delete_at(index)
|
128
|
+
end
|
129
|
+
|
130
|
+
def remove_all
|
131
|
+
@callbacks = []
|
132
|
+
end
|
133
|
+
|
134
|
+
# fetch info from instance
|
135
|
+
def index(callback)
|
136
|
+
@callbacks.index(callback)
|
137
|
+
end
|
138
|
+
|
139
|
+
def event_name
|
140
|
+
@event
|
141
|
+
end
|
142
|
+
|
143
|
+
def list
|
144
|
+
@callbacks
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
=begin
|
149
|
+
A short scrib of notes for humans
|
150
|
+
|
151
|
+
Semantically speaking, caller, event, and trigger are synonymous.
|
152
|
+
The trigger that is triggered is similar to a javascript event
|
153
|
+
that is listened to. The callbacks would be called from the
|
154
|
+
caller, ie the event/trigger.
|
155
|
+
|
156
|
+
=end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: triggerful
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Bob Garrett
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Create callbacks to methods that you can easily remove. Quite useful
|
14
|
+
for lightweight event based programming. Even the medic agrees.
|
15
|
+
email: andrew@cocodesign.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/triggerful.rb
|
21
|
+
homepage: http://rubygems.org/gems/
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.0.6
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Triggerful is a gem used for creating modular callbacks.
|
45
|
+
test_files: []
|