module Thrift::LocalTypeChecking::ClassMethods

Public Instance Methods

overwrite_initialize() click to toggle source
# File lib/thrift/local_type_checking.rb, line 18
def overwrite_initialize
  class_eval do
    unless method_defined?(:custom_initialize)
      define_method(:custom_initialize) do |d={}|
        original_initialize(d)

        unless d.empty?
          d.each do |name, value|
            unless name_to_id(name.to_s)
              raise Exception, "Unknown key given to #{self.class}.new: #{name}"
            end
            Thrift.check_type(value, struct_fields[name_to_id(name.to_s)], name)
            instance_variable_set("@#{name}", value)
          end
        end
      end
    end

    if instance_method(:initialize) != instance_method(:custom_initialize)
      alias_method :original_initialize, :initialize
      alias_method :initialize, :custom_initialize
    end
  end
end