[macruby-changes] [799] MacRuby/trunk/lib

source_changes at macosforge.org source_changes at macosforge.org
Tue Jan 20 12:09:12 PST 2009


Revision: 799
          http://trac.macosforge.org/projects/ruby/changeset/799
Author:   eloy.de.enige at gmail.com
Date:     2009-01-20 12:09:12 -0800 (Tue, 20 Jan 2009)
Log Message:
-----------
Apply patch provided in ticket #209; Fix more namespace issues

Modified Paths:
--------------
    MacRuby/trunk/lib/hotcocoa/behaviors.rb
    MacRuby/trunk/lib/hotcocoa/mapper.rb
    MacRuby/trunk/lib/hotcocoa/mappings/control.rb
    MacRuby/trunk/lib/hotcocoa/mappings/layout_view.rb
    MacRuby/trunk/lib/hotcocoa/mappings/toolbar_item.rb
    MacRuby/trunk/lib/hotcocoa/mappings.rb
    MacRuby/trunk/lib/hotcocoa/standard_rake_tasks.rb
    MacRuby/trunk/lib/hotcocoa.rb

Added Paths:
-----------
    MacRuby/trunk/lib/hotcocoa/object_ext.rb

Modified: MacRuby/trunk/lib/hotcocoa/behaviors.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/behaviors.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/behaviors.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -1,7 +1,7 @@
 module HotCocoa
   module Behaviors
     def Behaviors.included(klass)
-      Mapper.map_class(klass)
+      Mappings::Mapper.map_class(klass)
     end 
   end
 end
\ No newline at end of file

Modified: MacRuby/trunk/lib/hotcocoa/mapper.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mapper.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/mapper.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -1,199 +1,200 @@
-module HotCocoa::Mappings
-  
-  class Mapper
-    
-    attr_reader :control_class, :builder_method, :control_module
-    
-    attr_accessor :map_bindings
-
-    def self.map_class(klass)
-      new(klass).include_in_class
-    end
-    
-    def self.map_instances_of(klass, builder_method, &block)
-      new(klass).map_method(builder_method, &block)
-    end
-    
-    def self.bindings_modules
-      @bindings_module ||= {}
-    end
-    
-    def self.delegate_modules
-      @delegate_modules ||= {}
-    end
-    
-    def initialize(klass)
-      @control_class = klass
-    end
-    
-    def include_in_class
-      @extension_method = :include
-      customize(@control_class)
-    end
-    
-    def map_method(builder_method, &block)
-      @extension_method = :extend
-      @builder_method = builder_method
-      mod = (class << self; self; end)
-      mod.extend MappingMethods
-      mod.module_eval &block
-      @control_module = mod
-      inst = self
-      HotCocoa.send(:define_method, builder_method) do |*args, &control_block|
-        map = (args.length == 1 ? args[0] : args[1]) || {}
-        guid = args.length == 1 ? nil : args[0]
-        map = inst.remap_constants(map)
-        inst.map_bindings = map.delete(:map_bindings)
-        default_empty_rect_used = (map[:frame].__id__ == DefaultEmptyRect.__id__)
-        control = inst.respond_to?(:init_with_options) ? inst.init_with_options(inst.control_class.alloc, map) : inst.alloc_with_options(map)
-        Views[guid] = control if guid
-        inst.customize(control)
-        map.each do |key, value|
-          if control.respond_to?(key) && value == true
-            if control.respond_to?("set#{key.to_s.capitalize}")
-              eval "control.set#{key.to_s.capitalize}(true)"
+module HotCocoa
+  module Mappings
+    class Mapper
+      
+      attr_reader :control_class, :builder_method, :control_module
+      
+      attr_accessor :map_bindings
+      
+      def self.map_class(klass)
+        new(klass).include_in_class
+      end
+      
+      def self.map_instances_of(klass, builder_method, &block)
+        new(klass).map_method(builder_method, &block)
+      end
+      
+      def self.bindings_modules
+        @bindings_module ||= {}
+      end
+      
+      def self.delegate_modules
+        @delegate_modules ||= {}
+      end
+      
+      def initialize(klass)
+        @control_class = klass
+      end
+      
+      def include_in_class
+        @extension_method = :include
+        customize(@control_class)
+      end
+      
+      def map_method(builder_method, &block)
+        @extension_method = :extend
+        @builder_method = builder_method
+        mod = (class << self; self; end)
+        mod.extend MappingMethods
+        mod.module_eval &block
+        @control_module = mod
+        inst = self
+        HotCocoa.send(:define_method, builder_method) do |*args, &control_block|
+          map = (args.length == 1 ? args[0] : args[1]) || {}
+          guid = args.length == 1 ? nil : args[0]
+          map = inst.remap_constants(map)
+          inst.map_bindings = map.delete(:map_bindings)
+          default_empty_rect_used = (map[:frame].__id__ == DefaultEmptyRect.__id__)
+          control = inst.respond_to?(:init_with_options) ? inst.init_with_options(inst.control_class.alloc, map) : inst.alloc_with_options(map)
+          Views[guid] = control if guid
+          inst.customize(control)
+          map.each do |key, value|
+            if control.respond_to?(key) && value == true
+              if control.respond_to?("set#{key.to_s.capitalize}")
+                eval "control.set#{key.to_s.capitalize}(true)"
+              else
+                control.send("#{key}")
+              end
             else
