Sha256: 34004fa4e2c8cda4d904d8051082202cc3adb27ee9ec5928a1ef7b946feeb5ca
Contents?: true
Size: 1.57 KB
Versions: 3
Compression:
Stored size: 1.57 KB
Contents
class Surrogate # This manages the definitions that were given to the class # The hatchlings are added to the instances, and they look here # to find out about how their methods are implemented. class Hatchery attr_accessor :klass def initialize(klass) self.klass = klass klass_can_define_api_methods end def define(method_name, options={}, &block) add_api_method_for method_name add_verb_helpers_for method_name add_noun_helpers_for method_name api_methods[method_name] = MethodDefinition.new method_name, options, block klass end def api_methods @api_methods ||= {} end def api_method_names api_methods.keys - [:initialize] end def api_method_for(name) options = api_methods[name] options && options.default_proc end private def klass_can_define_api_methods klass.singleton_class.__send__ :define_method, :define, &method(:define) end def add_api_method_for(method_name) klass.__send__ :define_method, method_name do |*args, &block| @hatchling.invoke_method method_name, args, &block end end def add_verb_helpers_for(method_name) add_helpers_for method_name, "will_#{method_name}" end def add_noun_helpers_for(method_name) add_helpers_for method_name, "will_have_#{method_name}" end def add_helpers_for(method_name, helper_name) klass.__send__ :define_method, helper_name do |*args, &block| @hatchling.prepare_method method_name, args, &block self end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
surrogate-0.6.2 | lib/surrogate/hatchery.rb |
surrogate-0.6.1 | lib/surrogate/hatchery.rb |
surrogate-0.6.0 | lib/surrogate/hatchery.rb |