Je travaille sur une classe qui lit les informations d'un capteur et les renvoie sous forme de hash. J'aimerais utiliser les clés de hachage comme accesseurs, mais je n'ai pas beaucoup de chance d'y parvenir. Voici les parties pertinentes de mon code jusqu'à présent :
Je l'ai essayé à la fois avec method_missing et en utilisant la fonction :define_method
método.
attr_reader :sensor_hash
def method_missing(name, *args, &blk)
if args.empty? && blk.nil? && @sensor_hash.has_key?(name.to_s)
@sensor_hash[name.to_s]
else
super
end
end
def sensor(*sensor_to_return)
sensor_output = run_command(this_method_name)
sensor_output = sensor_output.split("\n")
sensor_output.map! { |line| line.downcase! }
unless sensor_to_return.empty?
sensor_to_return = sensor_to_return.to_s.downcase
sensor_output = sensor_output.grep(/^#{sensor_to_return}\s/)
end
@sensor_hash = Hash.new
sensor_output.each { |stat| @sensor_hash[stat.split(/\s+\|\s?/)[0].gsub(' ','_').to_sym] = stat.split(/\s?\|\s?/)[1..-1].each { |v| v.strip! } }
@sensor_hash.each do |k,v|
puts v.join("\t")
self.class.send :define_method, k { v.join("\t") }
end
return @sensor_hash
Les données renvoyées sont un hachage avec le nom du capteur comme clé et la valeur est un tableau de tout ce qui est renvoyé. Mon objectif est de pouvoir appeler Class.sensor.sensor_name
et obtenir la sortie de Class.sensor[:sensor_name]
. Actuellement, tout ce que j'arrive à obtenir est une erreur de méthode non définie. Quelqu'un a-t-il une idée de ce que je fais de mal ici ?