[macruby-changes] [807] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jan 22 08:30:51 PST 2009
Revision: 807
http://trac.macosforge.org/projects/ruby/changeset/807
Author: eloy.de.enige at gmail.com
Date: 2009-01-22 08:30:50 -0800 (Thu, 22 Jan 2009)
Log Message:
-----------
Added tests for hotcocoa/object_ext.rb from upstream and missing ones. Also added poper copyright and license attribution to Sam Smoot.
Modified Paths:
--------------
MacRuby/trunk/lib/hotcocoa/object_ext.rb
Added Paths:
-----------
MacRuby/trunk/test-macruby/cases/hotcocoa/object_ext_test.rb
Modified: MacRuby/trunk/lib/hotcocoa/object_ext.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/object_ext.rb 2009-01-22 16:30:41 UTC (rev 806)
+++ MacRuby/trunk/lib/hotcocoa/object_ext.rb 2009-01-22 16:30:50 UTC (rev 807)
@@ -1,5 +1,7 @@
+# Object.full_const_get was taken from the ‘extlib’ project:
+# http://github.com/sam/extlib which is released under a MIT License and
+# copyrighted by Sam Smoot (2008).
-# 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".
@@ -7,13 +9,12 @@
# @return <Object> The constant corresponding to the name.
def full_const_get(name)
list = name.split("::")
- list.shift if list.first.strip.empty?
+ list.shift if list.first.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
- raise NameError, "uninitialized constant #{self.name}::#{name}" unless obj.const_defined?(x)
- obj = obj.const_get(x)
+ obj = obj.const_defined?(x) ? obj.const_get(x) : obj.const_missing(x)
end
obj
end
Added: MacRuby/trunk/test-macruby/cases/hotcocoa/object_ext_test.rb
===================================================================
--- MacRuby/trunk/test-macruby/cases/hotcocoa/object_ext_test.rb (rev 0)
+++ MacRuby/trunk/test-macruby/cases/hotcocoa/object_ext_test.rb 2009-01-22 16:30:50 UTC (rev 807)
@@ -0,0 +1,32 @@
+#!/usr/bin/env macruby
+
+require File.expand_path('../../../test_helper', __FILE__)
+require 'hotcocoa'
+
+module TestNamespaceForConstLookup
+ def self.const_missing(const)
+ @missing_const = const
+ end
+
+ def self.missing_const
+ @missing_const
+ end
+end
+
+class TestObjectExt < Test::Unit::TestCase
+ it 'should return a constant by FQ name _in_ receiver namespace' do
+ assert_equal HotCocoa, Object.full_const_get("HotCocoa")
+ assert_equal HotCocoa::Mappings, Object.full_const_get("HotCocoa::Mappings")
+ end
+
+ it "should call ::const_missing on the namespace which _does_ exist" do
+ Object.full_const_get('TestNamespaceForConstLookup::DoesNotExist')
+ assert_equal 'DoesNotExist', TestNamespaceForConstLookup.missing_const
+ end
+
+ it "should normally raise a NameError if a const cannot be found" do
+ assert_raise(NameError) do
+ Object.full_const_get('DoesNotExist::ForSure')
+ end
+ end
+end
\ No newline at end of file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090122/322fe843/attachment-0001.html>
More information about the macruby-changes
mailing list