Working through an old @why post on metaprogramming

since I'd like to make the JRuby rabbitmq stuff a bit less boilerplate.
cat-town
Dan Buch 12 years ago
parent 9fd03cab2f
commit e1a07fadd9

@ -0,0 +1,9 @@
class Class
def attr_abort(*args)
abort "Please no more attributes today."
end
end
class MyNewClass
attr_abort :id, :diagram, :telegram
end

@ -0,0 +1,5 @@
require_relative 'mail_truck'
class HappyTruck < MailTruck
company "Happy's -- We Bring the Mail, and That's It!"
end

@ -0,0 +1,15 @@
require_relative 'metaid'
class MailTruck
attr_accessor :driver, :route
def initialize(driver, route)
@driver, @route = driver, route
end
def self.company(name)
meta_def :company do
name
end
end
end

@ -0,0 +1,19 @@
class Object
def metaclass
class << self
self
end
end
def meta_eval(&block)
metaclass.instance_eval(&block)
end
def meta_def(name, &block)
meta_eval { define_method(name, &block) }
end
def class_def(name, &block)
class_eval { define_method(name, &block) }
end
end
Loading…
Cancel
Save