зеркало из https://github.com/github/ruby.git
* variable.c: Change autoload to call `require` through Ruby rather
than directly calling `rb_require_safe`. This allows things like RubyGems to intercept file loading done though `autoload`. [Feature #11140] * test/ruby/test_autoload.rb: Test for change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50494 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
1709458a20
Коммит
cd465d552c
|
@ -1,3 +1,12 @@
|
||||||
|
Fri May 15 06:54:19 2015 Aaron Patterson <tenderlove@ruby-lang.org>
|
||||||
|
|
||||||
|
* variable.c: Change autoload to call `require` through Ruby rather
|
||||||
|
than directly calling `rb_require_safe`. This allows things like
|
||||||
|
RubyGems to intercept file loading done though `autoload`.
|
||||||
|
[Feature #11140]
|
||||||
|
|
||||||
|
* test/ruby/test_autoload.rb: Test for change.
|
||||||
|
|
||||||
Wed Apr 8 19:18:02 2015 Shota Fukumori (sora_h) <her@sorah.jp>
|
Wed Apr 8 19:18:02 2015 Shota Fukumori (sora_h) <her@sorah.jp>
|
||||||
|
|
||||||
* enum.c (enum_grep_v, grep_i, grep_iter_i, Init_enum):
|
* enum.c (enum_grep_v, grep_i, grep_iter_i, Init_enum):
|
||||||
|
|
|
@ -161,6 +161,31 @@ p Foo::Bar
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_require_implemented_in_ruby_is_called
|
||||||
|
Kernel.module_eval do; alias :old_require :require; end
|
||||||
|
|
||||||
|
called_with = []
|
||||||
|
Kernel.send :define_method, :require do |path|
|
||||||
|
called_with << path
|
||||||
|
old_require path
|
||||||
|
end
|
||||||
|
|
||||||
|
Tempfile.create(['autoload', '.rb']) {|file|
|
||||||
|
file.puts 'class AutoloadTest; end'
|
||||||
|
file.close
|
||||||
|
add_autoload(file.path)
|
||||||
|
begin
|
||||||
|
assert(Object::AutoloadTest)
|
||||||
|
ensure
|
||||||
|
remove_autoload_constant
|
||||||
|
end
|
||||||
|
assert_equal [file.path], called_with
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure
|
||||||
|
Kernel.module_eval do; alias :require :old_require; undef :old_require; end
|
||||||
|
end
|
||||||
|
|
||||||
def add_autoload(path)
|
def add_autoload(path)
|
||||||
(@autoload_paths ||= []) << path
|
(@autoload_paths ||= []) << path
|
||||||
eval <<-END
|
eval <<-END
|
||||||
|
|
|
@ -1803,7 +1803,7 @@ static VALUE
|
||||||
autoload_require(VALUE arg)
|
autoload_require(VALUE arg)
|
||||||
{
|
{
|
||||||
struct autoload_data_i *ele = (struct autoload_data_i *)arg;
|
struct autoload_data_i *ele = (struct autoload_data_i *)arg;
|
||||||
return rb_require_safe(ele->feature, ele->safe_level);
|
return rb_funcall(rb_vm_top_self(), rb_intern("require"), 1, ele->feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
|
Загрузка…
Ссылка в новой задаче