triggerful 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61ac309ae45567aa35b123196c6668b619884283
4
- data.tar.gz: efe1ceb742a31cc93022ce6d5c68a7390d4344be
3
+ metadata.gz: 517ba6c637f620f99edd9a6ad33fa536ae2b7064
4
+ data.tar.gz: cd8f10f45e3d1b6cf5a0d74975d87d5df35c4df1
5
5
  SHA512:
6
- metadata.gz: 8725c277b0204333e982a4d2a24de50f41b4323157311ddd0bc7d4a6cb4eb4fa22e7615a4aad8df5c26fa1948b02e79d9f924d115a19551e79ffe3691645b593
7
- data.tar.gz: 74119b4bb875d04155dfdd80a8cf87a94c3cce59cf5012247084d66aaaaeb41b3d127c9dd0d3c53b413d0ffdf70d48f14d2bbb617975bbb2329e098a357681d8
6
+ metadata.gz: e64c5a28098f8bc53dc91ec8f12e1896b5697905645727d521ff65c490a08ce6b900f814e3bc3e8af5a99504b074a62edc4b10a7119a3661f9d1e54147697487
7
+ data.tar.gz: 77af13c34863c0c2f238a38f098427b6ec4f5baa278010515ff8d66abc9d5ff299f13bf340f6d79dc396329bc7daae1c193d5242daa30022d411d953dfe7350c
@@ -5,7 +5,7 @@ class Player
5
5
  def initialize name, power, toughness, crit
6
6
  @name, @power, @toughness, @crit = name, power, toughness, crit
7
7
  @health = 100
8
- @gear = []
8
+ @gear = []
9
9
  end
10
10
 
11
11
  def name(*set)
@@ -93,8 +93,7 @@ def display_stats(*players)
93
93
  end
94
94
 
95
95
  attacked_event = Trigger.new(:attacked, true, :barbed_shield, fred.public_method(:to_s), will.public_method(:to_s))
96
- attack_event = Trigger.new(:attack, true, attacked_event)
97
-
96
+ attack_event = Trigger.new(:attack, true, attacked_event)
98
97
 
99
98
  # Arbitrarily equip fred with barbed_shield.
100
99
  # Also, do not use equipment like this. You should really use classes.
data/example/methods.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # A more comprehensive list of methods that Triggerful supports
2
- require '~/Test/triggerful/lib/triggerful.rb'
2
+ require 'triggerful'
3
3
 
4
4
  $foobar = 0
5
5
 
@@ -53,7 +53,7 @@ twenty = FooBar.new(20)
53
53
  # Note that FooBar.subtract has a return value, but you don't
54
54
  # need to turn progression on to use the callback.
55
55
  _twenty_add = Trigger.new(twenty.public_method(:add), true, :say_foobar)
56
- _twenty_subtract = Trigger.new(twenty.public_method(:add), Proc.new{ puts "$foobar has decreased by #{twenty.amount} and is now #{$foobar}" })
56
+ _twenty_subtract = Trigger.new(twenty.public_method(:subtract), Proc.new{ puts "$foobar has decreased by #{twenty.amount} and is now #{$foobar}" })
57
57
 
58
58
  _twenty_add.trigger
59
59
  _twenty_subtract.trigger
@@ -74,9 +74,11 @@ _twenty_subtract.delete_at(_twenty_subtract.index(:foo))
74
74
  puts "(#{_twenty_subtract.length}) #{_twenty_subtract.list}\n----"
75
75
 
76
76
  _twenty_subtract.remove_all
77
- puts "(#{_twenty_subtract.length}) #{_twenty_subtract.list}\n----"
77
+ puts "(#{_twenty_subtract.length}) #{_twenty_subtract.list}"
78
78
 
79
79
  # If you're ever unsure of what your event is called,
80
80
  # such as when you're using a Proc, then you may call
81
81
  # the Trigger.event to fetch that data
82
- puts "Proc: #{_bar.event}\nSymbol: #{_foo.event}\nPublic Method: #{_twenty_add.event}"
82
+ puts "Proc event: #{_bar.event}"
83
+ puts "Symbol event: #{_foo.event}"
84
+ puts "Public Method event: #{_twenty_add.event}"
data/lib/triggerful.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  class Trigger
2
2
  def initialize event, *callbacks
3
- @callbacks = callbacks
4
- @event = event
3
+ @event, @callbacks = event, callbacks
5
4
 
6
- if @callbacks[0].is_a? TrueClass
5
+ # check to see if the second argument is either true or false
6
+ # if not, then it must be a callback
7
+ case @callbacks[0]
8
+ when TrueClass
7
9
  @progression = true
8
10
  @callbacks.delete_at(0)
9
- elsif @callbacks[0].is_a? FalseClass
11
+ when FalseClass
10
12
  @progression = false
11
13
  @callbacks.delete_at(0)
12
14
  else
@@ -14,58 +16,30 @@ class Trigger
14
16
  end
15
17
  end
16
18
 
19
+ # fires the event and all callbacks normally
17
20
  def trigger(*args)
