module Pebbles::River::Routing
Public Class Methods
binding_routing_keys_for(options)
click to toggle source
# File lib/pebbles/river/routing.rb, line 15 def self.binding_routing_keys_for(options) options.assert_valid_keys(:path, :class, :event) keys = [] element_to_routing_key_parts(options[:event]).each do |event| element_to_routing_key_parts(options[:class]).each do |klass| element_to_routing_key_parts(options[:path]).each do |pathspec| path_to_routing_key_parts(pathspec).each do |path| keys << [event, klass, path].join('._.') end end end end keys end
routing_key_for(options)
click to toggle source
# File lib/pebbles/river/routing.rb, line 5 def self.routing_key_for(options) options.assert_valid_keys(:uid, :event) raise ArgumentError.new(':event is required') unless options[:event] raise ArgumentError.new(':uid is required') unless options[:uid] uid = Pebblebed::Uid.new(options[:uid]) key = [options[:event], uid.klass, uid.path].compact key.join('._.') end
Private Class Methods
element_to_routing_key_parts(s)
click to toggle source
# File lib/pebbles/river/routing.rb, line 39 def self.element_to_routing_key_parts(s) s ||= '#' if s.respond_to?(:to_a) s = s.join('|') end s.gsub('**', '#').split('|') end
path_to_routing_key_parts(s)
click to toggle source
# File lib/pebbles/river/routing.rb, line 32 def self.path_to_routing_key_parts(s) required, optional = s.split('^').map { |p| p.split('.') } required = Array(required.join('.')) optional ||= [] (0..optional.length).map {|i| required + optional[0,i]}.map {|p| p.join('.')} end