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


Reply via email to