@@ -718,10 +718,6 @@ void t_rb_generator::generate_field_defns(t_rb_ofstream& out, t_struct* tstruct)
718718 out.indent () << " FIELDS = {" << ' \n ' ;
719719 out.indent_up ();
720720 for (f_iter = fields.begin (); f_iter != fields.end (); ++f_iter) {
721- if (f_iter != fields.begin ()) {
722- out << " ," << ' \n ' ;
723- }
724-
725721 // generate the field docstrings within the FIELDS constant. no real better place...
726722 generate_rdoc (out, *f_iter);
727723
@@ -732,9 +728,9 @@ void t_rb_generator::generate_field_defns(t_rb_ofstream& out, t_struct* tstruct)
732728 (*f_iter)->get_name (),
733729 (*f_iter)->get_value (),
734730 (*f_iter)->get_req () == t_field::T_OPTIONAL );
731+ out << " ," << ' \n ' ;
735732 }
736733 out.indent_down ();
737- out << ' \n ' ;
738734 out.indent () << " }" << ' \n ' << ' \n ' ;
739735
740736 out.indent () << " def struct_fields; FIELDS; end" << ' \n ' << ' \n ' ;
@@ -750,50 +746,115 @@ void t_rb_generator::generate_field_data(t_rb_ofstream& out,
750746 t_const_value* field_value = nullptr ,
751747 bool optional = false ) {
752748 field_type = get_true_type (field_type);
749+ const bool multiline = field_value != nullptr
750+ && (field_type->is_struct () || field_type->is_xception ()
751+ || field_type->is_map () || field_type->is_list ()
752+ || field_type->is_set ());
753753
754754 // Begin this field's defn
755- out << " {type: " << type_to_enum (field_type);
755+ out << " {" ;
756+ if (multiline) {
757+ out << ' \n ' ;
758+ out.indent_up ();
759+ out.indent () << " type: " << type_to_enum (field_type) << " ," << ' \n ' ;
760+ } else {
761+ out << " type: " << type_to_enum (field_type);
762+ }
756763
757764 if (!field_name.empty ()) {
758- out << " , name: \" " << field_name << " \" " ;
765+ if (multiline) {
766+ out.indent () << " name: \" " << field_name << " \" ," << ' \n ' ;
767+ } else {
768+ out << " , name: \" " << field_name << " \" " ;
769+ }
759770 }
760771
761772 if (field_value != nullptr ) {
762- out << " , default: " ;
763- render_const_value (out, field_type, field_value);
773+ if (multiline) {
774+ out.indent () << " default: " ;
775+ render_const_value (out, field_type, field_value) << " ," << ' \n ' ;
776+ } else {
777+ out << " , default: " ;
778+ render_const_value (out, field_type, field_value);
779+ }
764780 }
765781
766782 if (!field_type->is_base_type ()) {
767783 if (field_type->is_struct () || field_type->is_xception ()) {
768- out << " , class: " << full_type_name ((t_struct*)field_type);
784+ if (multiline) {
785+ out.indent () << " class: " << full_type_name ((t_struct*)field_type) << " ," << ' \n ' ;
786+ } else {
787+ out << " , class: " << full_type_name ((t_struct*)field_type);
788+ }
769789 } else if (field_type->is_list ()) {
770- out << " , element: " ;
790+ if (multiline) {
791+ out.indent () << " element: " ;
792+ } else {
793+ out << " , element: " ;
794+ }
771795 generate_field_data (out, ((t_list*)field_type)->get_elem_type ());
796+ if (multiline) {
797+ out << " ," << ' \n ' ;
798+ }
772799 } else if (field_type->is_map ()) {
773- out << " , key: " ;
800+ if (multiline) {
801+ out.indent () << " key: " ;
802+ } else {
803+ out << " , key: " ;
804+ }
774805 generate_field_data (out, ((t_map*)field_type)->get_key_type ());
775- out << " , value: " ;
806+ if (multiline) {
807+ out << " ," << ' \n ' ;
808+ out.indent () << " value: " ;
809+ } else {
810+ out << " , value: " ;
811+ }
776812 generate_field_data (out, ((t_map*)field_type)->get_val_type ());
813+ if (multiline) {
814+ out << " ," << ' \n ' ;
815+ }
777816 } else if (field_type->is_set ()) {
778- out << " , element: " ;
817+ if (multiline) {
818+ out.indent () << " element: " ;
819+ } else {
820+ out << " , element: " ;
821+ }
779822 generate_field_data (out, ((t_set*)field_type)->get_elem_type ());
823+ if (multiline) {
824+ out << " ," << ' \n ' ;
825+ }
780826 }
781- } else {
782- if (((t_base_type*)field_type)->is_binary ()) {
827+ } else if (((t_base_type*)field_type)->is_binary ()) {
828+ if (multiline) {
829+ out.indent () << " binary: true," << ' \n ' ;
830+ } else {
783831 out << " , binary: true" ;
784832 }
785833 }
786834
787835 if (optional) {
788- out << " , optional: true" ;
836+ if (multiline) {
837+ out.indent () << " optional: true," << ' \n ' ;
838+ } else {
839+ out << " , optional: true" ;
840+ }
789841 }
790842
791843 if (field_type->is_enum ()) {
792- out << " , enum_class: " << full_type_name (field_type);
844+ if (multiline) {
845+ out.indent () << " enum_class: " << full_type_name (field_type) << " ," << ' \n ' ;
846+ } else {
847+ out << " , enum_class: " << full_type_name (field_type);
848+ }
793849 }
794850
795851 // End of this field's defn
796- out << " }" ;
852+ if (multiline) {
853+ out.indent_down ();
854+ out.indent () << " }" ;
855+ } else {
856+ out << " }" ;
857+ }
797858}
798859
799860void t_rb_generator::begin_namespace (t_rb_ofstream& out, vector<std::string> modules) {
0 commit comments