Revision: 605 http://trac.macosforge.org/projects/ruby/changeset/605 Author: rich@infoether.com Date: 2008-09-18 18:17:43 -0700 (Thu, 18 Sep 2008) Log Message: ----------- enable delegate methods to be required before setting the delegate on the control Modified Paths: -------------- MacRuby/trunk/lib/hotcocoa/delegate_builder.rb MacRuby/trunk/lib/hotcocoa/mapper.rb Modified: MacRuby/trunk/lib/hotcocoa/delegate_builder.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/delegate_builder.rb 2008-09-19 01:17:07 UTC (rev 604) +++ MacRuby/trunk/lib/hotcocoa/delegate_builder.rb 2008-09-19 01:17:43 UTC (rev 605) @@ -2,10 +2,11 @@ class DelegateBuilder - attr_reader :control, :delegate, :method_count + attr_reader :control, :delegate, :method_count, :required_methods - def initialize(control) + def initialize(control, required_methods) @control = control + @required_methods = required_methods @method_count = 0 @delegate = Object.new end @@ -15,7 +16,7 @@ increment_method_count bind_block_to_delegate_instance_variable(block) create_delegate_method(selector_name, parameters) - set_delegate + set_delegate if required_methods.empty? end private @@ -29,6 +30,7 @@ end def create_delegate_method(selector_name, parameters) + required_methods.delete(selector_name) eval %{ def delegate.#{parameterize_selector_name(selector_name)} #{block_instance_variable}.call(#{parameter_values_for_mapping(selector_name, parameters)}) Modified: MacRuby/trunk/lib/hotcocoa/mapper.rb =================================================================== --- MacRuby/trunk/lib/hotcocoa/mapper.rb 2008-09-19 01:17:07 UTC (rev 604) +++ MacRuby/trunk/lib/hotcocoa/mapper.rb 2008-09-19 01:17:43 UTC (rev 605) @@ -121,12 +121,16 @@ def delegate_module_for_control_class return Mapper.delegate_modules[control_class] if Mapper.delegate_modules.has_key?(control_class) delegate_module = Module.new + required_methods = [] inherited_delegate_methods.each do |delegate_method, mapping| + required_methods << delegate_method if mapping[:required] + end + inherited_delegate_methods.each do |delegate_method, mapping| parameters = mapping[:parameters] ? ", "+mapping[:parameters].map {|param| %{"#{param}"} }.join(",") : "" delegate_module.module_eval %{ def #{mapping[:to]}(&block) raise "Must pass in a block to use this delegate method" unless block_given? - @_delegate_builder ||= HotCocoa::DelegateBuilder.new(self) + @_delegate_builder ||= HotCocoa::DelegateBuilder.new(self, #{required_methods.inspect}) @_delegate_builder.add_delegated_method(block, "#{delegate_method}" #{parameters}) end }