@@ -826,9 +826,9 @@ void t_rb_generator::generate_service(t_service* tservice) {
826
826
f_service_.indent () << " NAMESPACE = '" << tservice->get_program ()->get_namespace (" *" ) << " '.freeze" << endl << endl;
827
827
828
828
// Generate the three main parts of the service (well, two for now in PHP)
829
+ generate_service_helpers (tservice);
829
830
generate_service_client (tservice);
830
831
generate_service_server (tservice);
831
- generate_service_helpers (tservice);
832
832
833
833
f_service_.indent () << " ::Thrift.register_service_type(self)" << endl << endl;
834
834
@@ -1019,6 +1019,16 @@ void t_rb_generator::generate_service_server(t_service* tservice) {
1019
1019
f_service_.indent_down ();
1020
1020
f_service_.indent () << " end" << endl << endl;
1021
1021
1022
+ f_service_.indent () << " METHODS = {" << endl;
1023
+ f_service_.indent_up ();
1024
+
1025
+ for (f_iter = functions.begin (); f_iter != functions.end (); ++f_iter) {
1026
+ f_service_.indent () << " '" << (*f_iter)->get_name () << " ' => { args_klass: " << capitalize ((*f_iter)->get_name ()) << " _args, oneway: " << ((*f_iter)->is_oneway () ? " true" : " false" ) << " }," << endl;
1027
+ }
1028
+
1029
+ f_service_.indent_down ();
1030
+ f_service_.indent () << " }.freeze" << endl << endl;
1031
+
1022
1032
// Generate the process subfunctions
1023
1033
for (f_iter = functions.begin (); f_iter != functions.end (); ++f_iter) {
1024
1034
generate_process_function (tservice, *f_iter);
@@ -1035,34 +1045,20 @@ void t_rb_generator::generate_service_server(t_service* tservice) {
1035
1045
*/
1036
1046
void t_rb_generator::generate_process_function (t_service* tservice, t_function* tfunction) {
1037
1047
(void )tservice;
1038
- // Open function
1039
- f_service_.indent () << " def process_" << tfunction->get_name () << " (seqid, iprot, oprot)" << endl;
1040
-
1041
- f_service_.indent_up ();
1042
-
1043
- string argsname = capitalize (tfunction->get_name ()) + " _args" ;
1044
1048
string resultname = capitalize (tfunction->get_name ()) + " _result" ;
1045
1049
1046
- f_service_.indent () << " args = read_args(iprot, " << argsname << " )" << endl;
1047
-
1048
- f_service_.indent ();
1049
-
1050
- if (!tfunction->is_oneway ()) {
1051
- f_service_ << " result = " ;
1052
- }
1053
- f_service_ << " @middleware.handle_" << (tfunction->is_oneway () ? " unary" : " binary" ) << " ('" << tfunction->get_name () << " ', args) do |args|" << endl;
1054
- f_service_.indent_up ();
1055
-
1056
1050
t_struct* xs = tfunction->get_xceptions ();
1057
1051
const std::vector<t_field*>& xceptions = xs->get_members ();
1058
1052
vector<t_field*>::const_iterator x_iter;
1059
1053
1060
- // Declare result for non oneway function
1054
+ // Open function
1055
+ f_service_.indent () << " def execute_" << tfunction->get_name () << " (args)" << endl;
1056
+ f_service_.indent_up ();
1057
+
1061
1058
if (!tfunction->is_oneway ()) {
1062
- f_service_.indent () << " result = " << resultname << " .new()" << endl;
1059
+ f_service_.indent () << " result = " << resultname << " .new()" << endl << endl ;
1063
1060
}
1064
1061
1065
- // Try block for a function with exceptions
1066
1062
if (xceptions.size () > 0 ) {
1067
1063
f_service_.indent () << " begin" << endl;
1068
1064
f_service_.indent_up ();
@@ -1104,24 +1100,39 @@ void t_rb_generator::generate_process_function(t_service* tservice, t_function*
1104
1100
f_service_.indent () << " end" << endl;
1105
1101
}
1106
1102
1107
- // Shortcut out here for oneway functions
1103
+ f_service_.indent () << endl;
1104
+
1108
1105
if (tfunction->is_oneway ()) {
1109
1106
f_service_.indent () << " nil" << endl;
1110
- f_service_.indent_down ();
1107
+ } else {
1108
+ f_service_.indent () << " result" << endl;
1109
+ }
1111
1110
1112
- f_service_.indent () << " end " << endl ;
1113
- f_service_.indent_down () ;
1111
+ f_service_.indent_down () ;
1112
+ f_service_.indent () << " end " << endl << endl ;
1114
1113
1115
- f_service_.indent () << " end" << endl << endl;
1116
- return ;
1117
- }
1114
+ f_service_.indent () << " def process_" << tfunction->get_name () << " (seqid, iprot, oprot)" << endl;
1115
+
1116
+ f_service_.indent_up ();
1117
+
1118
+ string argsname = capitalize (tfunction->get_name ()) + " _args" ;
1118
1119
1120
+ f_service_.indent () << " args = read_args(iprot, " << argsname << " )" << endl;
1119
1121
1120
- f_service_.indent () << " result" << endl;
1122
+ f_service_.indent ();
1123
+
1124
+ if (!tfunction->is_oneway ()) {
1125
+ f_service_ << " result = " ;
1126
+ }
1127
+ f_service_ << " @middleware.handle_" << (tfunction->is_oneway () ? " unary" : " binary" ) << " ('" << tfunction->get_name () << " ', args) do |args|" << endl;
1128
+ f_service_.indent_up ();
1129
+ f_service_.indent () << " execute_" << tfunction->get_name () << " (args)" << endl;
1121
1130
f_service_.indent_down ();
1122
1131
f_service_.indent () << " end" << endl << endl;
1123
- f_service_.indent () << " write_result(result, oprot, '" << tfunction->get_name () << " ', seqid)"
1124
- << endl;
1132
+ if (!tfunction->is_oneway ()) {
1133
+ f_service_.indent () << " write_result(result, oprot, '" << tfunction->get_name () << " ', seqid)"
1134
+ << endl;
1135
+ }
1125
1136
1126
1137
// Close function
1127
1138
f_service_.indent_down ();
0 commit comments