Module: Thrift::LocalTypeChecking::ClassMethods

Defined in:
lib/thrift/local_type_checking.rb

Instance Method Summary collapse

Instance Method Details

#overwrite_initializeObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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