module TwirpRails::Routes::Helper
Public Class Methods
constantize_first(*variants)
click to toggle source
# File lib/twirp_rails/routes.rb, line 41 def self.constantize_first(*variants) variants.each do |name| clazz = name.to_s.camelize.safe_constantize return clazz if clazz end nil end
install()
click to toggle source
# File lib/twirp_rails/routes.rb, line 51 def self.install ActionDispatch::Routing::Mapper.include TwirpRails::Routes::Helper end
on_create_service(&block)
click to toggle source
# File lib/twirp_rails/routes.rb, line 57 def self.on_create_service(&block) Helper.create_service_hooks ||= [] Helper.create_service_hooks << block end
run_create_hooks(service)
click to toggle source
# File lib/twirp_rails/routes.rb, line 62 def self.run_create_hooks(service) return unless Helper.create_service_hooks Helper.create_service_hooks.each do |hook| hook.call service end end
Public Instance Methods
mount_twirp(name, handler: nil, scope: 'twirp')
click to toggle source
# File lib/twirp_rails/routes.rb, line 6 def mount_twirp(name, handler: nil, scope: 'twirp') TwirpRails.handle_dev_error "mount twirp route #{name}" do case name when Class raise 'handler param required when name is a class' unless handler&.is_a?(Class) service_class = name when String, Symbol service_class = Helper.constantize_first "#{name}_service", name unless service_class msg = "mount_twirp of #{name} error. #{name.camelize}Service or #{name.camelize} class is not found" raise TwirpRails::Error, msg end handler ||= "#{name}_handler".camelize.constantize else raise 'twirp service name required' end service = service_class.new(ErrorHandlingFactory.wrap_handler(handler.new)) Helper.run_create_hooks service if scope scope scope do mount service, at: service.full_name end else mount service, at: service.full_name end end end