HashCode

An organizer of symbols

Archive for October, 2008

class_variable_defined? NoMethodError: Ruby 1.8.5

Tuesday, October 7th, 2008

Se você usa metaprogramação em Ruby fique atento com os servidores desatualizados por aí. O método Object.class_variable_defined? não existe na versão 1.8.5 apenas nas mais versões novas.

Usando Ruby 1.8.5 (2006-08-25) [i486-linux]

 Object.class_variable_defined? :@@coisa #=> NoMethodError: undefined method 

Usando Ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]

 Object.class_variable_defined? :@@coisa #=> false

Solução rápida

Adicionar o método na classe Object que faça o mesmo papel.

def Object.class_variable_defined?(pseudo_var)
  Object.class_variables.include?(pseudo_var.to_s)
end

Compatibilizando o código sem alterar o core

def Object.class_variable_defined?(pseudo_var)
  Object.class_variables.include?(pseudo_var.to_s)
end unless Object.respond_to? :class_variable_defined?

Não deixe que isso consuma 3 horas do seu trabalho como acabou de acontecer comigo :)