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.
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: []