У меня есть класс с некоторыми методами. Это суперсекрет, но я воспроизвел то, что я могу здесь.
Class RayGun
# flashes red light
# requires confirmation
# makes "zowowowowowow" sound
def stun!
# ...
end
# flashes blue light
# does not require confirmation
# makes "trrrtrtrtrrtrtrtrtrtrtr" sound
def freeze!
# ...
end
# doesn't flash any lights
# does not require confirmation
# makes Windows startup sound
def killoblast!
# ...
end
end
Я хочу иметь возможность во время выполнения опрашивать класс об одном из методов и получать хеш или структуру следующим образом:
{:lights => 'red', :confirmation => false, :sound => 'windows'}
Какой лучший способ сделать это? Очевидно, что вы могли бы иметь отдельный файл YAML вместе и установить соглашение, чтобы связать их, но в идеале мне нужен код и метаданные в одном месте.
Самая многообещающая идея, которую я могу придумать, выглядит примерно так:
class RayGun
cattr_accessor :metadata
def self.register_method(hsh)
define_method(hsh.name, hsh.block)
metadata[hsh[:name]] = hsh
end
register_method({
:name => 'stun!',
:lights => 'red',
:confirmation => 'true',
:sound => 'zowowo',
:block => Proc.new do
# code goes here
})
# etc.
end
У кого-нибудь есть идеи получше? Я лаю очень неправильное дерево?