[macruby-changes] [805] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jan 22 08:30:36 PST 2009
Revision: 805
http://trac.macosforge.org/projects/ruby/changeset/805
Author: eloy.de.enige at gmail.com
Date: 2009-01-22 08:30:36 -0800 (Thu, 22 Jan 2009)
Log Message:
-----------
Object.full_const_get now raises a NameError is a const is missing. Also keep track of the frameworks which are loaded and use that information to decide whether or not to lookup a constant now, or once the framework has been loaded. Made tests green. Patch by Vincent Isambart.
Modified Paths:
--------------
MacRuby/trunk/lib/hotcocoa/mappings.rb
MacRuby/trunk/lib/hotcocoa/object_ext.rb
MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb
Modified: MacRuby/trunk/lib/hotcocoa/mappings.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings.rb 2009-01-21 09:47:51 UTC (rev 804)
+++ MacRuby/trunk/lib/hotcocoa/mappings.rb 2009-01-22 16:30:36 UTC (rev 805)
@@ -34,13 +34,9 @@
if mapped_value.kind_of?(Class)
add_mapping(mapped_name, mapped_value, &block)
else
- constant = Object.full_const_get(mapped_value)
- if framework.nil? || constant
+ on_framework(framework) do
+ constant = Object.full_const_get(mapped_value)
add_mapping(mapped_name, constant, &block)
- else
- on_framework(framework) do
- add_mapping(mapped_name, constant, &block)
- end
end
end
end
@@ -57,16 +53,27 @@
end
def self.on_framework(name, &block)
- (frameworks[name.to_s.downcase] ||= []) << block
+ name = name.nil? ? nil : name.to_s.downcase
+ if name.nil? or loaded_frameworks.include?(name)
+ block.call
+ else
+ (frameworks[name] ||= []) << block
+ end
end
def self.frameworks
@frameworks ||= {}
end
+ def self.loaded_frameworks
+ @loaded_frameworks ||= Set.new
+ end
+
def self.framework_loaded(name)
- if frameworks[name.to_s.downcase]
- frameworks[name.to_s.downcase].each do |mapper|
+ name = name.to_s.downcase
+ loaded_frameworks << name
+ if frameworks[name]
+ frameworks[name].each do |mapper|
mapper.call
end
end
Modified: MacRuby/trunk/lib/hotcocoa/object_ext.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/object_ext.rb 2009-01-21 09:47:51 UTC (rev 804)
+++ MacRuby/trunk/lib/hotcocoa/object_ext.rb 2009-01-22 16:30:36 UTC (rev 805)
@@ -12,8 +12,8 @@
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
+ raise NameError, "uninitialized constant #{self.name}::#{name}" unless obj.const_defined?(x)
+ obj = obj.const_get(x)
end
obj
end
Modified: MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb
===================================================================
--- MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb 2009-01-21 09:47:51 UTC (rev 804)
+++ MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb 2009-01-22 16:30:36 UTC (rev 805)
@@ -62,6 +62,7 @@
it "should create a mapping to a class in a framework with #map" do
mock = Mock.new
+ eval "class ::ClassInTheFrameWork; end"
Mappings.map(:klass => 'ClassInTheFrameWork', :framework => 'TheFramework') do
mock.call!
end
@@ -89,7 +90,7 @@
it "should resolve a constant when a framework, that's registered with #map, is loaded" do
assert_nothing_raised(NameError) do
- Mappings.map(:klass => 'ClassFromFramework', :framework => 'TheFramework') {}
+ Mappings.map(:klass => 'ClassFromFramework', :framework => 'TheFrameworkAfterLoad') {}
end
# The mapping should not yet exist
@@ -97,7 +98,7 @@
# now we actually define the class and fake the loading of the framework
eval "class ::ClassFromFramework; end"
- Mappings.framework_loaded('TheFramework')
+ Mappings.framework_loaded('TheFrameworkAfterLoad')
# It should be loaded by now
assert_equal ClassFromFramework, Mappings.mappings[:klass].control_class
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090122/ad43c33f/attachment.html>
More information about the macruby-changes
mailing list