add jems.gem so you can use it as is from jruby

This commit is contained in:
Christian Meier 2015-08-15 20:24:29 +02:00
parent cc2ecaf1f3
commit 903b38df2e
2 changed files with 48 additions and 0 deletions

14
gem/jems.gemspec Normal file
View File

@ -0,0 +1,14 @@
#-*- mode: ruby -*-
Gem::Specification.new do |s|
s.name = 'jems'
s.version = '0.1.5'
s.authors = ['Christian Meier']
s.summary = 'JRuby Jems'
s.files = ['jems.gemspec', 'lib/jems.rb']
s.platform = 'java'
s.requirements << "jar com.github.jrubygradle:jem, #{s.version}"
s.add_runtime_dependency 'jar-dependencies', '~> 0.1.15'
end
# vim: syntax=Ruby

34
gem/lib/jems.rb Normal file
View File

@ -0,0 +1,34 @@
require 'jems_jars'
module Jems
def self.jems_class_loader
@class_loader ||= com.github.jrubygradle.jem.JemsClassLoader.create
end
def self.activate( gem )
gemspec_raw = jems_class_loader.add_jem( gem )
gemspec = eval( gemspec_raw.to_ruby )
return false if Gem.loaded_specs[ gemspec.name ]
gem_name = 'gems/' + gemspec.full_name + '/.jrubydir'
url = jems_class_loader.get_resource( gem_name )
base = "uri:#{url.to_s.sub(/.jrubydir$/, '')}"
added = false
gemspec.require_paths.each do |path|
fullpath = File.join( base, path )
if File.directory?(fullpath) and not $LOAD_PATH.member?(fullpath)
# TODO rubygems insert before 'site_ruby' entry of the LOAD_PATH
$LOAD_PATH.unshift fullpath
added = true
end
end
# TODO check if gemspec.activate does the job better
if added
Gem.loaded_specs[ gemspec.name ] = gemspec
end
added
end
end