eventbus 0.0.20

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.
Files changed (110) hide show
  1. data/admin/Gemfile +50 -0
  2. data/admin/Gemfile.lock +141 -0
  3. data/admin/Rakefile +7 -0
  4. data/admin/app/assets/images/rails.png +0 -0
  5. data/admin/app/assets/javascripts/application.js +15 -0
  6. data/admin/app/assets/javascripts/applications.js.coffee +3 -0
  7. data/admin/app/assets/javascripts/message_routes.js.coffee +3 -0
  8. data/admin/app/assets/javascripts/message_types.js.coffee +3 -0
  9. data/admin/app/assets/javascripts/messages.js.coffee +3 -0
  10. data/admin/app/assets/stylesheets/application.css +13 -0
  11. data/admin/app/assets/stylesheets/applications.css.scss +3 -0
  12. data/admin/app/assets/stylesheets/global.css.scss +72 -0
  13. data/admin/app/assets/stylesheets/message_routes.css.scss +3 -0
  14. data/admin/app/assets/stylesheets/message_types.css.scss +3 -0
  15. data/admin/app/assets/stylesheets/messages.css.scss +30 -0
  16. data/admin/app/assets/stylesheets/scaffolds.css.scss +56 -0
  17. data/admin/app/controllers/application_controller.rb +3 -0
  18. data/admin/app/controllers/applications_controller.rb +83 -0
  19. data/admin/app/controllers/message_routes_controller.rb +85 -0
  20. data/admin/app/controllers/message_types_controller.rb +83 -0
  21. data/admin/app/controllers/messages_controller.rb +75 -0
  22. data/admin/app/helpers/application_helper.rb +2 -0
  23. data/admin/app/helpers/applications_helper.rb +2 -0
  24. data/admin/app/helpers/message_routes_helper.rb +2 -0
  25. data/admin/app/helpers/message_types_helper.rb +2 -0
  26. data/admin/app/helpers/messages_helper.rb +2 -0
  27. data/admin/app/models/application.rb +7 -0
  28. data/admin/app/models/message.rb +4 -0
  29. data/admin/app/models/message_route.rb +5 -0
  30. data/admin/app/models/message_type.rb +7 -0
  31. data/admin/app/views/applications/_form.html.haml +27 -0
  32. data/admin/app/views/applications/edit.html.haml +5 -0
  33. data/admin/app/views/applications/index.html.haml +28 -0
  34. data/admin/app/views/applications/new.html.haml +3 -0
  35. data/admin/app/views/applications/show.html.haml +16 -0
  36. data/admin/app/views/layouts/application.html.haml +24 -0
  37. data/admin/app/views/message_routes/_form.html.haml +31 -0
  38. data/admin/app/views/message_routes/edit.html.haml +5 -0
  39. data/admin/app/views/message_routes/index.html.haml +28 -0
  40. data/admin/app/views/message_routes/new.html.haml +3 -0
  41. data/admin/app/views/message_routes/show.html.haml +16 -0
  42. data/admin/app/views/message_types/_form.html.haml +29 -0
  43. data/admin/app/views/message_types/edit.html.haml +5 -0
  44. data/admin/app/views/message_types/index.html.haml +28 -0
  45. data/admin/app/views/message_types/new.html.haml +5 -0
  46. data/admin/app/views/message_types/show.html.haml +17 -0
  47. data/admin/app/views/messages/index.html.haml +48 -0
  48. data/admin/app/views/messages/show.html.haml +45 -0
  49. data/admin/config/application.rb +64 -0
  50. data/admin/config/boot.rb +6 -0
  51. data/admin/config/database.yml +29 -0
  52. data/admin/config/environment.rb +5 -0
  53. data/admin/config/environments/development.rb +37 -0
  54. data/admin/config/environments/production.rb +72 -0
  55. data/admin/config/environments/test.rb +37 -0
  56. data/admin/config/initializers/backtrace_silencers.rb +7 -0
  57. data/admin/config/initializers/inflections.rb +15 -0
  58. data/admin/config/initializers/mime_types.rb +5 -0
  59. data/admin/config/initializers/secret_token.rb +7 -0
  60. data/admin/config/initializers/session_store.rb +8 -0
  61. data/admin/config/initializers/wrap_parameters.rb +14 -0
  62. data/admin/config/locales/en.yml +5 -0
  63. data/admin/config/routes.rb +69 -0
  64. data/admin/config.ru +4 -0
  65. data/admin/db/development.sqlite3-journal +0 -0
  66. data/admin/db/migrate/20120218124300_create_messages.rb +16 -0
  67. data/admin/db/migrate/20120219021535_create_applications.rb +11 -0
  68. data/admin/db/migrate/20120219021806_create_message_types.rb +13 -0
  69. data/admin/db/migrate/20120219021940_create_message_routes.rb +13 -0
  70. data/admin/db/migrate/20120411001040_add_app_id_key_msg_type_id_to_messages.rb +7 -0
  71. data/admin/db/migrate/20120411001823_rename_message_type_to_message_type_name_in_messages.rb +5 -0
  72. data/admin/db/migrate/20120413024953_add_message_guid_to_messages.rb +5 -0
  73. data/admin/db/migrate/20120523112257_add_match_all_errors_to_routes.rb +5 -0
  74. data/admin/db/schema.rb +68 -0
  75. data/admin/db/seeds.rb +7 -0
  76. data/admin/doc/README_FOR_APP +2 -0
  77. data/admin/public/404.html +26 -0
  78. data/admin/public/422.html +26 -0
  79. data/admin/public/500.html +25 -0
  80. data/admin/public/favicon.ico +0 -0
  81. data/admin/public/robots.txt +5 -0
  82. data/admin/script/rails +6 -0
  83. data/admin/script/railsrunner +3 -0
  84. data/admin/test/fixtures/applications.yml +14 -0
  85. data/admin/test/fixtures/message_routes.yml +11 -0
  86. data/admin/test/fixtures/message_types.yml +17 -0
  87. data/admin/test/fixtures/messages.yml +45 -0
  88. data/admin/test/functional/applications_controller_test.rb +49 -0
  89. data/admin/test/functional/message_routes_controller_test.rb +49 -0
  90. data/admin/test/functional/message_types_controller_test.rb +49 -0
  91. data/admin/test/functional/messages_controller_test.rb +49 -0
  92. data/admin/test/performance/browsing_test.rb +12 -0
  93. data/admin/test/test_helper.rb +13 -0
  94. data/admin/test/unit/application_test.rb +7 -0
  95. data/admin/test/unit/helpers/applications_helper_test.rb +4 -0
  96. data/admin/test/unit/helpers/message_routes_helper_test.rb +4 -0
  97. data/admin/test/unit/helpers/message_types_helper_test.rb +4 -0
  98. data/admin/test/unit/helpers/messages_helper_test.rb +4 -0
  99. data/admin/test/unit/message_route_test.rb +7 -0
  100. data/admin/test/unit/message_test.rb +7 -0
  101. data/admin/test/unit/message_type_test.rb +7 -0
  102. data/bin/eventbus_dispatcher.rb +118 -0
  103. data/bin/eventbus_emailer.rb +41 -0
  104. data/lib/eventbus/connectors/amqp.rb +70 -0
  105. data/lib/eventbus/connectors/bunny.rb +71 -0
  106. data/lib/eventbus/connectors/stomp.rb +77 -0
  107. data/lib/eventbus/message.rb +180 -0
  108. data/lib/eventbus/queue.rb +28 -0
  109. data/lib/eventbus/service.rb +116 -0
  110. metadata +188 -0
