gz_activemessaging 0.13.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.
- checksums.yaml +15 -0
- data/.travis.yml +40 -0
- data/Appraisals +19 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +87 -0
- data/README.md +27 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/activemessaging.gemspec +137 -0
- data/gemfiles/activesupport23.gemfile +10 -0
- data/gemfiles/activesupport23.gemfile.lock +51 -0
- data/gemfiles/activesupport30.gemfile +11 -0
- data/gemfiles/activesupport30.gemfile.lock +53 -0
- data/gemfiles/activesupport31.gemfile +11 -0
- data/gemfiles/activesupport31.gemfile.lock +55 -0
- data/gemfiles/activesupport32.gemfile +10 -0
- data/gemfiles/activesupport32.gemfile.lock +55 -0
- data/generators/a13g_test_harness/a13g_test_harness_generator.rb +19 -0
- data/generators/a13g_test_harness/templates/active_messaging_test.rhtml +13 -0
- data/generators/a13g_test_harness/templates/active_messaging_test_controller.rb +29 -0
- data/generators/a13g_test_harness/templates/index.rhtml +17 -0
- data/generators/filter/USAGE +0 -0
- data/generators/filter/filter_generator.rb +19 -0
- data/generators/filter/templates/filter.rb +12 -0
- data/generators/filter/templates/filter_test.rb +28 -0
- data/generators/processor/USAGE +8 -0
- data/generators/processor/processor_generator.rb +31 -0
- data/generators/processor/templates/application_processor.rb +18 -0
- data/generators/processor/templates/broker.yml +140 -0
- data/generators/processor/templates/jruby_poller +117 -0
- data/generators/processor/templates/messaging.rb +12 -0
- data/generators/processor/templates/poller +25 -0
- data/generators/processor/templates/poller.rb +26 -0
- data/generators/processor/templates/processor.rb +8 -0
- data/generators/processor/templates/processor_test.rb +20 -0
- data/generators/tracer/USAGE +8 -0
- data/generators/tracer/templates/controller.rb +14 -0
- data/generators/tracer/templates/helper.rb +2 -0
- data/generators/tracer/templates/index.rhtml +4 -0
- data/generators/tracer/templates/layout.rhtml +16 -0
- data/generators/tracer/templates/trace_processor.rb +100 -0
- data/generators/tracer/tracer_generator.rb +25 -0
- data/init.rb +1 -0
- data/lib/activemessaging.rb +133 -0
- data/lib/activemessaging/adapter.rb +20 -0
- data/lib/activemessaging/adapters/amqp.rb +215 -0
- data/lib/activemessaging/adapters/asqs.rb +487 -0
- data/lib/activemessaging/adapters/base.rb +71 -0
- data/lib/activemessaging/adapters/beanstalk.rb +88 -0
- data/lib/activemessaging/adapters/jms.rb +243 -0
- data/lib/activemessaging/adapters/reliable_msg.rb +186 -0
- data/lib/activemessaging/adapters/stomp.rb +212 -0
- data/lib/activemessaging/adapters/synch.rb +95 -0
- data/lib/activemessaging/adapters/test.rb +137 -0
- data/lib/activemessaging/adapters/wmq.rb +193 -0
- data/lib/activemessaging/base_message.rb +28 -0
- data/lib/activemessaging/filter.rb +29 -0
- data/lib/activemessaging/gateway.rb +429 -0
- data/lib/activemessaging/message_sender.rb +30 -0
- data/lib/activemessaging/named_base.rb +54 -0
- data/lib/activemessaging/processor.rb +44 -0
- data/lib/activemessaging/railtie.rb +26 -0
- data/lib/activemessaging/test_helper.rb +189 -0
- data/lib/activemessaging/threaded_poller.rb +234 -0
- data/lib/activemessaging/trace_filter.rb +34 -0
- data/lib/generators/active_messaging/install/USAGE +21 -0
- data/lib/generators/active_messaging/install/install_generator.rb +39 -0
- data/lib/generators/active_messaging/install/templates/application_processor.rb +18 -0
- data/lib/generators/active_messaging/install/templates/broker.yml +139 -0
- data/lib/generators/active_messaging/install/templates/poller +24 -0
- data/lib/generators/active_messaging/install/templates/poller.rb +22 -0
- data/lib/generators/active_messaging/install/templates/threaded_poller +46 -0
- data/lib/generators/active_messaging/processor/USAGE +2 -0
- data/lib/generators/active_messaging/processor/processor_generator.rb +39 -0
- data/lib/generators/active_messaging/processor/templates/messaging.rb +12 -0
- data/lib/generators/active_messaging/processor/templates/processor.rb +8 -0
- data/lib/generators/active_messaging/processor/templates/processor_spec.rb +24 -0
- data/lib/generators/active_messaging/processor/templates/processor_test.rb +20 -0
- data/lib/tasks/start_consumers.rake +8 -0
- data/poller.rb +14 -0
- data/test/all_tests.rb +10 -0
- data/test/app/config/broker.yml +4 -0
- data/test/asqs_test.rb +125 -0
- data/test/config_test.rb +42 -0
- data/test/filter_test.rb +131 -0
- data/test/gateway_test.rb +220 -0
- data/test/jms_test.rb +64 -0
- data/test/reliable_msg_test.rb +83 -0
- data/test/stomp_test.rb +168 -0
- data/test/test_helper.rb +36 -0
- data/test/tracer_test.rb +57 -0
- metadata +202 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
class TraceFilter< ActiveMessaging::Filter
|
2
|
+
include ActiveMessaging::MessageSender
|
3
|
+
|
4
|
+
def initialize(options)
|
5
|
+
@queue = options[:queue]
|
6
|
+
TraceFilter.publishes_to @queue
|
7
|
+
end
|
8
|
+
|
9
|
+
def process message, routing
|
10
|
+
|
11
|
+
unless ( routing[:destination].name == @queue ) then
|
12
|
+
ActiveMessaging.logger.debug "Trace: direction = #{routing[:direction]} publisher=#{routing[:publisher]} queue=#{routing[:destination].name} @queue=#{@queue}"
|
13
|
+
if routing[:direction].to_sym==:outgoing then
|
14
|
+
"trace from outgoing"
|
15
|
+
publish @queue, "<sent>"+
|
16
|
+
"<from>#{routing[:publisher]}</from>" +
|
17
|
+
"<queue>#{routing[:destination].name}</queue>" +
|
18
|
+
"<message>#{message.body}</message>" +
|
19
|
+
"</sent>"
|
20
|
+
end
|
21
|
+
if routing[:direction].to_sym==:incoming then
|
22
|
+
"trace from incoming"
|
23
|
+
publish @queue, "<received>"+
|
24
|
+
"<by>#{routing[:receiver]}</by>" +
|
25
|
+
"<queue>#{routing[:destination].name}</queue>" +
|
26
|
+
"<message>#{message.body}</message>" +
|
27
|
+
"</received>"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Description:
|
2
|
+
Configures your application to use active messaging. The following files are installed:
|
3
|
+
1. config/broker.yml - Configures the broker that you will be using.
|
4
|
+
2. script/poller - This script will start/stop/run the process that will be polling your broker. The name of this file/process is configurable. See Usage below.
|
5
|
+
3. lib/poller.rb - The poller script will use this file to start up ActiveMesssaging
|
6
|
+
|
7
|
+
The generator will also create a app/processors directory and modify your application.rb so that app/processors is in the autoload path
|
8
|
+
|
9
|
+
Usage:
|
10
|
+
If you do not pass in an argument then the poller filename/process will be called poller. You can override this default by passing in the name that you want the file and process to be.
|
11
|
+
|
12
|
+
Examples:
|
13
|
+
rails g activemessaging:install
|
14
|
+
|
15
|
+
Installs activemessaging with the poller process named poller
|
16
|
+
|
17
|
+
rails g activemessaging:install POLLER_NAME
|
18
|
+
|
19
|
+
Installs activemessaging but allows you to customize the name of the poller
|
20
|
+
|
21
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ActiveMessaging
|
2
|
+
class InstallGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path("../templates", __FILE__)
|
4
|
+
|
5
|
+
argument :poller_name, :type => :string, :default => 'poller', :banner => 'poller_name'
|
6
|
+
|
7
|
+
def copy_application
|
8
|
+
copy_file "application_processor.rb", "app/processors/application_processor.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy_poller
|
12
|
+
template "poller", "script/#{poller_name}"
|
13
|
+
chmod("script/#{poller_name}", 0755)
|
14
|
+
end
|
15
|
+
|
16
|
+
def copy_threaded_poller
|
17
|
+
template "threaded_poller", "script/threaded_#{poller_name}"
|
18
|
+
chmod("script/threaded_#{poller_name}", 0755)
|
19
|
+
end
|
20
|
+
|
21
|
+
def copy_poller_rb
|
22
|
+
copy_file "poller.rb", "lib/#{poller_name}.rb"
|
23
|
+
end
|
24
|
+
|
25
|
+
def copy_broker_rb
|
26
|
+
copy_file "broker.yml", "config/broker.yml"
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_gems
|
30
|
+
gem("daemons")
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def change_application
|
35
|
+
application ' config.autoload_paths += %W(#{config.root}/app/processors)'
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ApplicationProcessor < ActiveMessaging::Processor
|
2
|
+
|
3
|
+
# Default on_error implementation - logs standard errors but keeps processing. Other exceptions are raised.
|
4
|
+
# Have on_error throw ActiveMessaging::AbortMessageException when you want a message to be aborted/rolled back,
|
5
|
+
# meaning that it can and should be retried (idempotency matters here).
|
6
|
+
# Retry logic varies by broker - see individual adapter code and docs for how it will be treated
|
7
|
+
def on_error(err)
|
8
|
+
if (err.kind_of?(StandardError))
|
9
|
+
logger.error "ApplicationProcessor::on_error: #{err.class.name} rescued:\n" + \
|
10
|
+
err.message + "\n" + \
|
11
|
+
"\t" + err.backtrace.join("\n\t")
|
12
|
+
else
|
13
|
+
logger.error "ApplicationProcessor::on_error: #{err.class.name} raised: " + err.message
|
14
|
+
raise err
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
#
|
2
|
+
# broker.yml
|
3
|
+
#
|
4
|
+
# Simple yaml file for the env specific configuration of the broker connections.
|
5
|
+
# See the wiki for more information: http://code.google.com/p/activemessaging/wiki/Configuration
|
6
|
+
#
|
7
|
+
development:
|
8
|
+
############################
|
9
|
+
# Stomp Adapter Properties #
|
10
|
+
############################
|
11
|
+
adapter: stomp
|
12
|
+
|
13
|
+
# properties below are all defaults for this adapter
|
14
|
+
# login: ""
|
15
|
+
# passcode: ""
|
16
|
+
# host: localhost
|
17
|
+
# port: 61613
|
18
|
+
# reliable: true
|
19
|
+
# reconnectDelay: 5
|
20
|
+
|
21
|
+
# NEW! enable stomp retry logic
|
22
|
+
# will resend errored out messages to be retried when on_error throws ActiveMessaging::AbortMessageException
|
23
|
+
#
|
24
|
+
# Max number of times to retry an aborted message, for 0, will not retry (default)
|
25
|
+
# retryMax: 0
|
26
|
+
#
|
27
|
+
# If error still occurs after retryMax, send message to specified dead letter queue
|
28
|
+
# deadLetterQueue: '/queue/activemessaging/deadletter'
|
29
|
+
|
30
|
+
|
31
|
+
###########################
|
32
|
+
# AMQP Adapter Properties #
|
33
|
+
###########################
|
34
|
+
# adapter: amqp
|
35
|
+
|
36
|
+
# properties below are defaults for this adapter
|
37
|
+
# host: localhost
|
38
|
+
# port: 5672
|
39
|
+
# user: guest
|
40
|
+
# pass: guest
|
41
|
+
# vhost: /
|
42
|
+
# ssl: false
|
43
|
+
# ssl_verify: 1
|
44
|
+
# debug: 0
|
45
|
+
# queue_name: <autogenerated>
|
46
|
+
# queue_durable: false if queue_name is autogenerated, defaults to true otherwise
|
47
|
+
# queue_auto_delete: true if queue_name is autogenerated, defaults to false otherwise
|
48
|
+
# queue_exclusive: true if queue_name is autogenerated, defaults to true otherwise
|
49
|
+
|
50
|
+
# SSL:
|
51
|
+
|
52
|
+
# in order to use SSL you will need to use the following fork of the carrot project:
|
53
|
+
#
|
54
|
+
# http://github.com/rabbitt/carrot
|
55
|
+
#
|
56
|
+
# If your certificate is self signed, you will want to set ssl_verify to 0 which corresponds to
|
57
|
+
# OpenSSL::SSL::VERIFY_NONE. Otherwise, it defaults to 1 (OpenSSL::SSL::VERIFY_PEER).
|
58
|
+
|
59
|
+
# QUEUE_*:
|
60
|
+
|
61
|
+
# queue_name is the name of the "inbox" queue that will be bound to all subscription keys (called queues
|
62
|
+
# or destinations here). In other words, you only have one queue where all messages end up using this
|
63
|
+
# adapter, and it is bound to the relevant exchanges using routing keys and exchange information
|
64
|
+
# you provide in your messages.rb and subscribes_to calls. For example,
|
65
|
+
#
|
66
|
+
# in messages.rb:
|
67
|
+
# s.queue :hello_world, 'hello.world', :exchange_type => :direct, :exchange_name => 'amq.direct'
|
68
|
+
#
|
69
|
+
# in a processor:
|
70
|
+
# subscribes_to :hello_world, :routing_key => 'hello.#'
|
71
|
+
#
|
72
|
+
# in a model:
|
73
|
+
# publish :hello_world, 'Hello world!', :routing_key => 'hello.world'
|
74
|
+
|
75
|
+
|
76
|
+
# Note: in the event that you don't specify a routing_key on publish, the queue_name of the specified
|
77
|
+
# destination (as listed in messages.rb) will be used as the routing_key when publishing.
|
78
|
+
|
79
|
+
################################
|
80
|
+
# Beanstalk Adapter Properties #
|
81
|
+
################################
|
82
|
+
# adapter: beanstalk
|
83
|
+
# host: localhost
|
84
|
+
|
85
|
+
## properties below are all defaults for this adapter
|
86
|
+
# port: 11300
|
87
|
+
|
88
|
+
|
89
|
+
#################################
|
90
|
+
# Amazon SQS Adapter Properties #
|
91
|
+
#################################
|
92
|
+
# adapter: asqs
|
93
|
+
# access_key_id: XXXXXXXXXXXXXXXXXXXX
|
94
|
+
# secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
95
|
+
|
96
|
+
## properties below are all defaults for this adapter
|
97
|
+
# host: queue.amazonaws.com
|
98
|
+
# port: 80
|
99
|
+
# reliable: true
|
100
|
+
# reconnectDelay: 5
|
101
|
+
# aws_version: 2006-04-01
|
102
|
+
# content_type: text/plain
|
103
|
+
# poll_interval: 1
|
104
|
+
# cache_queue_list: true
|
105
|
+
|
106
|
+
|
107
|
+
########################################
|
108
|
+
# ReliableMessaging Adapter Properties #
|
109
|
+
########################################
|
110
|
+
# adapter: reliable_msg
|
111
|
+
|
112
|
+
## properties below are all defaults for this adapter
|
113
|
+
# poll_interval: 1
|
114
|
+
# reliable: true
|
115
|
+
|
116
|
+
|
117
|
+
###################################
|
118
|
+
# Websphere MQ Adapter Properties #
|
119
|
+
###################################
|
120
|
+
# adapter: wmq
|
121
|
+
# q_mgr_name: ""
|
122
|
+
# poll_interval: .1
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
test:
|
127
|
+
adapter: test
|
128
|
+
reliable: false
|
129
|
+
|
130
|
+
production:
|
131
|
+
adapter: stomp
|
132
|
+
reliable: true
|
133
|
+
# properties below are all defaults for this adapter
|
134
|
+
# login: ""
|
135
|
+
# passcode: ""
|
136
|
+
# host: localhost
|
137
|
+
# port: 61613
|
138
|
+
# reliable: true
|
139
|
+
# reconnectDelay: 5
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
ENV['APP_ROOT'] ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
APP_ROOT = ENV['APP_ROOT']
|
5
|
+
script_file = File.join(APP_ROOT, 'lib', '<%=poller_name%>.rb')
|
6
|
+
tmp_dir = File.join(APP_ROOT, 'tmp')
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'daemons'
|
10
|
+
|
11
|
+
|
12
|
+
options = {
|
13
|
+
:app_name => "<%=poller_name%>",
|
14
|
+
:dir_mode => :normal,
|
15
|
+
:dir => tmp_dir,
|
16
|
+
:multiple => true,
|
17
|
+
:ontop => false,
|
18
|
+
:mode => :load,
|
19
|
+
:backtrace => true,
|
20
|
+
:monitor => true,
|
21
|
+
:log_output => true
|
22
|
+
}
|
23
|
+
|
24
|
+
Daemons.run(script_file,options)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Make sure stdout and stderr write out without delay for using with daemon like scripts
|
3
|
+
STDOUT.sync = true; STDOUT.flush
|
4
|
+
STDERR.sync = true; STDERR.flush
|
5
|
+
|
6
|
+
app_root = ENV['APP_ROOT'] || File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
7
|
+
application_file = File.join(app_root, 'config', 'environment.rb')
|
8
|
+
|
9
|
+
if File.exist?(application_file)
|
10
|
+
load application_file
|
11
|
+
else
|
12
|
+
raise "#{application_file} does not exist!"
|
13
|
+
end
|
14
|
+
|
15
|
+
Rails.logger = Logger.new(STDOUT)
|
16
|
+
ActiveMessaging.logger = Rails.logger
|
17
|
+
|
18
|
+
# Load ActiveMessaging
|
19
|
+
ActiveMessaging::load_processors
|
20
|
+
|
21
|
+
# Start it up!
|
22
|
+
ActiveMessaging::start
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# The threaded poller will use celluloid to generate many threads for a single poller process to handle messages
|
4
|
+
# Yes, I absolutely looked at the sidekiq manager code, and this code is very very similar
|
5
|
+
# This script also shows how to use the poller without loading Rails, though it loads the app lib directory
|
6
|
+
# this is tested on 1.9.3, and rails 3+
|
7
|
+
|
8
|
+
# Make sure stdout and stderr write out without delay for using with daemon like scripts
|
9
|
+
STDOUT.sync = true; STDOUT.flush
|
10
|
+
STDERR.sync = true; STDERR.flush
|
11
|
+
|
12
|
+
# we're not going to load rails, but activemessaging does expect there to be an app root
|
13
|
+
# this goes back to when it was used in both rails or merb, but work with just not loading a framework
|
14
|
+
app_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
15
|
+
ENV['APP_ROOT'] ||= app_root
|
16
|
+
|
17
|
+
# minimal requirements, other requires are in the lib
|
18
|
+
require 'rubygems'
|
19
|
+
require 'bundler/setup'
|
20
|
+
|
21
|
+
# load the app lib directory
|
22
|
+
lib_path = File.dirname("#{app_root}/lib")
|
23
|
+
$:.unshift(lib_path)
|
24
|
+
Dir["#{lib_path}/**/*.rb"].each {|file| require file unless file.match(/poller\.rb/) }
|
25
|
+
|
26
|
+
# require and load activemessaging
|
27
|
+
require 'activemessaging'
|
28
|
+
ActiveMessaging.load_activemessaging
|
29
|
+
require 'activemessaging/threaded_poller'
|
30
|
+
|
31
|
+
# configure the connection (there can be multiple defined in broker.yml) and number of threads
|
32
|
+
connection_name = 'default'
|
33
|
+
configuration = [{:pool_size => 3}]
|
34
|
+
|
35
|
+
# start it up!
|
36
|
+
begin
|
37
|
+
trap("TERM", "EXIT")
|
38
|
+
@poller = ActiveMessaging::ThreadedPoller.new(connection_name, configuration)
|
39
|
+
@poller.start!
|
40
|
+
sleep
|
41
|
+
rescue Interrupt
|
42
|
+
puts "-- Interrupt --"
|
43
|
+
@poller.stop!
|
44
|
+
@poller.wait(:shutdown)
|
45
|
+
exit(0)
|
46
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ActiveMessaging
|
2
|
+
class ProcessorGenerator < Rails::Generators::NamedBase
|
3
|
+
# namespace "activemessaging"
|
4
|
+
source_root File.expand_path("../templates", __FILE__)
|
5
|
+
|
6
|
+
# check_class_collision :suffix=>"Processor"
|
7
|
+
|
8
|
+
def copy_processor
|
9
|
+
template "processor.rb", "app/processors/#{file_name}_processor.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
def copy_messaging
|
13
|
+
template "messaging.rb", "config/messaging.rb"
|
14
|
+
end
|
15
|
+
|
16
|
+
hook_for :test_framework, :as => :active_messaging_processor
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module TestUnit
|
22
|
+
class ActiveMessagingProcessor < Rails::Generators::NamedBase
|
23
|
+
source_root File.expand_path("../templates", __FILE__)
|
24
|
+
|
25
|
+
def copy_processor
|
26
|
+
template "processor_test.rb", "test/functional/#{file_name}_processor_test.rb"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module Rspec
|
32
|
+
class ActiveMessagingProcessor < Rails::Generators::NamedBase
|
33
|
+
source_root File.expand_path("../templates", __FILE__)
|
34
|
+
|
35
|
+
def copy_processor
|
36
|
+
template "processor_spec.rb", "spec/functional/#{file_name}_processor_spec.rb"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#
|
2
|
+
# Add your destination definitions here
|
3
|
+
# can also be used to configure filters, and processor groups
|
4
|
+
#
|
5
|
+
ActiveMessaging::Gateway.define do |s|
|
6
|
+
#s.destination :orders, '/queue/Orders'
|
7
|
+
#s.filter :some_filter, :only=>:orders
|
8
|
+
#s.processor_group :group1, :order_processor
|
9
|
+
|
10
|
+
s.destination :<%= singular_name %>, '/queue/<%= class_name %>'
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'activemessaging/test_helper'
|
3
|
+
require File.dirname(__FILE__) + '/../../app/processors/application_processor'
|
4
|
+
|
5
|
+
describe <%= class_name %>Processor do
|
6
|
+
|
7
|
+
include ActiveMessaging::TestHelper
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
load File.dirname(__FILE__) + "/../../app/processors/<%= file_name %>_processor.rb"
|
11
|
+
@processor = <%= class_name %>Processor.new
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
@processor = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should receive message" do
|
19
|
+
@processor.on_message('Your test message here!')
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
end
|