Class: ActionSubscriber::Router
- Inherits:
-
Object
- Object
- ActionSubscriber::Router
- Defined in:
- lib/action_subscriber/router.rb
Constant Summary collapse
- DEFAULT_SETTINGS =
{ :acknowledgements => false, :durable => false, :exchange => "events", }.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #connection(name, settings, &block) ⇒ Object
- #default_queue_for(route_settings) ⇒ Object
- #default_routes_for(subscriber, options = {}) ⇒ Object
- #default_routing_key_for(route_settings) ⇒ Object
-
#initialize ⇒ Router
constructor
A new instance of Router.
- #local_application_name ⇒ Object
- #resource_name(route_settings) ⇒ Object
- #route(subscriber, action, options = {}) ⇒ Object
- #routes ⇒ Object
- #threadpool(name, settings) ⇒ Object
Constructor Details
#initialize ⇒ Router
Returns a new instance of Router.
15 16 17 |
# File 'lib/action_subscriber/router.rb', line 15 def initialize @current_threadpool_name = :default end |
Class Method Details
.draw_routes(&block) ⇒ Object
3 4 5 6 7 |
# File 'lib/action_subscriber/router.rb', line 3 def self.draw_routes(&block) router = self.new router.instance_eval(&block) router.routes end |
Instance Method Details
#connection(name, settings, &block) ⇒ Object
19 20 21 22 |
# File 'lib/action_subscriber/router.rb', line 19 def connection(name, settings, &block) ::ActionSubscriber.print_deprecation_warning("setting up a threadpool for #{name} instead of a new connection") threadpool(name, settings, &block) end |
#default_queue_for(route_settings) ⇒ Object
39 40 41 42 43 44 45 46 |
# File 'lib/action_subscriber/router.rb', line 39 def default_queue_for(route_settings) [ local_application_name, route_settings[:publisher], resource_name(route_settings), route_settings[:action].to_s, ].compact.join(".") end |
#default_routes_for(subscriber, options = {}) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/action_subscriber/router.rb', line 48 def default_routes_for(subscriber, = {}) = .merge({:threadpool_name => @current_threadpool_name}) subscriber.routes().each do |route| routes << route end end |
#default_routing_key_for(route_settings) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/action_subscriber/router.rb', line 31 def default_routing_key_for(route_settings) [ route_settings[:publisher], resource_name(route_settings), route_settings[:action].to_s, ].compact.join(".") end |
#local_application_name ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/action_subscriber/router.rb', line 55 def local_application_name @_local_application_name ||= begin local_application_name = case when ENV['APP_NAME'] then ENV['APP_NAME'].to_s.dup when defined?(::Rails) then ::Rails.application.class.parent_name.dup else raise "Define an application name (ENV['APP_NAME'])" end local_application_name.downcase end end |
#resource_name(route_settings) ⇒ Object
69 70 71 |
# File 'lib/action_subscriber/router.rb', line 69 def resource_name(route_settings) route_settings[:subscriber].name.underscore.gsub(/_subscriber/, "").to_s end |
#route(subscriber, action, options = {}) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/action_subscriber/router.rb', line 73 def route(subscriber, action, = {}) route_settings = DEFAULT_SETTINGS.merge(:threadpool_name => @current_threadpool_name).merge().merge(:subscriber => subscriber, :action => action) route_settings[:routing_key] ||= default_routing_key_for(route_settings) route_settings[:queue] ||= default_queue_for(route_settings) routes << Route.new(route_settings) end |
#routes ⇒ Object
80 81 82 |
# File 'lib/action_subscriber/router.rb', line 80 def routes @routes ||= [] end |
#threadpool(name, settings) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/action_subscriber/router.rb', line 24 def threadpool(name, settings) ::ActionSubscriber::ThreadPools.setup_threadpool(name, settings) @current_threadpool_name = name yield @current_threadpool_name = :default end |