18
- case @event
19
- when Proc
20
- event_data = @event.call
21
- when Method
22
- event_data = @event.call
21
+ arguments = *args.dup
22
+ event_data = case @event
23
+ when Proc, Method
24
+ @event.call(*args)
23
25
  else
24
- event_data = self.method(@event).call(*args)
25
- end
26
- @callbacks.each do |callback|
27
- if callback.instance_of? Trigger
28
- if @progression
29
- callback.trigger(*args, event_data)
30
- else
31
- callback.trigger(*args)
32
- end
33
- else
34
- case callback
35
- when Proc
36
- if @progression
37
- callback.call(*args, event_data)
38
- else
39
- callback.call(*args)
40
- end
41
- when Method
42
- if @progression
43
- callback.call(*args, event_data)
44
- else
45
- callback.call(*args)
46
- end
47
- else
48
- if @progression
49
- method(callback).call(*args, event_data)
50
- else
51
- method(callback).call(*args)
52
- end
53
- end
54
- end
26
+ method(@event).call(*args)
55
27
  end
28
+
29
+ arguments << event_data if @progression
30
+
31
+ silent_trigger(*arguments)
56
32
  end
57
33
 
58
- #triggers the callbacks without executing the original method
34
+ # triggers the callbacks without executing the original event
59
35
  def silent_trigger(*args)
60
36
  @callbacks.each do |callback|
61
37
  if callback.instance_of? Trigger
62
38
  callback.trigger(*args)
63
39
  else
64
40
  case callback
65
- when Proc
66
- callback.call
67
- when Method
68
- callback.call
41
+ when Proc, Method
42
+ callback.call(*args)
69
43
  else
70
44
  method(callback).call(*args)
71
45
  end
@@ -75,9 +49,10 @@ class Trigger
75
49
 
76
50
  # add callback(s) to instance
77
51
  def add(*callbacks)
78
- @callbacks.concat callbacks
52
+ @callbacks.concat(callbacks)
79
53
  end
80
54
 
55
+ # insert a callback at a specific index
81
56
  def insert(index, *callbacks)
82
57
  @callbacks.insert(index, callbacks)
83
58
  end
@@ -89,42 +64,102 @@ class Trigger
89
64
  end
90
65
  end
91
66
 
67
+ def delete(callback)
68
+ @callbacks.delete(callback)
69
+ end
70
+
71
+ # remove a callback from a specific index
92
72
  def delete_at(index)
93
73
  @callbacks.delete_at(index)
94
74
  end
95
75
 
76
+ # remove all callbacks from the event
96
77
  def remove_all
97
78
  @callbacks = []
98
79
  end
99
80
 
100
- # fetch info from instance
81
+ # fetch index of a callback from instance
101
82
  def index(callback)
102
83
  @callbacks.index(callback)
103
84
  end
104
85
 
86
+ # fetch a callback at an index
87
+ def at(index)
88
+ @callbacks.at(index)
89
+ end
90
+
91
+ # fetch a callback at an index
92
+ def fetch(index, default = nil)
93
+ @callbacks.fetch(index, default)
94
+ end
95
+
96
+ # fetch the first callback(s) on event
97
+ def first(count = 1)
98
+ @callbacks.first(count)
99
+ end
100
+
101
+ # fetch the last callback(s) on event
102
+ def last(count = 1)
103
+ @callbacks.last(count)
104
+ end
105
+
106
+ # fetch the event, which may be a Proc, Symbol, String, or Method
105
107
  def event
106
108
  @event
107
109
  end
108
110
 
111
+ # fetch the number of callbacks
109
112
  def length
110
113
  @callbacks.length
111
114
  end
112
115
 
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
113
127
  def list
114
128
  @callbacks
115
129
  end
116
130
 
131
+ # alias for list
117
132
  def callbacks
118
133
  @callbacks
119
134
  end
135
+
136
+ # remove all callbacks from the event
137
+ def clear
138
+ @callbacks = []
139
+ end
140
+
141
+ # returns true if there are no callbacks or false otherwise
142
+ def empty?
143
+ @callbacks.empty?
144
+ end
145
+
146
+ # returns true if specified callback exists in callbacks or false otherwise
147
+ def include?(callback)
148
+ @callbacks.include?(callback)
149
+ end
150
+
151
+ # replaces callbacks with a new array of callbacks
152
+ def replace(callbacks)
153
+ @callbacks.replace(callbacks)
154
+ end
155
+
156
+ # returns a reversed version of callbacks
157
+ def reverse
158
+ @callbacks.reverse
159
+ end
160
+
161
+ # returns a reversed version of callbacks and changes the original
162
+ def reverse!
163
+ @callbacks.reverse!
164
+ end
120
165
  end
121
-
122
- =begin
123
- A short scrib of notes for humans
124
-
125
- Semantically speaking, caller, event, and trigger are synonymous.
126
- The trigger that is triggered is similar to a javascript event
127
- that is listened to. The callbacks would be called from the
128
- caller, ie the event/trigger.
129
-
130
- =end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: triggerful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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-09 00:00:00.000000000 Z
11
+ date: 2013-10-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Create callbacks to methods that you can easily and dynamically create/remove.
14
14
  Quite useful for lightweight event based programming. Even the medic agrees.