activemessaging 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/activemessaging.gemspec +14 -2
- data/lib/activemessaging.rb +4 -0
- data/lib/activemessaging/adapters/jms.rb +6 -3
- data/lib/activemessaging/adapters/stomp.rb +1 -1
- data/lib/activemessaging/railtie.rb +1 -1
- data/lib/generators/active_messaging/install/USAGE +21 -0
- data/lib/generators/active_messaging/install/install_generator.rb +34 -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 +27 -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
- metadata +16 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.9.0
|
data/activemessaging.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{activemessaging}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.9.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jon Tirsen", "Andrew Kuklewicz", "Olle Jonsson", "Sylvain Perez", "Cliff Moon", "Uwe Kubosch"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-12-05}
|
13
13
|
s.description = %q{ActiveMessaging is an attempt to bring the simplicity and elegance of rails development to the world of messaging. Messaging, (or event-driven architecture) is widely used for enterprise integration, with frameworks such as Java's JMS, and products such as ActiveMQ, Tibco, IBM MQSeries, etc. Now supporting Rails 3 as of version 0.8.0.}
|
14
14
|
s.email = %q{activemessaging-discuss@googlegroups.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -67,6 +67,18 @@ Gem::Specification.new do |s|
|
|
67
67
|
"lib/activemessaging/railtie.rb",
|
68
68
|
"lib/activemessaging/test_helper.rb",
|
69
69
|
"lib/activemessaging/trace_filter.rb",
|
70
|
+
"lib/generators/active_messaging/install/USAGE",
|
71
|
+
"lib/generators/active_messaging/install/install_generator.rb",
|
72
|
+
"lib/generators/active_messaging/install/templates/application_processor.rb",
|
73
|
+
"lib/generators/active_messaging/install/templates/broker.yml",
|
74
|
+
"lib/generators/active_messaging/install/templates/poller",
|
75
|
+
"lib/generators/active_messaging/install/templates/poller.rb",
|
76
|
+
"lib/generators/active_messaging/processor/USAGE",
|
77
|
+
"lib/generators/active_messaging/processor/processor_generator.rb",
|
78
|
+
"lib/generators/active_messaging/processor/templates/messaging.rb",
|
79
|
+
"lib/generators/active_messaging/processor/templates/processor.rb",
|
80
|
+
"lib/generators/active_messaging/processor/templates/processor_spec.rb",
|
81
|
+
"lib/generators/active_messaging/processor/templates/processor_test.rb",
|
70
82
|
"lib/tasks/start_consumers.rake",
|
71
83
|
"poller.rb",
|
72
84
|
"test/all_tests.rb",
|
data/lib/activemessaging.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
2
1
|
if defined?(JRUBY_VERSION)
|
3
2
|
#require 'java'
|
4
3
|
include Java
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
begin
|
6
|
+
java_import javax.naming.InitialContext
|
7
|
+
java_import javax.jms.MessageListener
|
8
|
+
rescue NameError
|
9
|
+
raise LoadError, "ActiveMessaging::Adapter::Jms needs Jave EE classes on the CLASSPATH"
|
10
|
+
end
|
8
11
|
|
9
12
|
module ActiveMessaging
|
10
13
|
module Adapters
|
@@ -20,7 +20,7 @@ module ActiveMessaging
|
|
20
20
|
cfg[:passcode] ||= ""
|
21
21
|
cfg[:host] ||= "localhost"
|
22
22
|
cfg[:port] ||= "61613"
|
23
|
-
cfg[:reliable] = cfg[:reliable].nil? ? TRUE : cfg[:reliable]
|
23
|
+
cfg[:reliable] = cfg[:reliable].nil? ? TRUE : cfg[:reliable]
|
24
24
|
cfg[:reconnectDelay] ||= 5
|
25
25
|
cfg[:clientId] ||= nil
|
26
26
|
|
@@ -11,7 +11,7 @@ module ActiveMessaging
|
|
11
11
|
|
12
12
|
if defined? Rails
|
13
13
|
ActiveMessaging.logger.info "ActiveMessaging: Rails available: Adding dispatcher prepare callback."
|
14
|
-
ActionDispatch::Callbacks.to_prepare
|
14
|
+
ActionDispatch::Callbacks.to_prepare do
|
15
15
|
ActiveMessaging.reload_activemessaging
|
16
16
|
end
|
17
17
|
end
|
@@ -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,34 @@
|
|
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_poller_rb
|
17
|
+
copy_file "poller.rb", "lib/#{poller_name}.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
def copy_broker_rb
|
21
|
+
copy_file "broker.yml", "config/broker.yml"
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_gems
|
25
|
+
gem("daemons")
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def change_application
|
30
|
+
application ' config.autoload_paths += %W(#{config.root}/app/processors)'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
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,27 @@
|
|
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
|
+
#Try to Load Merb
|
7
|
+
merb_init_file = File.expand_path(File.dirname(__FILE__)+'/../config/merb_init')
|
8
|
+
if File.exists? merb_init_file
|
9
|
+
require File.expand_path(File.dirname(__FILE__)+'/../config/boot')
|
10
|
+
#need this because of the CWD
|
11
|
+
Merb.root = MERB_ROOT
|
12
|
+
require merb_init_file
|
13
|
+
else
|
14
|
+
# Load Rails
|
15
|
+
RAILS_ROOT=File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
16
|
+
require File.join(RAILS_ROOT, 'config', 'boot')
|
17
|
+
require File.join(RAILS_ROOT, 'config', 'environment')
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'active_support'
|
21
|
+
require 'activemessaging'
|
22
|
+
|
23
|
+
# Load ActiveMessaging processors
|
24
|
+
#ActiveMessaging::load_processors
|
25
|
+
|
26
|
+
# Start it up!
|
27
|
+
ActiveMessaging::start
|
@@ -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
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
+
require 'activemessaging/test_helper'
|
3
|
+
require File.dirname(__FILE__) + '/../../app/processors/application_processor'
|
4
|
+
|
5
|
+
class <%= class_name %>ProcessorTest < Test::Unit::TestCase
|
6
|
+
include ActiveMessaging::TestHelper
|
7
|
+
|
8
|
+
def setup
|
9
|
+
load File.dirname(__FILE__) + "/../../app/processors/<%= file_name %>_processor.rb"
|
10
|
+
@processor = <%= class_name %>Processor.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@processor = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_<%= file_name %>_processor
|
18
|
+
@processor.on_message('Your test message here!')
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 9
|
9
|
+
- 0
|
10
|
+
version: 0.9.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jon Tirsen
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2011-
|
23
|
+
date: 2011-12-05 00:00:00 -05:00
|
24
24
|
default_executable:
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|
@@ -99,6 +99,18 @@ files:
|
|
99
99
|
- lib/activemessaging/railtie.rb
|
100
100
|
- lib/activemessaging/test_helper.rb
|
101
101
|
- lib/activemessaging/trace_filter.rb
|
102
|
+
- lib/generators/active_messaging/install/USAGE
|
103
|
+
- lib/generators/active_messaging/install/install_generator.rb
|
104
|
+
- lib/generators/active_messaging/install/templates/application_processor.rb
|
105
|
+
- lib/generators/active_messaging/install/templates/broker.yml
|
106
|
+
- lib/generators/active_messaging/install/templates/poller
|
107
|
+
- lib/generators/active_messaging/install/templates/poller.rb
|
108
|
+
- lib/generators/active_messaging/processor/USAGE
|
109
|
+
- lib/generators/active_messaging/processor/processor_generator.rb
|
110
|
+
- lib/generators/active_messaging/processor/templates/messaging.rb
|
111
|
+
- lib/generators/active_messaging/processor/templates/processor.rb
|
112
|
+
- lib/generators/active_messaging/processor/templates/processor_spec.rb
|
113
|
+
- lib/generators/active_messaging/processor/templates/processor_test.rb
|
102
114
|
- lib/tasks/start_consumers.rake
|
103
115
|
- poller.rb
|
104
116
|
- test/all_tests.rb
|