diff --git a/bin/atomy b/bin/atomy index 15fe66b..33a74d7 100755 --- a/bin/atomy +++ b/bin/atomy @@ -5,6 +5,7 @@ require "atomy" require "atomy/bootstrap" require "atomy/codeloader" require "atomy/parser" +require "atomy/rubygems" file, *_ = ARGV diff --git a/lib/atomy/rubygems.rb b/lib/atomy/rubygems.rb new file mode 100644 index 0000000..591b3b7 --- /dev/null +++ b/lib/atomy/rubygems.rb @@ -0,0 +1,44 @@ +# Patch up RubyGems/require (indirectly) to support loading +# Atomy gems + +Gem.suffixes << ".ay" + +module Kernel + alias atomy_original_gem_original_require gem_original_require + alias atomy_original_require require + + def require(name) + if file = Atomy::CodeLoader.find_source(name) + Atomy::CodeLoader.require(file) + else + atomy_original_require(name) + end + end + + def gem_original_require(name) + if file = Atomy::CodeLoader.find_source(name) + Atomy::CodeLoader.require(file) + else + atomy_original_gem_original_require(name) + end + end + + module_function :require + module_function :gem_original_require + + private :atomy_original_gem_original_require + private :atomy_original_require +end + +# this is here so it's more likely to be filtered out of caller checks +# +# (e.g. sinatra/base) +class Atomy::Module + def require(path) + if path.start_with? "./" + Kernel.require(File.expand_path("../" + path, @file.to_s)) + else + Kernel.require(path) + end + end +end