class Protobuf::Visitor::CreateRpcVisitor
def add_rpc(name, request, response)
def add_rpc(name, request, response) (@services[@current_service] ||= []) << [name, Util.moduleize(request), Util.moduleize(response)] end
def create_files(message_file, out_dir, create_file=true)
def create_files(message_file, out_dir, create_file=true) @create_file = create_file default_port = 9999 @services.each do |service_name, rpcs| underscored_name = underscore service_name.to_s message_module = package.map{|p| p.to_s.capitalize}.join('::') required_file = [ Util.module_to_path(message_module), File.basename(message_file.sub(/^\.\//, '').sub(/\.rb$/, '')) ].join('/').gsub(/\/{2,}/, '/') create_service(message_file, out_dir, underscored_name, message_module, service_name, default_port, rpcs, required_file) end @file_contents end
def create_service(message_file, out_dir, underscored_name, module_name, service_name, default_port, rpcs, required_file)
def create_service(message_file, out_dir, underscored_name, module_name, service_name, default_port, rpcs, required_file) service_filename = "#{out_dir}/#{Util.module_to_path(module_name)}/#{underscored_name}.rb" service_contents = template_erb('rpc_service_implementation').result(binding) create_file_with_backup(service_filename, service_contents) if @create_file @file_contents[service_filename] = service_contents end
def initialize
def initialize @services = {} @create_file = true @file_contents = {} end
def template_erb(template)
def template_erb(template) ERB.new(File.read("#{File.dirname(__FILE__)}/template/#{template}.erb"), nil, '-') end
def underscore(str)
def underscore(str) str.to_s.gsub(/\B[A-Z]/, '_\&').downcase end
def visit(node)
def visit(node) node.accept_rpc_visitor(self) self end