From: Tony Arcieri Date: 2011-01-25T12:10:33+09:00 Subject: Surely there's a better way to do this... (implementing a DSL) --0016e6dee78820295c049aa30fb3 Content-Type: text/plain; charset=ISO-8859-1 I'm trying to write a method that builds a class and takes arguments from the outer scope when doing so: def awesome_mcjobify(state, options = {}, &action) subject_class = @subject_class job = Class.new do metaclass = class << self; self; end metaclass.send :define_method, :perform do |id| subject = subject_class.find(id) action subject end metaclass.send :define_method, :action, &action end subject_class.const_set "#{state.to_s.camelize}Job", job end This is trying to do a lot of things at once and feels icky. It's building a class that responds to a couple of methods, encapsulates a bit of state (into the class itself, I guess?), then sticks that class namespaced underneath another given class. Refactor me? :) I know there's supposed to be define_singleton_method in 1.9, but using define_*method at all (not to mention send :define_method) seems a lot messier than it could potentially be. Any suggestions? -- Tony Arcieri Medioh! Kudelski --0016e6dee78820295c049aa30fb3--