reactor 0.1.1 → 0.1.2
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/lib/reactor/models/concerns/eventable.rb +19 -1
- data/lib/reactor/version.rb +1 -1
- data/spec/models/concerns/eventable_spec.rb +16 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8f973cd9837cbb3928aed292f258b3de46a3db6
|
4
|
+
data.tar.gz: ca362f7c430d3255d78268fd5a1db0a056a5fc54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf86502c96dcaa4e866a9c8bc8e21412a3f9ac53a37409f55dd6a793fdfcd67f0af5d34b5d70dab30efccd989fd8b63058ad0336511e7c7fa8f386cc38ca5a75
|
7
|
+
data.tar.gz: 2f3a5f5ad4573a2668d96f952344554542a48be8b172fe2a2c210bb85c38fd330ff33d8cbb2dd0845dc4e06e50cd6c110168e8eaddf79ebd0a59cd1fc783b3d9
|
@@ -27,7 +27,15 @@ module Reactor::Eventable
|
|
27
27
|
data = data.merge(
|
28
28
|
at: ( data[:at] ? send(data[:at]) : nil), actor: self
|
29
29
|
).except(:watch)
|
30
|
-
|
30
|
+
need_to_fire = case (ifarg = data[:if])
|
31
|
+
when Proc
|
32
|
+
what = instance_exec &ifarg
|
33
|
+
when Symbol
|
34
|
+
send(ifarg)
|
35
|
+
else
|
36
|
+
true
|
37
|
+
end
|
38
|
+
Reactor::Event.delay.publish name, data if need_to_fire
|
31
39
|
end
|
32
40
|
end
|
33
41
|
|
@@ -39,6 +47,16 @@ module Reactor::Eventable
|
|
39
47
|
actor: self,
|
40
48
|
was: send("#{data[:at]}_was")
|
41
49
|
end
|
50
|
+
|
51
|
+
if data[:if]
|
52
|
+
need_to_fire = case (ifarg = data[:if])
|
53
|
+
when Proc
|
54
|
+
instance_exec &ifarg
|
55
|
+
when Symbol
|
56
|
+
send(ifarg)
|
57
|
+
end
|
58
|
+
Reactor::Event.delay.publish name, actor: self if need_to_fire
|
59
|
+
end
|
42
60
|
end
|
43
61
|
end
|
44
62
|
end
|
data/lib/reactor/version.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class Auction < ActiveRecord::Base
|
4
|
+
attr_accessor :we_want_it
|
5
|
+
|
4
6
|
def ring_timeout
|
5
7
|
created_at + 30.seconds
|
6
8
|
end
|
@@ -11,9 +13,11 @@ class Auction < ActiveRecord::Base
|
|
11
13
|
|
12
14
|
publishes :bell
|
13
15
|
publishes :ring, at: :ring_timeout, watch: :name
|
16
|
+
publishes :conditional_event_on_save, if: -> { we_want_it }
|
14
17
|
end
|
15
18
|
|
16
19
|
class TestSubscriber < Reactor::Subscriber
|
20
|
+
@@called = false
|
17
21
|
|
18
22
|
on_fire do
|
19
23
|
@@called = true
|
@@ -43,5 +47,17 @@ describe Reactor::Eventable do
|
|
43
47
|
auction.save
|
44
48
|
TestSubscriber.class_variable_get(:@@called).should be_false
|
45
49
|
end
|
50
|
+
|
51
|
+
it 'can fire events onsave for any condition' do
|
52
|
+
TestSubscriber.create! event: :conditional_event_on_save
|
53
|
+
auction
|
54
|
+
TestSubscriber.class_variable_set(:@@called, false)
|
55
|
+
auction.start_at = 1.day.from_now
|
56
|
+
auction.save
|
57
|
+
TestSubscriber.class_variable_get(:@@called).should be_false
|
58
|
+
auction.we_want_it = true
|
59
|
+
auction.save
|
60
|
+
TestSubscriber.class_variable_get(:@@called).should be_true
|
61
|
+
end
|
46
62
|
end
|
47
63
|
end
|