wonkavision 0.5.4 → 0.5.9
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.
- data/CHANGELOG.rdoc +28 -16
- data/Gemfile +5 -0
- data/LICENSE.txt +21 -21
- data/Rakefile +47 -47
- data/lib/wonkavision.rb +75 -74
- data/lib/wonkavision/acts_as_oompa_loompa.rb +22 -22
- data/lib/wonkavision/event_binding.rb +21 -21
- data/lib/wonkavision/event_context.rb +9 -9
- data/lib/wonkavision/event_coordinator.rb +75 -75
- data/lib/wonkavision/event_handler.rb +15 -15
- data/lib/wonkavision/event_namespace.rb +79 -79
- data/lib/wonkavision/event_path_segment.rb +35 -35
- data/lib/wonkavision/message_mapper.rb +30 -30
- data/lib/wonkavision/message_mapper/indifferent_access.rb +30 -26
- data/lib/wonkavision/message_mapper/map.rb +241 -153
- data/lib/wonkavision/persistence/mongo_mapper_adapter.rb +32 -32
- data/lib/wonkavision/persistence/mongoid_adapter.rb +32 -0
- data/lib/wonkavision/plugins.rb +30 -30
- data/lib/wonkavision/plugins/business_activity.rb +92 -92
- data/lib/wonkavision/plugins/business_activity/event_binding.rb +15 -15
- data/lib/wonkavision/plugins/callbacks.rb +182 -182
- data/lib/wonkavision/plugins/event_handling.rb +111 -111
- data/lib/wonkavision/plugins/timeline.rb +79 -79
- data/lib/wonkavision/version.rb +3 -3
- data/test/business_activity_test.rb +31 -31
- data/test/event_handler_test.rb +68 -69
- data/test/event_namespace_test.rb +108 -108
- data/test/event_path_segment_test.rb +41 -41
- data/test/log/test.log +817 -18354
- data/test/map_test.rb +315 -201
- data/test/message_mapper_test.rb +20 -20
- data/test/test_activity_models.rb +72 -72
- data/test/test_helper.rb +70 -63
- data/test/timeline_test.rb +55 -61
- data/test/wonkavision_test.rb +9 -9
- metadata +72 -12
- data/wonkavision.gemspec +0 -97
data/test/message_mapper_test.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class Wonkavision::MessageMapperTest < ActiveSupport::TestCase
|
4
|
-
context "Wonkavision::MessageMapper.execute" do
|
5
|
-
setup do
|
6
|
-
Wonkavision::MessageMapper.register("test_map") do
|
7
|
-
context["i_was_here"] = true
|
8
|
-
end
|
9
|
-
end
|
10
|
-
should "evaluate the named block against a new map" do
|
11
|
-
data = {}
|
12
|
-
Wonkavision::MessageMapper.execute("test_map",data)
|
13
|
-
assert data["i_was_here"]
|
14
|
-
end
|
15
|
-
should "raise an error if the map is missing" do
|
16
|
-
assert_raise RuntimeError do
|
17
|
-
Wonkavision::MessageMapper.execute("I'm not really here", {})
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Wonkavision::MessageMapperTest < ActiveSupport::TestCase
|
4
|
+
context "Wonkavision::MessageMapper.execute" do
|
5
|
+
setup do
|
6
|
+
Wonkavision::MessageMapper.register("test_map") do
|
7
|
+
context["i_was_here"] = true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
should "evaluate the named block against a new map" do
|
11
|
+
data = {}
|
12
|
+
Wonkavision::MessageMapper.execute("test_map",data)
|
13
|
+
assert data["i_was_here"]
|
14
|
+
end
|
15
|
+
should "raise an error if the map is missing" do
|
16
|
+
assert_raise RuntimeError do
|
17
|
+
Wonkavision::MessageMapper.execute("I'm not really here", {})
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
21
|
end
|
@@ -1,72 +1,72 @@
|
|
1
|
-
unless defined?(::TestEventHandler)
|
2
|
-
class TestEventHandler
|
3
|
-
include Wonkavision::EventHandler
|
4
|
-
|
5
|
-
def self.knids
|
6
|
-
@@knids ||= []
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.callbacks
|
10
|
-
@@callbacks ||= []
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.reset
|
14
|
-
@@knids = []
|
15
|
-
@@callbacks = []
|
16
|
-
end
|
17
|
-
|
18
|
-
before_event :before
|
19
|
-
def before
|
20
|
-
TestEventHandler.callbacks << {:kind=>"before_event",:path=>event_context.path}
|
21
|
-
end
|
22
|
-
|
23
|
-
after_event do |handler|
|
24
|
-
TestEventHandler.callbacks << {:kind=>"after_event", :path=>handler.event_context.path}
|
25
|
-
end
|
26
|
-
|
27
|
-
event_namespace :vermicious
|
28
|
-
|
29
|
-
handle :knid do |data,path|
|
30
|
-
TestEventHandler.knids << [data,path]
|
31
|
-
end
|
32
|
-
|
33
|
-
#handle events in the vermicious namespace
|
34
|
-
handle "*" do |data,path|
|
35
|
-
TestEventHandler.knids << [data,path] if path !~ /.*knid/
|
36
|
-
end
|
37
|
-
|
38
|
-
#handle ALL events in any namespace
|
39
|
-
handle "/*" do |data,path|
|
40
|
-
TestEventHandler.knids << [data,path] if path !~ /^vermicious.*/
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
class TestBusinessActivity
|
46
|
-
include
|
47
|
-
|
48
|
-
acts_as_timeline
|
49
|
-
|
50
|
-
event_namespace :test
|
51
|
-
correlate_by :test_id
|
52
|
-
|
53
|
-
milestone :ms1, :evt1
|
54
|
-
milestone :ms2, :evt2
|
55
|
-
milestone :ms3, :evt3, '/not_test/evt4'
|
56
|
-
|
57
|
-
event :e1, :evt5, :correlate_by=>{:event=>:alt_event_id, :model=>:alt_model_id}
|
58
|
-
|
59
|
-
map /not_test\/.*/i do
|
60
|
-
import "evt4_test_map"
|
61
|
-
string 'modified_another_field'=> "'#{context["another_field"]}' WAS SERVED!! OH YEAH!! IN-YOUR-FACE!!"
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
Wonkavision::MessageMapper.register("evt4_test_map") do
|
68
|
-
string 'test_id'
|
69
|
-
date 'event_time'
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
1
|
+
unless defined?(::TestEventHandler)
|
2
|
+
class TestEventHandler
|
3
|
+
include Wonkavision::EventHandler
|
4
|
+
|
5
|
+
def self.knids
|
6
|
+
@@knids ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.callbacks
|
10
|
+
@@callbacks ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.reset
|
14
|
+
@@knids = []
|
15
|
+
@@callbacks = []
|
16
|
+
end
|
17
|
+
|
18
|
+
before_event :before
|
19
|
+
def before
|
20
|
+
TestEventHandler.callbacks << {:kind=>"before_event",:path=>event_context.path}
|
21
|
+
end
|
22
|
+
|
23
|
+
after_event do |handler|
|
24
|
+
TestEventHandler.callbacks << {:kind=>"after_event", :path=>handler.event_context.path}
|
25
|
+
end
|
26
|
+
|
27
|
+
event_namespace :vermicious
|
28
|
+
|
29
|
+
handle :knid do |data,path|
|
30
|
+
TestEventHandler.knids << [data,path]
|
31
|
+
end
|
32
|
+
|
33
|
+
#handle events in the vermicious namespace
|
34
|
+
handle "*" do |data,path|
|
35
|
+
TestEventHandler.knids << [data,path] if path !~ /.*knid/
|
36
|
+
end
|
37
|
+
|
38
|
+
#handle ALL events in any namespace
|
39
|
+
handle "/*" do |data,path|
|
40
|
+
TestEventHandler.knids << [data,path] if path !~ /^vermicious.*/
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class TestBusinessActivity
|
46
|
+
include Wonkavision::Mongoid::Activity
|
47
|
+
|
48
|
+
acts_as_timeline
|
49
|
+
|
50
|
+
event_namespace :test
|
51
|
+
correlate_by :test_id
|
52
|
+
|
53
|
+
milestone :ms1, :evt1
|
54
|
+
milestone :ms2, :evt2
|
55
|
+
milestone :ms3, :evt3, '/not_test/evt4'
|
56
|
+
|
57
|
+
event :e1, :evt5, :correlate_by=>{:event=>:alt_event_id, :model=>:alt_model_id}
|
58
|
+
|
59
|
+
map /not_test\/.*/i do
|
60
|
+
import "evt4_test_map"
|
61
|
+
string 'modified_another_field'=> "'#{context["another_field"]}' WAS SERVED!! OH YEAH!! IN-YOUR-FACE!!"
|
62
|
+
end
|
63
|
+
|
64
|
+
field :alt_model_id, :type=>String
|
65
|
+
end
|
66
|
+
|
67
|
+
Wonkavision::MessageMapper.register("evt4_test_map") do
|
68
|
+
string 'test_id'
|
69
|
+
date 'event_time'
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,63 +1,70 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
|
3
|
-
require "rubygems"
|
4
|
-
require
|
5
|
-
|
6
|
-
require "
|
7
|
-
|
8
|
-
|
9
|
-
require
|
10
|
-
|
11
|
-
dir = File.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require 'bundler'
|
5
|
+
Bundler.setup
|
6
|
+
require "mongoid"
|
7
|
+
require "erb"
|
8
|
+
require 'active_support/test_case'
|
9
|
+
require "shoulda"
|
10
|
+
|
11
|
+
dir = File.dirname(__FILE__)
|
12
|
+
require File.join(dir,"..","lib","wonkavision")
|
13
|
+
|
14
|
+
dir = File.expand_path(File.dirname(__FILE__))
|
15
|
+
logdir = File.join(dir,'log')
|
16
|
+
Dir.mkdir(logdir) unless File.directory?(logdir)
|
17
|
+
|
18
|
+
mcfg_file = File.join(dir,'config','database.yml')
|
19
|
+
msettings = YAML.load(ERB.new(File.new(mcfg_file).read).result)
|
20
|
+
|
21
|
+
Mongoid.configure do |config|
|
22
|
+
config.from_hash(msettings["test"])
|
23
|
+
config.logger = Logger.new(File.join(logdir,'test.log'))
|
24
|
+
end
|
25
|
+
|
26
|
+
module ActiveSupport
|
27
|
+
class TestCase
|
28
|
+
def setup
|
29
|
+
|
30
|
+
end
|
31
|
+
def teardown
|
32
|
+
Mongoid.master.collections.each do |coll|
|
33
|
+
coll.drop unless coll.name =~ /(.*\.)?system\..*/
|
34
|
+
end
|
35
|
+
Time.reset #Return Time.now to its original state
|
36
|
+
end
|
37
|
+
|
38
|
+
# Make sure that each test case has a teardown
|
39
|
+
# method to clear the db after each test.
|
40
|
+
def inherited(base)
|
41
|
+
base.define_method teardown do
|
42
|
+
super
|
43
|
+
end
|
44
|
+
base.define_method setup do
|
45
|
+
super
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
#This seems like an odd approach - why not just alias now, you ask
|
51
|
+
#well, I did, and for whatever reason, got stack overflows
|
52
|
+
#whenever I'd try to run the test suite. So...um...this doesn't
|
53
|
+
#overflow the stack, so it will do.
|
54
|
+
class Time
|
55
|
+
@@old_now = method(:now)
|
56
|
+
class << self
|
57
|
+
def now=(new_now)
|
58
|
+
@@new_now = new_now.to_time
|
59
|
+
def Time.now
|
60
|
+
@@new_now
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def reset
|
65
|
+
def Time.now
|
66
|
+
@@old_now.call
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/test/timeline_test.rb
CHANGED
@@ -1,61 +1,55 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
require "test_activity_models"
|
3
|
-
|
4
|
-
class TimelineTest < ActiveSupport::TestCase
|
5
|
-
context "TestBusinessActivity" do
|
6
|
-
should "create the appropriate keys" do
|
7
|
-
assert TestBusinessActivity.
|
8
|
-
assert TestBusinessActivity.
|
9
|
-
end
|
10
|
-
should "configure milestones from DSL" do
|
11
|
-
assert_equal 3, TestBusinessActivity.timeline_milestones.length
|
12
|
-
|
13
|
-
assert_equal :ms1, TestBusinessActivity.timeline_milestones[0].name
|
14
|
-
assert_equal "test/evt1", TestBusinessActivity.timeline_milestones[0].events[0]
|
15
|
-
|
16
|
-
assert_equal :ms2, TestBusinessActivity.timeline_milestones[1].name
|
17
|
-
assert_equal "test/evt2", TestBusinessActivity.timeline_milestones[1].events[0]
|
18
|
-
|
19
|
-
assert_equal :ms3, TestBusinessActivity.timeline_milestones[2].name
|
20
|
-
assert_equal "test/evt3", TestBusinessActivity.timeline_milestones[2].events[0]
|
21
|
-
assert_equal "/not_test/evt4", TestBusinessActivity.timeline_milestones[2].events[1]
|
22
|
-
end
|
23
|
-
should "subscribe to all milestone events" do
|
24
|
-
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt1").subscribers.length > 0
|
25
|
-
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt2").subscribers.length > 0
|
26
|
-
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt3").subscribers.length > 0
|
27
|
-
assert Wonkavision.event_coordinator.root_namespace.find_or_create("not_test/evt4").subscribers.length > 0
|
28
|
-
end
|
29
|
-
should "record appropriate milestone time and milestone upon relevant event being received" do
|
30
|
-
event = {"test_id"=>"123","event_time"=>"1/1/2001","another_field"=>"hi there"}
|
31
|
-
Wonkavision.event_coordinator.receive_event("test/evt1",event)
|
32
|
-
assert activity = TestBusinessActivity.
|
33
|
-
assert_equal "1/1/2001".to_time.utc,activity.timeline["ms1"]
|
34
|
-
assert_equal "hi there", activity.another_field
|
35
|
-
Wonkavision.event_coordinator.receive_event("test/evt2",event)
|
36
|
-
activity = activity.reload
|
37
|
-
assert_equal "1/1/2001".to_time.utc,activity.timeline["ms2"]
|
38
|
-
Wonkavision.event_coordinator.receive_event("test/evt3",event)
|
39
|
-
activity = activity.reload
|
40
|
-
assert_equal "1/1/2001".to_time.utc, activity.timeline["ms3"]
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
assert_equal "
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
assert_equal "
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
activity = activity.reload
|
57
|
-
assert_equal "1/1/2001 07:00".to_time.utc, activity.timeline["ms1"]
|
58
|
-
assert_equal "ms2", activity.latest_milestone
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
1
|
+
require "test_helper"
|
2
|
+
require "test_activity_models"
|
3
|
+
|
4
|
+
class TimelineTest < ActiveSupport::TestCase
|
5
|
+
context "TestBusinessActivity" do
|
6
|
+
should "create the appropriate keys" do
|
7
|
+
assert TestBusinessActivity.fields.keys.include?("timeline")
|
8
|
+
assert TestBusinessActivity.fields.keys.include?("latest_milestone")
|
9
|
+
end
|
10
|
+
should "configure milestones from DSL" do
|
11
|
+
assert_equal 3, TestBusinessActivity.timeline_milestones.length
|
12
|
+
|
13
|
+
assert_equal :ms1, TestBusinessActivity.timeline_milestones[0].name
|
14
|
+
assert_equal "test/evt1", TestBusinessActivity.timeline_milestones[0].events[0]
|
15
|
+
|
16
|
+
assert_equal :ms2, TestBusinessActivity.timeline_milestones[1].name
|
17
|
+
assert_equal "test/evt2", TestBusinessActivity.timeline_milestones[1].events[0]
|
18
|
+
|
19
|
+
assert_equal :ms3, TestBusinessActivity.timeline_milestones[2].name
|
20
|
+
assert_equal "test/evt3", TestBusinessActivity.timeline_milestones[2].events[0]
|
21
|
+
assert_equal "/not_test/evt4", TestBusinessActivity.timeline_milestones[2].events[1]
|
22
|
+
end
|
23
|
+
should "subscribe to all milestone events" do
|
24
|
+
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt1").subscribers.length > 0
|
25
|
+
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt2").subscribers.length > 0
|
26
|
+
assert Wonkavision.event_coordinator.root_namespace.find_or_create("test/evt3").subscribers.length > 0
|
27
|
+
assert Wonkavision.event_coordinator.root_namespace.find_or_create("not_test/evt4").subscribers.length > 0
|
28
|
+
end
|
29
|
+
should "record appropriate milestone time and milestone upon relevant event being received" do
|
30
|
+
event = {"test_id"=>"123","event_time"=>"1/1/2001","another_field"=>"hi there"}
|
31
|
+
Wonkavision.event_coordinator.receive_event("test/evt1",event)
|
32
|
+
assert activity = TestBusinessActivity.first(:conditions=>{:test_id=>"123"})
|
33
|
+
assert_equal "1/1/2001".to_time.utc,activity.timeline["ms1"]
|
34
|
+
assert_equal "hi there", activity.another_field
|
35
|
+
Wonkavision.event_coordinator.receive_event("test/evt2",event)
|
36
|
+
activity = activity.reload
|
37
|
+
assert_equal "1/1/2001".to_time.utc,activity.timeline["ms2"]
|
38
|
+
Wonkavision.event_coordinator.receive_event("test/evt3",event)
|
39
|
+
activity = activity.reload
|
40
|
+
assert_equal "1/1/2001".to_time.utc, activity.timeline["ms3"]
|
41
|
+
end
|
42
|
+
should "not overwrite latest_milestone when processing an event that occurred prior to the latest milestone event" do
|
43
|
+
event = {"test_id"=>"123","event_time"=>"1/1/2001 08:00"}
|
44
|
+
Wonkavision.event_coordinator.receive_event("test/evt2",event)
|
45
|
+
assert activity = TestBusinessActivity.first(:conditions=>{:test_id=>"123"})
|
46
|
+
assert_equal "1/1/2001 08:00".to_time.utc,activity.timeline["ms2"]
|
47
|
+
assert_equal "ms2", activity.latest_milestone
|
48
|
+
event = {"test_id"=>"123","event_time"=>"1/1/2001 07:00"}
|
49
|
+
Wonkavision.event_coordinator.receive_event("test/evt1",event)
|
50
|
+
activity = activity.reload
|
51
|
+
assert_equal "1/1/2001 07:00".to_time.utc, activity.timeline["ms1"]
|
52
|
+
assert_equal "ms2", activity.latest_milestone
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/test/wonkavision_test.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
class WonkavisionTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
context "Jumping into an experimental teleportation device built by a madman" do
|
6
|
-
should "wreak some kind of humerous havoc" do
|
7
|
-
assert_equal true, true
|
8
|
-
end
|
9
|
-
end
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class WonkavisionTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
context "Jumping into an experimental teleportation device built by a madman" do
|
6
|
+
should "wreak some kind of humerous havoc" do
|
7
|
+
assert_equal true, true
|
8
|
+
end
|
9
|
+
end
|
10
10
|
end
|