triggerful 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/triggerful.rb +156 -0
  3. 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: []