module Rough::RouteRegistry

Public Class Methods

rpc_route_for(service_name, method_name) click to toggle source
# File lib/rough/route_registry.rb, line 10
def rpc_route_for(service_name, method_name)
  return cached_routes[service_name][method_name] if cached_routes[service_name].key?(method_name)
  route = find_route(service_name, method_name)
  cached_routes[service_name][method_name] = route ? Route.new(route) : nil
end
warm!() click to toggle source

Warm up cache for each defined RPC route

# File lib/rough/route_registry.rb, line 17
def warm!
  rpc_driven_routes.each do |route|
    service_name, method_name = route.defaults[:rpc].split('#')

    # java-ize service name
    service_segments = service_name.split('::')
    final_service_name = service_segments.pop
    service_name = (service_segments.map(&:underscore) << final_service_name).join('.')

    # java-ize method name
    method_name = method_name.camelize

    cached_routes[service_name][method_name] = Route.new(route)
  end
end

Private Class Methods

cached_routes() click to toggle source
# File lib/rough/route_registry.rb, line 35
def cached_routes
  @cached_routes ||= Hash.new { |h, k| h[k] = {} }
end
find_route(matched_service_name, matched_method_name) click to toggle source

find a particular rails route for a given service_name and method_name

# File lib/rough/route_registry.rb, line 40
def find_route(matched_service_name, matched_method_name)
  rpc_driven_routes.find do |route|
    service_name, method_name = route.defaults[:rpc].split('#')

    # ruby-ize service name
    matched_service_segments = matched_service_name.split('.')
    final_service_name = matched_service_segments.pop
    matched_service_name = (matched_service_segments.map(&:capitalize) << final_service_name).join('::')

    # ruby-ize method name
    matched_method_name = matched_method_name.underscore

    # does it match
    matched_service_name == service_name && matched_method_name == method_name
  end
end
rpc_driven_routes() click to toggle source
# File lib/rough/route_registry.rb, line 57
def rpc_driven_routes
  Rails.application.routes.routes.lazy.select do |route|
    route.defaults && route.defaults[:rpc]
  end
end