-              control.send("#{key}")
+              eval "control.#{key}= value"
             end
-          else
-            eval "control.#{key}= value"
           end
+          if default_empty_rect_used
+            control.sizeToFit if control.respondsToSelector(:sizeToFit) == true
+          end
+          if control_block
+            if inst.respond_to?(:handle_block)
+              inst.handle_block(control, &control_block)
+            else
+              control_block.call(control)
+            end
+          end
+          control
         end
-        if default_empty_rect_used
-          control.sizeToFit if control.respondsToSelector(:sizeToFit) == true
+        self
+      end
+      
+      def inherited_constants
+        constants = {}
+        each_control_ancestor do |ancestor|
+          constants = constants.merge(ancestor.control_module.constants_map)
         end
-        if control_block
-          if inst.respond_to?(:handle_block)
-            inst.handle_block(control, &control_block)
-          else
-            control_block.call(control)
+        constants
+      end
+      
+      def inherited_delegate_methods
+        delegate_methods = {}
+        each_control_ancestor do |ancestor|
+          delegate_methods = delegate_methods.merge(ancestor.control_module.delegate_map)
+        end
+        delegate_methods
+      end
+      
+      def inherited_custom_methods
+        methods = []
+        each_control_ancestor do |ancestor|
+          methods << ancestor.control_module.custom_methods if ancestor.control_module.custom_methods
+        end
+        methods
+      end
+      
+      def each_control_ancestor
+        control_class.ancestors.reverse.each do |ancestor|
+          Mappings.mappings.values.each do |mapper|
+            yield mapper if mapper.control_class == ancestor
           end
         end
-        control
       end
-      self
-    end
-    
-    def inherited_constants
-      constants = {}
-      each_control_ancestor do |ancestor|
-        constants = constants.merge(ancestor.control_module.constants_map)
+      
+      def customize(control)
+        inherited_custom_methods.each do |custom_methods|
+          control.send(@extension_method, custom_methods)
+        end
+        decorate_with_delegate_methods(control)
+        decorate_with_bindings_methods(control)
       end
-      constants
-    end
-    
-    def inherited_delegate_methods
-      delegate_methods = {}
-      each_control_ancestor do |ancestor|
-        delegate_methods = delegate_methods.merge(ancestor.control_module.delegate_map)
+      
+      def decorate_with_delegate_methods(control)
+        control.send(@extension_method, delegate_module_for_control_class)
       end
-      delegate_methods
-    end
-    
-    def inherited_custom_methods
-      methods = []
-      each_control_ancestor do |ancestor|
-        methods << ancestor.control_module.custom_methods if ancestor.control_module.custom_methods
-      end
-      methods
-    end
-    
-    def each_control_ancestor
-      control_class.ancestors.reverse.each do |ancestor|
-        Mappings.mappings.values.each do |mapper|
-          yield mapper if mapper.control_class == ancestor
+      
+      def delegate_module_for_control_class
+        unless 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, #{required_methods.inspect})
+                @_delegate_builder.add_delegated_method(block, "#{delegate_method}" #{parameters})
+              end
+            }
+          end
+          Mapper.delegate_modules[control_class] = delegate_module
         end
+        Mapper.delegate_modules[control_class] 
       end
