If you put "namespace rb Blah" in your .thrift file, the generated
classes will live in that module.
-Bryan
On Sep 23, 2008, at 3:27 PM, Wayne Kao wrote:
In our .thrift file we have a struct like this:
struct Name{
1: string first,
2: string middle,
3: string last
}
That generates Ruby code like this (used the latest Thrift compiler
from
trunk):
require 'thrift/protocol'
class Name
include Thrift::Struct
Thrift::Struct.field_accessor self, :first, :middle, :last
FIELDS = {
1 => {:type => Thrift::Types::STRING, :name => 'first'},
2 => {:type => Thrift::Types::STRING, :name => 'middle'},
3 => {:type => Thrift::Types::STRING, :name => 'last'}
}
end
Then, in our main (Rails) app, we include it like this at the top
of a file:
$:.push("#{RAILS_ROOT}/../blah/gen-rb")
require 'Blah'
require 'blah_constants'
Unfortunately, because Ruby allows reopening classes, if we have
another
class called "Name" (like a Rails model), all sorts of subtle badness
happens. The person who created the original .thrift file probably
doesn't
notice either since they may not even be a Ruby programmer.
Is there a good pattern for namespacing the generated types such
that they
aren't in the global namespace? Or does everyone just come up with
fancy
naming schemes for their Thrift types (e.g. "BlahName" instead of
"Name")?
Is this something we should try tackling in the compiler?
--Wayne