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