wonkavision 0.5.4 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/CHANGELOG.rdoc +28 -16
  2. data/Gemfile +5 -0
  3. data/LICENSE.txt +21 -21
  4. data/Rakefile +47 -47
  5. data/lib/wonkavision.rb +75 -74
  6. data/lib/wonkavision/acts_as_oompa_loompa.rb +22 -22
  7. data/lib/wonkavision/event_binding.rb +21 -21
  8. data/lib/wonkavision/event_context.rb +9 -9
  9. data/lib/wonkavision/event_coordinator.rb +75 -75
  10. data/lib/wonkavision/event_handler.rb +15 -15
  11. data/lib/wonkavision/event_namespace.rb +79 -79
  12. data/lib/wonkavision/event_path_segment.rb +35 -35
  13. data/lib/wonkavision/message_mapper.rb +30 -30
  14. data/lib/wonkavision/message_mapper/indifferent_access.rb +30 -26
  15. data/lib/wonkavision/message_mapper/map.rb +241 -153
  16. data/lib/wonkavision/persistence/mongo_mapper_adapter.rb +32 -32
  17. data/lib/wonkavision/persistence/mongoid_adapter.rb +32 -0
  18. data/lib/wonkavision/plugins.rb +30 -30
  19. data/lib/wonkavision/plugins/business_activity.rb +92 -92
  20. data/lib/wonkavision/plugins/business_activity/event_binding.rb +15 -15
  21. data/lib/wonkavision/plugins/callbacks.rb +182 -182
  22. data/lib/wonkavision/plugins/event_handling.rb +111 -111
  23. data/lib/wonkavision/plugins/timeline.rb +79 -79
  24. data/lib/wonkavision/version.rb +3 -3
  25. data/test/business_activity_test.rb +31 -31
  26. data/test/event_handler_test.rb +68 -69
  27. data/test/event_namespace_test.rb +108 -108
  28. data/test/event_path_segment_test.rb +41 -41
  29. data/test/log/test.log +817 -18354
  30. data/test/map_test.rb +315 -201
  31. data/test/message_mapper_test.rb +20 -20
  32. data/test/test_activity_models.rb +72 -72
  33. data/test/test_helper.rb +70 -63
  34. data/test/timeline_test.rb +55 -61
  35. data/test/wonkavision_test.rb +9 -9
  36. metadata +72 -12
  37. data/wonkavision.gemspec +0 -97
