From: David Reiss Date: Tue, 26 Feb 2008 06:40:22 +0000 (+0000) Subject: Move Ruby fielded object creation from generated constructor to ThriftStruct X-Git-Tag: 0.2.0~970 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=68ccc699a398ed47cde0ad1d405f94241fed6068;p=common%2Fthrift.git Move Ruby fielded object creation from generated constructor to ThriftStruct Rather than the generated code needing to handle simple fielded creation of objects, the ThriftStruct module constructor is extended to handle hash arguments. Statements such as o = ThriftObject.new :field1 => value1, :field2 => value2, ... are supported as before, and the string form, o = ThriftObject.new "field1" => value1, "field2" => value2, ... disabled by the previous patch now also works. Placing this code in the module is also just a cleaner solution. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665502 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc index 220a3de0..7faa7362 100644 --- a/compiler/cpp/src/generate/t_rb_generator.cc +++ b/compiler/cpp/src/generate/t_rb_generator.cc @@ -288,9 +288,6 @@ void t_rb_generator::generate_rb_struct(std::ofstream& out, t_struct* tstruct, b if (is_exception) { generate_rb_simple_exception_constructor(out, tstruct); } - else { - generate_rb_simple_constructor(out, tstruct); - } generate_accessors(out, tstruct); generate_field_defns(out, tstruct); @@ -299,18 +296,6 @@ void t_rb_generator::generate_rb_struct(std::ofstream& out, t_struct* tstruct, b indent(out) << "end" << endl << endl; } -void t_rb_generator::generate_rb_simple_constructor(std::ofstream& out, t_struct* tstruct) { - const vector& members = tstruct->get_members(); - - if (members.size() > 0) { - indent(out) << "def initialize(opts={})" << endl; - indent_up(); - indent(out) << "opts.each { |k, v| send(\"#{k}=\", v) }" << endl; - indent_down(); - indent(out) << "end" << endl << endl; - } -} - void t_rb_generator::generate_rb_simple_exception_constructor(std::ofstream& out, t_struct* tstruct) { const vector& members = tstruct->get_members(); diff --git a/lib/rb/lib/thrift/thrift.rb b/lib/rb/lib/thrift/thrift.rb index ab21646b..a0a2f7e8 100644 --- a/lib/rb/lib/thrift/thrift.rb +++ b/lib/rb/lib/thrift/thrift.rb @@ -178,7 +178,7 @@ end module ThriftStruct def initialize(d={}) each_field do |fid, type, name, default| - instance_variable_set("@#{name}", d[name.to_s] || default) + instance_variable_set("@#{name}", d[name.to_s] || d[name.intern] || default) end end