@@ -0,0 +1,180 @@
1
+ require 'rubygems'
2
+ require 'bunny'
3
+ require 'yaml'
4
+ require 'uuid'
5
+ require 'eventbus/queue'
6
+
7
+ module EventBus
8
+
9
+ class Message
10
+
11
+ attr_reader :data
12
+
13
+ def initialize(application_id)
14
+
15
+ raise "No application ID specified!" if application_id.nil?
16
+
17
+ @data = {
18
+ :HEADER => {
19
+ :message_id => UUID.new.generate.to_s,
20
+ :message_type => self.default_section_name,
21
+ :status => "BEGIN",
22
+ :application_id => application_id
23
+ },
24
+ :ERROR_INFO => {
25
+ :is_error => false,
26
+ :backtrace => nil,
27
+ :message => nil
28
+ },
29
+ :PAYLOAD => {}
30
+ }
31
+
32
+ @connection_driver = ENV["EVENTBUS_CONNECTOR"] || "Bunny"
33
+
34
+ driver_module = "#{@connection_driver}ConnectionDriver"
35
+
36
+ require_relative "connectors/#{@connection_driver.downcase}"
37
+
38
+ # Eh, pretty much just swiped from ActiveSupport "constantize"..
39
+ conn_module = Object.const_defined?(driver_module) ? Object.const_get(driver_module) : Object.const_missing(driver_module)
40
+
41
+ extend conn_module
42
+
43
+ connection_driver_initialize
44
+
45
+ end
46
+
47
+
48
+ def set(key, val, opts = {})
49
+
50
+ raise "You must specify a key name!" if key.nil?
51
+ section = opts.delete(:section) || self.default_section_name
52
+
53
+ @data[:PAYLOAD][section] = {} if @data[:PAYLOAD][section].nil?
54
+ @data[:PAYLOAD][section][key] = val
55
+ end
56
+
57
+ def get(key, opts = {})
58
+ raise "You must specify a key name!" if key.nil?
59
+ section = opts.delete(:section) || self.default_section_name
60
+
61
+ return @data[:PAYLOAD][section].nil? ? nil : @data[:PAYLOAD][section][key]
62
+ end
63
+
64
+ # opts:
65
+ # :queue_name -- the base queue name to receive the message. Defaults to "dispatcher"
66
+ # :global_queue -- Do not prepend the application ID and do not append the environment
67
+ # :system_queue -- Do not prepend the application ID to the queue_name
68
+ #
69
+ # Normally a queue name is calculated to be: applicationid.queue_name.environment
70
+ # so that eventbus can handle multiple applications on the same eventbus instance, and
71
+ # multiple environment-scoped eventbuses on the same broker. By applying :global_queue
72
+ # or :system_queue, you are breaking that scoping to some degree. Maybe that's what you want,
73
+ # but be careful or you might get cross-talk between applications or environments!
74
+ def send(opts = {})
75
+
76
+ queue_name = opts.delete(:queue_name)
77
+
78
+ if queue_name.nil?
79
+ queue_name = "dispatcher"
80
+ opts[:system_queue] = true
81
+ end
82
+
83
+ opts[:queue_name] = Queue.calc_name(queue_name, application_id, ENV['PROD_LEVEL'], opts)
84
+
85
+ puts "Sending message to: #{opts[:queue_name]}"
86
+
87
+ set_special(:HEADER, :sender, $0)
88
+ send_raw self.dump, opts
89
+ end
90
+
91
+ def set_error(exception)
92
+ @data[:ERROR_INFO][:backtrace] = exception.backtrace
93
+ @data[:ERROR_INFO][:message] = exception.to_s
94
+ self.is_error = true
95
+ self.status = exception.class.name
96
+ end
97
+
98
+ def dump
99
+ YAML::dump(@data)
100
+ end
101
+
102
+ def load(yaml)
103
+ @data = YAML::load(yaml)
104
+ end
105
+
106
+ def application_id
107
+ return get_special(:HEADER, :application_id)
108
+ end
109
+
110
+ def message_id
111
+ return get_special(:HEADER, :message_id)
112
+ end
113
+
114
+ def message_type
115
+ return get_special(:HEADER, :message_type)
116
+ end
117
+
118
+ def message_type=(val)
119
+ set_special(:HEADER, :message_type, val)
120
+ end
121
+
122
+ def status
123
+ return get_special(:HEADER, :status)
124
+ end
125
+
126
+ def status=(val)
127
+ set_special(:HEADER, :status, val)
128
+ end
129
+
130
+ def error_message
131
+ get_special(:ERROR_INFO, :message)
132
+ end
133
+
134
+ def error_message=(val)
135
+ set_special(:ERROR_INFO, :message, val)
136
+ end
137
+
138
+ def is_error
139
+ get_special(:ERROR_INFO, :is_error)
140
+ end
141
+
142
+ def is_error=(val)
143
+ set_special(:ERROR_INFO, :is_error, val)
144
+ end
145
+
146
+ def backtrace
147
+ return get_special(:ERROR_INFO, :backtrace)
148
+ end
149
+
150
+ def backtrace=(val)
151
+ set_special(:ERROR_INFO, :backtrace, val)
152
+ end
153
+
154
+ def clear_error_info
155
+ self.is_error = false
156
+ self.backtrace = []
157
+ self.error_message = nil
158
+ end
159
+
160
+ def default_section_name
161
+ return self.class.name.split(/::/).last
162
+ end
163
+
164
+ private
165
+
166
+
167
+
168
+ def set_special(block, key, val)
169
+ @data[block][key] = val
170
+ end
171
+
172
+ def get_special(block, key)
173
+ return @data[block][key]
174
+ end
175
+
176
+ end
177
+
178
+ end # module EventBus
179
+
180
+
@@ -0,0 +1,28 @@
1
+ module EventBus
2
+
3
+ class Queue
4
+
5
+ def Queue.calc_name(base_name, application_id = "core", prod_level = ENV['PROD_LEVEL'], opts = {})
6
+
7
+ global_queue = opts.delete(:global_queue) || false
8
+ system_queue = opts.delete(:system_queue) || false
9
+
10
+ raise "application_id not set!" if application_id.nil?
11
+ raise "prod_level not set!" if prod_level.nil?
12
+
13
+ application_id = application_id.downcase
14
+ prod_level = prod_level.downcase
15
+
16
+ queue_name = base_name
17
+ unless global_queue == true
18
+ queue_name = "#{queue_name}.#{prod_level}"
19
+ queue_name = "#{application_id}.#{queue_name}" unless system_queue
20
+ end
21
+
22
+ puts "Calculated queue name: #{queue_name}"
23
+ return queue_name
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,116 @@
1
+ require 'bunny'
2
+ require 'logger'
3
+ require 'eventbus/queue'
4
+
5
+ module EventBus
6
+ class Service
7
+
8
+ attr_accessor :listen_queue
9
+ attr_accessor :system_process
10
+ attr_accessor :global_process
11
+ attr_accessor :logger
12
+
13
+ # Methods expected to be overridden in subclasses
14
+ def handle_exception(message, exception)
15
+ # Just a hook that can be overridden in the subclass. Framework base behavior is in handle_exception_base.
16
+ # It does not need to be overridden, but can provide some custom behaviors.
17
+ end
18
+
19
+ # process_message is the main business-logic entry point for the subclass. Subclasses _MUST_ override this.
20
+ def process_message(message)
21
+ raise "You need to override the 'process_message' method in your subclass!"
22
+ end
23
+
24
+
25
+ def initialize(application_id = nil)
26
+ @listen_queue = self.class.name
27
+ @application_id = application_id || raise("No application ID specified!")
28
+ @logger = Logger.new(STDOUT)
29
+ @system_process = false
30
+ @global_process = false
31
+
32
+ @connection_driver = ENV["EVENTBUS_CONNECTOR"] || "Stomp"
33
+
34
+ driver_module = "#{@connection_driver}ConnectionDriver"
35
+
36
+ require_relative "connectors/#{@connection_driver.downcase}"
37
+
38
+ # Pretty much just swiped from ActiveSupport "constantize"..
39
+ conn_module = Object.const_defined?(driver_module) ? Object.const_get(driver_module) : Object.const_missing(driver_module)
40
+
41
+ extend conn_module
42
+
43
+ connection_driver_initialize
44
+
45
+ end
46
+
47
+
48
+ def start ( opts = {} )
49
+
50
+ max_workers = opts.delete(:max_workers) || 5
51
+
52
+ opts[:system_queue] = @system_process
53
+ opts[:global_process] = @global_process
54
+
55
+ queue_name = Queue.calc_name(listen_queue, @application_id, ENV['PROD_LEVEL'], opts)
56
+
57
+ watch_queue(queue_name) do |message|
58
+
59
+ # The +2 stuff is because the main thread counts in the list, even though it's not a "worker" thread.
60
+ # What makes it worse is that, depending on the broker connector, watch_queue may also start a thread.
61
+ # With this implementation, that extra thread (e.g. with the stomp connector) would count in this.
62
+ # Bottom line is allow a little wiggle room with the :max_workers. Don't tighten down the threads too much
63
+ # for now.
64
+ while (Thread.list.length >= max_workers + 2) do
65
+ sleep 0.25
66
+ end
67
+
68
+ Thread.new do
69
+ process_message_wrapper message
70
+ end
71
+
72
+ end
73
+
74
+ # Just sleep in the main thread. Nothing going on here anymore.
75
+ loop do
76
+ sleep 6000
77
+ end
78
+
79
+ end
80
+
81
+ private
82
+
83
+ def process_message_wrapper(message)
84
+
85
+ begin
86
+ puts "Beginning processing of message in new thread:"
87
+ puts message
88
+
89
+ process_message message
90
+ rescue
91
+ handle_exception_base message, $!
92
+ end
93
+
94
+ end
95
+
96
+ def handle_exception_base(message, exception)
97
+ puts "Caught exception. Exception Text: #{exception}"
98
+ puts "Backtrace:"
99
+ exception.backtrace.map { | frame | puts "- #{frame}"}
100
+
101
+ msg = EventBus::Message.new("CORE")
102
+ msg.load(message)
103
+ msg.set_error exception
104
+
105
+ self.handle_exception(msg, exception)
106
+
107
+ msg.send
108
+ end
109
+
110
+ def puts(message)
111
+ @logger.info message
112
+ end
113
+
114
+ end
115
+
116
+ end # module EventBus
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eventbus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.20
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Devin Cognito
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bunny
16
+ requirement: &6119720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *6119720
25
+ - !ruby/object:Gem::Dependency
26
+ name: uuid
27
+ requirement: &6119160 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *6119160
36
+ - !ruby/object:Gem::Dependency
37
+ name: rails
38
+ requirement: &6118600 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *6118600
47
+ description: Distributed application framework for developing event-driven automations.
48
+ email: dev.incognito@gmail.com
49
+ executables:
50
+ - eventbus_dispatcher.rb
51
+ - eventbus_emailer.rb
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - bin/eventbus_dispatcher.rb
56
+ - bin/eventbus_emailer.rb
57
+ - lib/eventbus/message.rb
58
+ - lib/eventbus/service.rb
59
+ - lib/eventbus/queue.rb
60
+ - lib/eventbus/connectors/stomp.rb
61
+ - lib/eventbus/connectors/bunny.rb
62
+ - lib/eventbus/connectors/amqp.rb
63
+ - admin/app/models/message.rb
64
+ - admin/app/models/application.rb
65
+ - admin/app/models/message_route.rb
66
+ - admin/app/models/message_type.rb
67
+ - admin/app/views/messages/index.html.haml
68
+ - admin/app/views/messages/show.html.haml
69
+ - admin/app/views/layouts/application.html.haml
70
+ - admin/app/views/message_types/index.html.haml
71
+ - admin/app/views/message_types/edit.html.haml
72
+ - admin/app/views/message_types/show.html.haml
73
+ - admin/app/views/message_types/new.html.haml
74
+ - admin/app/views/message_types/_form.html.haml
75
+ - admin/app/views/message_routes/index.html.haml
76
+ - admin/app/views/message_routes/edit.html.haml
77
+ - admin/app/views/message_routes/show.html.haml
78
+ - admin/app/views/message_routes/new.html.haml
79
+ - admin/app/views/message_routes/_form.html.haml
80
+ - admin/app/views/applications/index.html.haml
81
+ - admin/app/views/applications/edit.html.haml
82
+ - admin/app/views/applications/show.html.haml
83
+ - admin/app/views/applications/new.html.haml
84
+ - admin/app/views/applications/_form.html.haml
85
+ - admin/app/assets/stylesheets/global.css.scss
86
+ - admin/app/assets/stylesheets/application.css
87
+ - admin/app/assets/stylesheets/applications.css.scss
88
+ - admin/app/assets/stylesheets/messages.css.scss
89
+ - admin/app/assets/stylesheets/message_types.css.scss
90
+ - admin/app/assets/stylesheets/message_routes.css.scss
91
+ - admin/app/assets/stylesheets/scaffolds.css.scss
92
+ - admin/app/assets/images/rails.png
93
+ - admin/app/assets/javascripts/message_routes.js.coffee
94
+ - admin/app/assets/javascripts/applications.js.coffee
95
+ - admin/app/assets/javascripts/message_types.js.coffee
96
+ - admin/app/assets/javascripts/messages.js.coffee
97
+ - admin/app/assets/javascripts/application.js
98
+ - admin/app/controllers/message_types_controller.rb
99
+ - admin/app/controllers/applications_controller.rb
100
+ - admin/app/controllers/message_routes_controller.rb
101
+ - admin/app/controllers/application_controller.rb
102
+ - admin/app/controllers/messages_controller.rb
103
+ - admin/app/helpers/messages_helper.rb
104
+ - admin/app/helpers/applications_helper.rb
105
+ - admin/app/helpers/message_types_helper.rb
106
+ - admin/app/helpers/message_routes_helper.rb
107
+ - admin/app/helpers/application_helper.rb
108
+ - admin/doc/README_FOR_APP
109
+ - admin/config/routes.rb
110
+ - admin/config/application.rb
111
+ - admin/config/initializers/secret_token.rb
112
+ - admin/config/initializers/wrap_parameters.rb
113
+ - admin/config/initializers/backtrace_silencers.rb
114
+ - admin/config/initializers/mime_types.rb
115
+ - admin/config/initializers/inflections.rb
116
+ - admin/config/initializers/session_store.rb
117
+ - admin/config/boot.rb
118
+ - admin/config/environments/production.rb
119
+ - admin/config/environments/test.rb
120
+ - admin/config/environments/development.rb
121
+ - admin/config/locales/en.yml
122
+ - admin/config/environment.rb
123
+ - admin/config/database.yml
124
+ - admin/Gemfile
125
+ - admin/Gemfile.lock
126
+ - admin/public/robots.txt
127
+ - admin/public/500.html
128
+ - admin/public/favicon.ico
129
+ - admin/public/404.html
130
+ - admin/public/422.html
131
+ - admin/db/seeds.rb
132
+ - admin/db/schema.rb
133
+ - admin/db/development.sqlite3-journal
134
+ - admin/db/migrate/20120411001823_rename_message_type_to_message_type_name_in_messages.rb
135
+ - admin/db/migrate/20120523112257_add_match_all_errors_to_routes.rb
136
+ - admin/db/migrate/20120218124300_create_messages.rb
137
+ - admin/db/migrate/20120219021806_create_message_types.rb
138
+ - admin/db/migrate/20120411001040_add_app_id_key_msg_type_id_to_messages.rb
139
+ - admin/db/migrate/20120219021940_create_message_routes.rb
140
+ - admin/db/migrate/20120413024953_add_message_guid_to_messages.rb
141
+ - admin/db/migrate/20120219021535_create_applications.rb
142
+ - admin/script/rails
143
+ - admin/script/railsrunner
144
+ - admin/test/test_helper.rb
145
+ - admin/test/fixtures/message_types.yml
146
+ - admin/test/fixtures/message_routes.yml
147
+ - admin/test/fixtures/applications.yml
148
+ - admin/test/fixtures/messages.yml
149
+ - admin/test/performance/browsing_test.rb
150
+ - admin/test/unit/message_route_test.rb
151
+ - admin/test/unit/message_type_test.rb
152
+ - admin/test/unit/application_test.rb
153
+ - admin/test/unit/helpers/message_types_helper_test.rb
154
+ - admin/test/unit/helpers/applications_helper_test.rb
155
+ - admin/test/unit/helpers/message_routes_helper_test.rb
156
+ - admin/test/unit/helpers/messages_helper_test.rb
157
+ - admin/test/unit/message_test.rb
158
+ - admin/test/functional/message_routes_controller_test.rb
159
+ - admin/test/functional/applications_controller_test.rb
160
+ - admin/test/functional/messages_controller_test.rb
161
+ - admin/test/functional/message_types_controller_test.rb
162
+ - admin/config.ru
163
+ - admin/Rakefile
164
+ homepage: https://github.com/devincognito/EventBus
165
+ licenses: []
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubyforge_project:
184
+ rubygems_version: 1.8.11
185
+ signing_key:
186
+ specification_version: 3
187
+ summary: Libraries for creating EventBus services
188
+ test_files: []