@@ -1,16 +1,28 @@
1
- ==0.5.4
2
- * Added ability to specify correlation_ids per event binding in addition to a global correlation specification, so
3
- certain messages can be correlated to the business activity using arbitrary event / model id pairs.
4
-
5
- ==0.5.3
6
- * Added 'array' expression to mapping DSL to allow for the easy mapping of collection of items from incoming messages
7
-
8
- == 0.5.2
9
- * Added callbacks to event handler, before_event and after_event. Refactored event handling hierarchy to be a little
10
- less functional and a little more object oriented.
11
-
12
- == 0.5.1
13
- * Ensure that subscriptions to an event namespace will only get notified once per incoming message
14
-
15
- == 0.5.0
16
- * Initial release
1
+ == 0.5.9
2
+ * Fixed indifferent access module to include delete in its indifferentness.
3
+
4
+ ==0.5.8
5
+ * Added Mongoid integration, changed tests to use Mongoid integration instead of MongoMapper integration.
6
+ * Split Date and Time directives in MessageMapper to be specific, instead of always converting to time
7
+ ==0.5.7
8
+ * Added robust text formatting to message mapper
9
+
10
+ ==0.5.5
11
+ * Changed 'map' to 'child' to avoid conflicts when serializing to JSON
12
+
13
+ ==0.5.4
14
+ * Added ability to specify correlation_ids per event binding in addition to a global correlation specification, so
15
+ certain messages can be correlated to the business activity using arbitrary event / model id pairs.
16
+
17
+ ==0.5.3
18
+ * Added 'array' expression to mapping DSL to allow for the easy mapping of collection of items from incoming messages
19
+
20
+ == 0.5.2
21
+ * Added callbacks to event handler, before_event and after_event. Refactored event handling hierarchy to be a little
22
+ less functional and a little more object oriented.
23
+
24
+ == 0.5.1
25
+ * Ensure that subscriptions to an event namespace will only get notified once per incoming message
26
+
27
+ == 0.5.0
28
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # Use `bundle install` in order to install these gems
2
+ # Use `bundle exec rake` in order to run the specs using the bundle
3
+ source "http://rubygems.org"
4
+ gemspec
5
+ gem "mongoid", :git=>"http://github.com/mongoid/mongoid.git"
@@ -1,22 +1,22 @@
1
- The MIT LICENSE
2
-
3
- Copyright (c) 2010 Nathan Stults
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
1
+ The MIT LICENSE
2
+
3
+ Copyright (c) 2010 Nathan Stults
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
22
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,48 +1,48 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'rake/testtask'
4
- require 'rake/rdoctask'
5
-
6
- begin
7
- require 'jeweler'
8
- require File.dirname(__FILE__) + "/lib/wonkavision/version"
9
-
10
- Jeweler::Tasks.new do |s|
11
- s.name = "wonkavision"
12
- s.version = Wonkavision::VERSION
13
- s.summary = "Simple Business Activity Monitoring"
14
- s.description = "Wonkavision is a small gem that allows you to publish"
15
- s.email = "hereiam@sonic.net"
16
- s.homepage = "http://github.com/PlasticLizard/wonkavision"
17
- s.authors = ["Nathan Stults"]
18
- s.has_rdoc = false #=>Should be true, someday
19
- s.extra_rdoc_files = ["README.rdoc", "LICENSE.txt"]
20
- s.files = FileList["[A-Z]*", "{bin,lib,test}/**/*"]
21
-
22
- s.add_dependency('activesupport', '>= 2.3')
23
-
24
- s.add_development_dependency('shoulda', '2.10.3')
25
- end
26
-
27
- Jeweler::GemcutterTasks.new
28
-
29
- rescue LoadError => ex
30
- puts "Jeweler not available. Install it for jeweler-related tasks with: sudo gem install jeweler"
31
-
32
- end
33
-
34
- Rake::TestTask.new do |t|
35
- t.libs << 'libs' << 'test'
36
- t.pattern = 'test/**/*_test.rb'
37
- t.verbose = false
38
- end
39
-
40
- Rake::RDocTask.new do |rdoc|
41
- rdoc.rdoc_dir = 'rdoc'
42
- rdoc.title = 'test'
43
- rdoc.options << '--line-numbers' << '--inline-source'
44
- rdoc.rdoc_files.include('README*')
45
- rdoc.rdoc_files.include('lib/**/*.rb')
46
- end
47
-
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ require File.dirname(__FILE__) + "/lib/wonkavision/version"
9
+
10
+ Jeweler::Tasks.new do |s|
11
+ s.name = "wonkavision"
12
+ s.version = Wonkavision::VERSION
13
+ s.summary = "Simple Business Activity Monitoring"
14
+ s.description = "Wonkavision is a small gem that allows you to publish"
15
+ s.email = "hereiam@sonic.net"
16
+ s.homepage = "http://github.com/PlasticLizard/wonkavision"
17
+ s.authors = ["Nathan Stults"]
18
+ s.has_rdoc = false #=>Should be true, someday
19
+ s.extra_rdoc_files = ["README.rdoc", "LICENSE.txt"]
20
+ s.files = FileList["[A-Z]*", "{bin,lib,test}/**/*"]
21
+
22
+ s.add_dependency('activesupport', '>= 2.3')
23
+
24
+ s.add_development_dependency('shoulda', '2.10.3')
25
+ end
26
+
27
+ Jeweler::GemcutterTasks.new
28
+
29
+ rescue LoadError => ex
30
+ puts "Jeweler not available. Install it for jeweler-related tasks with: sudo gem install jeweler"
31
+
32
+ end
33
+
34
+ Rake::TestTask.new do |t|
35
+ t.libs << 'libs' << 'test'
36
+ t.pattern = 'test/**/*_test.rb'
37
+ t.verbose = false
38
+ end
39
+
40
+ Rake::RDocTask.new do |rdoc|
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = 'test'
43
+ rdoc.options << '--line-numbers' << '--inline-source'
44
+ rdoc.rdoc_files.include('README*')
45
+ rdoc.rdoc_files.include('lib/**/*.rb')
46
+ end
47
+
48
48
  task :default => :test
