Sha256: 2cab121b57f7979c1436180c119c31e15f834ce12ad0140d7a6623f0a4b3d3b7
Contents?: true
Size: 1.81 KB
Versions: 4
Compression:
Stored size: 1.81 KB
Contents
require 'action_dispatch' module TwirpRails module Routes # :nodoc: module Helper 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(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 def self.constantize_first(*variants) variants.each do |name| clazz = name.to_s.camelize.safe_constantize return clazz if clazz end nil end def self.install ActionDispatch::Routing::Mapper.include TwirpRails::Routes::Helper end cattr_accessor :create_service_hooks def self.on_create_service(&block) Helper.create_service_hooks ||= [] Helper.create_service_hooks << block end def self.run_create_hooks(service) return unless Helper.create_service_hooks Helper.create_service_hooks.each do |hook| hook.call service end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
twirp_rails-0.4.3 | lib/twirp_rails/routes.rb |
twirp_rails-0.4.2 | lib/twirp_rails/routes.rb |
twirp_rails-0.4.1 | lib/twirp_rails/routes.rb |
twirp_rails-0.4.0 | lib/twirp_rails/routes.rb |