summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/deps/mruby-require/mrblib/require.rb
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/deps/mruby-require/mrblib/require.rb97
1 files changed, 97 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/deps/mruby-require/mrblib/require.rb b/web/server/h2o/libh2o/deps/mruby-require/mrblib/require.rb
new file mode 100644
index 00000000..cdf25ace
--- /dev/null
+++ b/web/server/h2o/libh2o/deps/mruby-require/mrblib/require.rb
@@ -0,0 +1,97 @@
+class LoadError < ScriptError; end
+
+begin
+ eval "1", nil
+ def _require_eval_load(*args)
+ self.eval(*args)
+ end
+rescue ArgumentError
+ def _require_eval_load(*args)
+ self.eval(args[0])
+ end
+end
+
+module Kernel
+ def load(path)
+ raise TypeError unless path.class == String
+
+ if File.exist?(path) && File.extname(path) == ".mrb"
+ _load_mrb_file path
+ elsif File.exist?(path)
+ # _load_rb_str File.open(path).read.to_s, path
+ _require_eval_load File.open(path).read.to_s, nil, path
+ else
+ raise LoadError.new "File not found -- #{path}"
+ end
+
+ true
+ end
+
+ def require(path)
+ raise TypeError unless path.class == String
+
+ # require method can load .rb, .mrb or without-ext filename only.
+ unless ["", ".rb", ".mrb"].include? File.extname(path)
+ raise LoadError.new "cannot load such file -- #{path}"
+ end
+
+ filenames = []
+ if File.extname(path).size == 0
+ filenames << "#{path}.rb"
+ filenames << "#{path}.mrb"
+ else
+ filenames << path
+ end
+
+ dir = nil
+ filename = nil
+ if ['/', '.'].include? path[0]
+ path0 = filenames.find do |fname|
+ File.file?(fname) && File.exist?(fname)
+ end
+ else
+ dir = ($LOAD_PATH || []).find do |dir0|
+ filename = filenames.find do |fname|
+ path0 = File.join dir0, fname
+ File.file?(path0) && File.exist?(path0)
+ end
+ end
+ path0 = dir && filename ? File.join(dir, filename) : nil
+ end
+
+ if path0 && File.exist?(path0) && File.file?(path0)
+ __require__ path0
+ else
+ raise LoadError.new "cannot load such file -- #{path}"
+ end
+ end
+
+ def __require__(realpath)
+ raise LoadError.new "File not found -- #{realpath}" unless File.exist? realpath
+ $" ||= []
+ $__mruby_loading_files__ ||= []
+
+ # already required
+ return false if ($" + $__mruby_loading_files__).include?(realpath)
+
+ $__mruby_loading_files__ << realpath
+ load realpath
+ $" << realpath
+ $__mruby_loading_files__.delete realpath
+
+ true
+ end
+end
+
+
+$LOAD_PATH ||= []
+$LOAD_PATH << '.'
+
+if Object.const_defined?(:ENV)
+ $LOAD_PATH.unshift(*ENV['MRBLIB'].split(':')) unless ENV['MRBLIB'].nil?
+end
+
+$LOAD_PATH.uniq!
+
+$" ||= []
+$__mruby_loading_files__ ||= []