-    end
-    
-    def customize(control)
-      inherited_custom_methods.each do |custom_methods|
-        control.send(@extension_method, custom_methods)
+      
+      def decorate_with_bindings_methods(control)
+        return if control_class == NSApplication
+        control.send(@extension_method, bindings_module_for_control(control)) if @map_bindings
       end
-      decorate_with_delegate_methods(control)
-      decorate_with_bindings_methods(control)
-    end
-
-    def decorate_with_delegate_methods(control)
-      control.send(@extension_method, delegate_module_for_control_class)
-    end
-    
-    def delegate_module_for_control_class
-      unless 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]
+      
+      def bindings_module_for_control(control)
+        return Mapper.bindings_modules[control_class] if Mapper.bindings_modules.has_key?(control_class)
+        instance = if control == control_class
+          control_class.alloc.init
+        else
+          control
         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, #{required_methods.inspect})
-              @_delegate_builder.add_delegated_method(block, "#{delegate_method}" #{parameters})
+        bindings_module = Module.new
+        instance.exposedBindings.each do |exposed_binding|
+          bindings_module.module_eval %{
+            def #{underscore(exposed_binding)}=(value)
+              if value.kind_of?(Hash)
+                options = value.delete(:options)
+                bind "#{exposed_binding}", toObject:value.keys.first, withKeyPath:value.values.first, options:options
+              else
+                set#{exposed_binding.capitalize}(value)
+              end
             end
           }
         end
-        Mapper.delegate_modules[control_class] = delegate_module
+        Mapper.bindings_modules[control_class] = bindings_module
+        bindings_module
       end
-      Mapper.delegate_modules[control_class] 
-    end
-    
-    def decorate_with_bindings_methods(control)
-      return if control_class == NSApplication
-      control.send(@extension_method, bindings_module_for_control(control)) if @map_bindings
-    end
-    
-    def bindings_module_for_control(control)
-      return Mapper.bindings_modules[control_class] if Mapper.bindings_modules.has_key?(control_class)
-      instance = if control == control_class
-        control_class.alloc.init
-      else
-        control
-      end
-      bindings_module = Module.new
-      instance.exposedBindings.each do |exposed_binding|
-        bindings_module.module_eval %{
-          def #{underscore(exposed_binding)}=(value)
-            if value.kind_of?(Hash)
-              options = value.delete(:options)
-              bind "#{exposed_binding}", toObject:value.keys.first, withKeyPath:value.values.first, options:options
-            else
-              set#{exposed_binding.capitalize}(value)
-            end
+
+      def remap_constants(tags)
+        constants = inherited_constants
+        if control_module.defaults
+          control_module.defaults.each do |key, value| 
+            tags[key] = value unless tags.has_key?(key)
           end
-        }
-      end
-      Mapper.bindings_modules[control_class] = bindings_module
-      bindings_module
-    end
-
-    def remap_constants(tags)
-      constants = inherited_constants
-      if control_module.defaults
-        control_module.defaults.each do |key, value| 
-          tags[key] = value unless tags.has_key?(key)
         end
-      end
-      result = {}
-      tags.each do |tag, value|
-        if constants[tag]
-          result[tag] = value.kind_of?(Array) ? value.inject(0) {|a, i| a|constants[tag][i]} : constants[tag][value]
-        else
-          result[tag] = value
+        result = {}
+        tags.each do |tag, value|
+          if constants[tag]
+            result[tag] = value.kind_of?(Array) ? value.inject(0) {|a, i| a|constants[tag][i]} : constants[tag][value]
+          else
+            result[tag] = value
+          end
         end
+        result
       end
-      result
+      
+      def underscore(camel_cased_word)
+        camel_cased_word.to_s.gsub(/::/, '/').
+          gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
+          gsub(/([a-z\d])([A-Z])/,'\1_\2').
+          tr("-", "_").
+          downcase
+      end
+      
     end
-    
-    def underscore(camel_cased_word)
-      camel_cased_word.to_s.gsub(/::/, '/').
-        gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
-        gsub(/([a-z\d])([A-Z])/,'\1_\2').
-        tr("-", "_").
-        downcase
-    end
-
   end
-end
+end
\ No newline at end of file

Modified: MacRuby/trunk/lib/hotcocoa/mappings/control.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings/control.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/mappings/control.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -10,7 +10,7 @@
 
   custom_methods do
    
-    include TargetActionConvenience 
+    include HotCocoa::Mappings::TargetActionConvenience 
     
     def text=(text)
       setStringValue(text)

Modified: MacRuby/trunk/lib/hotcocoa/mappings/layout_view.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings/layout_view.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/mappings/layout_view.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -1,4 +1,4 @@
-Mappings.map :layout_view => :LayoutView do
+HotCocoa::Mappings.map :layout_view => :"HotCocoa::LayoutView" do
 
   defaults :frame => DefaultEmptyRect, :layout => {}
 

Modified: MacRuby/trunk/lib/hotcocoa/mappings/toolbar_item.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings/toolbar_item.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/mappings/toolbar_item.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -21,7 +21,7 @@
 
   custom_methods do
     
-    include TargetActionConvenience
+    include HotCocoa::Mappings::TargetActionConvenience
     
     def priority=(value)
       setVisibilityPriority(value)

Modified: MacRuby/trunk/lib/hotcocoa/mappings.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/mappings.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -30,15 +30,16 @@
       framework = options.delete(:framework)
       mapped_name = options.keys.first
       mapped_value = options.values.first
+      const = Object.full_const_get(mapped_value)
       if mapped_value.kind_of?(Class)
         m = Mapper.map_instances_of(mapped_value, mapped_name, &block)
         mappings[m.builder_method] = m
-      elsif framework.nil? || Object.const_defined?(mapped_value)
-        m = Mapper.map_instances_of(Object.const_get(mapped_value), mapped_name, &block)
+      elsif framework.nil? || const
+        m = Mapper.map_instances_of(const, mapped_name, &block)
         mappings[m.builder_method] = m
       else
         on_framework(framework) do
-          m = Mapper.map_instances_of(Object.const_get(mapped_value), mapped_name, &block)
+          m = Mapper.map_instances_of(const, mapped_name, &block)
           mappings[m.builder_method] = m
         end
       end

Added: MacRuby/trunk/lib/hotcocoa/object_ext.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/object_ext.rb	                        (rev 0)
+++ MacRuby/trunk/lib/hotcocoa/object_ext.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -0,0 +1,21 @@
+
+# This is ripped from sam/extlib and changed a little bit.
+class Object
+
+  # @param name<String> The name of the constant to get, e.g. "Merb::Router".
+  #
+  # @return <Object> The constant corresponding to the name.
+  def full_const_get(name)
+    list = name.split("::")
+    list.shift if list.first.strip.empty?
+    obj = self
+    list.each do |x|
+      # This is required because const_get tries to look for constants in the
+      # ancestor chain, but we only want constants that are HERE
+      obj = obj.const_defined?(x) ? obj.const_get(x) : nil
+      return false unless obj
+    end
+    obj
+  end
+
+end
\ No newline at end of file

Modified: MacRuby/trunk/lib/hotcocoa/standard_rake_tasks.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/standard_rake_tasks.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa/standard_rake_tasks.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -1,11 +1,11 @@
-AppConfig = ApplicationBuilder::Configuration.new("config/build.yml")
+AppConfig = HotCocoa::ApplicationBuilder::Configuration.new("config/build.yml")
 
 task :deploy => [:clean] do
-  ApplicationBuilder.build(AppConfig, :deploy => true)
+  HotCocoa::ApplicationBuilder.build(AppConfig, :deploy => true)
 end
 
 task :build do
-  ApplicationBuilder.build(AppConfig)
+  HotCocoa::ApplicationBuilder.build(AppConfig)
 end
 
 task :run => [:build] do

Modified: MacRuby/trunk/lib/hotcocoa.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa.rb	2009-01-20 14:49:31 UTC (rev 798)
+++ MacRuby/trunk/lib/hotcocoa.rb	2009-01-20 20:09:12 UTC (rev 799)
@@ -6,6 +6,8 @@
   
 end
 
+require 'hotcocoa/object_ext'
+require 'hotcocoa/kernel_ext'
 require 'hotcocoa/mappings'
 require 'hotcocoa/behaviors'
 require 'hotcocoa/mapping_methods'
@@ -15,7 +17,6 @@
 require 'hotcocoa/notification_listener'
 require 'hotcocoa/data_sources/table_data_source'
 require 'hotcocoa/data_sources/combo_box_data_source'
-require 'hotcocoa/kernel_ext'
 require 'hotcocoa/plist'
 require 'hotcocoa/kvo_accessors'
 require 'hotcocoa/attributed_string'
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090120/2427448d/attachment-0001.html>


More information about the macruby-changes mailing list