@@ -1,74 +1,75 @@
1
- require "rubygems"
2
- require "active_support"
3
- require "active_support/hash_with_indifferent_access" unless defined?(HashWithIndifferentAccess)
4
-
5
- dir = File.dirname(__FILE__)
6
- ["support",
7
- "plugins",
8
- "event_path_segment",
9
- "event",
10
- "event_context",
11
- "event_namespace",
12
- "event_coordinator",
13
- "event_binding",
14
- "event_handler",
15
- "message_mapper/indifferent_access",
16
- "message_mapper/map",
17
- "message_mapper",
18
- "plugins/callbacks",
19
- "plugins/event_handling",
20
- "plugins/business_activity/event_binding",
21
- "plugins/business_activity",
22
- "plugins/timeline",
23
- "acts_as_oompa_loompa",
24
- "persistence/mongo_mapper_adapter"].each {|lib|require File.join(dir,'wonkavision',lib)}
25
-
26
- #require File.join(dir,"cubicle","mongo_mapper","aggregate_plugin") if defined?(MongoMapper::Document)
27
-
28
- module Wonkavision
29
-
30
- # def self.register_cubicle_directory(directory_path, recursive=true)
31
- # searcher = "#{recursive ? "*" : "**/*"}.rb"
32
- # Dir[File.join(directory_path,searcher)].each {|cubicle| require cubicle}
33
- # end
34
-
35
- class << self
36
-
37
- attr_accessor :event_path_separator
38
-
39
- def event_coordinator
40
- @event_coordinator ||= Wonkavision::EventCoordinator.new
41
- end
42
-
43
- def event_path_separator
44
- @event_path_separator ||= '/'
45
- end
46
-
47
- def namespace_wildcard_character
48
- @namespace_wildcard_character = "*"
49
- end
50
-
51
- def is_absolute_path(path)
52
- path.to_s[0..0] == event_path_separator
53
- end
54
-
55
- def normalize_event_path(event_path)
56
- event_path.to_s.split(event_path_separator).map{|s|s.underscore}.join(event_path_separator)
57
- end
58
-
59
- def join (*args)
60
- args.map!{|segment|normalize_event_path(segment)}
61
- args.reject{|segment|segment.blank?}.join(event_path_separator)
62
- end
63
-
64
- def split(event_path)
65
- event_path.split(event_path_separator)
66
- end
67
- end
68
-
69
- class WonkavisionError < StandardError #:nodoc:
70
- end
71
-
72
-
73
-
74
- end
1
+ require "rubygems"
2
+ require "active_support"
3
+ require "active_support/hash_with_indifferent_access" unless defined?(HashWithIndifferentAccess)
4
+
5
+ dir = File.dirname(__FILE__)
6
+ ["support",
7
+ "plugins",
8
+ "event_path_segment",
9
+ "event",
10
+ "event_context",
11
+ "event_namespace",
12
+ "event_coordinator",
13
+ "event_binding",
14
+ "event_handler",
15
+ "message_mapper/indifferent_access",
16
+ "message_mapper/map",
17
+ "message_mapper",
18
+ "plugins/callbacks",
19
+ "plugins/event_handling",
20
+ "plugins/business_activity/event_binding",
21
+ "plugins/business_activity",
22
+ "plugins/timeline",
23
+ "acts_as_oompa_loompa",
24
+ "persistence/mongo_mapper_adapter",
25
+ "persistence/mongoid_adapter"].each {|lib|require File.join(dir,'wonkavision',lib)}
26
+
27
+ #require File.join(dir,"cubicle","mongo_mapper","aggregate_plugin") if defined?(MongoMapper::Document)
28
+
29
+ module Wonkavision
30
+
31
+ # def self.register_cubicle_directory(directory_path, recursive=true)
32
+ # searcher = "#{recursive ? "*" : "**/*"}.rb"
33
+ # Dir[File.join(directory_path,searcher)].each {|cubicle| require cubicle}
34
+ # end
35
+
36
+ class << self
37
+
38
+ attr_accessor :event_path_separator
39
+
40
+ def event_coordinator
41
+ @event_coordinator ||= Wonkavision::EventCoordinator.new
42
+ end
43
+
44
+ def event_path_separator
45
+ @event_path_separator ||= '/'
46
+ end
47
+
48
+ def namespace_wildcard_character
49
+ @namespace_wildcard_character = "*"
50
+ end
51
+
52
+ def is_absolute_path(path)
53
+ path.to_s[0..0] == event_path_separator
54
+ end
55
+
56
+ def normalize_event_path(event_path)
57
+ event_path.to_s.split(event_path_separator).map{|s|s.underscore}.join(event_path_separator)
58
+ end
59
+
60
+ def join (*args)
61
+ args.map!{|segment|normalize_event_path(segment)}
62
+ args.reject{|segment|segment.blank?}.join(event_path_separator)
63
+ end
64
+
65
+ def split(event_path)
66
+ event_path.split(event_path_separator)
67
+ end
68
+ end
69
+
70
+ class WonkavisionError < StandardError #:nodoc:
71
+ end
72
+
73
+
74
+
75
+ end
@@ -1,22 +1,22 @@
1
- module Wonkavision
2
- module ActsAsOompaLoompa
3
-
4
- def acts_as_event_handler
5
- include Wonkavision::EventHandler
6
- end
7
-
8
- def acts_as_business_activity(opts={})
9
- acts_as_event_handler
10
- use Wonkavision::Plugins::BusinessActivity, opts
11
- end
12
-
13
- def acts_as_timeline(opts={})
14
- acts_as_business_activity(opts)
15
- use Wonkavision::Plugins::Timeline, opts
16
- end
17
-
18
- def acts_like_a_child(opts={})
19
- raise "I don't want to include any plugins!" if (1 + rand(10)) % 3 == 0
20
- end
21
- end
22
- end
1
+ module Wonkavision
2
+ module ActsAsOompaLoompa
3
+
4
+ def acts_as_event_handler
5
+ include Wonkavision::EventHandler
6
+ end
7
+
8
+ def acts_as_business_activity(opts={})
9
+ acts_as_event_handler
10
+ use Wonkavision::Plugins::BusinessActivity, opts
11
+ end
12
+
13
+ def acts_as_timeline(opts={})
14
+ acts_as_business_activity(opts)
15
+ use Wonkavision::Plugins::Timeline, opts
16
+ end
17
+
18
+ def acts_like_a_child(opts={})
19
+ raise "I don't want to include any plugins!" if (1 + rand(10)) % 3 == 0
20
+ end
21
+ end
22
+ end
@@ -1,22 +1,22 @@
1
- module Wonkavision
2
-
3
- class EventBinding
4
- attr_reader :name, :events, :options
5
-
6
- def initialize(name,handler,*args)
7
- args.flatten!
8
- @options = args.extract_options!
9
- @handler = handler
10
- @name = name
11
- @events = []
12
- args = [@name] if args.blank? || args.flatten.blank?
13
- @events = args.flatten.map{|evt_name|@handler.event_path(evt_name)}
14
- end
15
-
16
- def subscribe_to_events(&block)
17
- @events.each do |event|
18
- Wonkavision.event_coordinator.subscribe(event,&block)
19
- end
20
- end
21
- end
1
+ module Wonkavision
2
+
3
+ class EventBinding
4
+ attr_reader :name, :events, :options
5
+
6
+ def initialize(name,handler,*args)
7
+ args.flatten!
8
+ @options = args.extract_options!
9
+ @handler = handler
10
+ @name = name
11
+ @events = []
12
+ args = [@name] if args.blank? || args.flatten.blank?
13
+ @events = args.flatten.map{|evt_name|@handler.event_path(evt_name)}
14
+ end
15
+
16
+ def subscribe_to_events(&block)
17
+ @events.each do |event|
18
+ Wonkavision.event_coordinator.subscribe(event,&block)
19
+ end
20
+ end
21
+ end
22
22
  end
@@ -1,9 +1,9 @@
1
- module Wonkavision
2
- class EventContext
3
- attr_accessor :data, :path, :binding, :callback
4
-
5
- def initialize(data,path,binding,callback)
6
- @data, @path, @binding, @callback = data, path, binding, callback
7
- end
8
- end
9
- end
1
+ module Wonkavision
2
+ class EventContext
3
+ attr_accessor :data, :path, :binding, :callback
4
+
5
+ def initialize(data,path,binding,callback)
6
+ @data, @path, @binding, @callback = data, path, binding, callback
7
+ end
8
+ end
9
+ end