Sha256: 1998b1739fc92fc283c0ec843f348cc5d811f8b80f9cbee597ace8a0fa425d80

Contents?: true

Size: 1.99 KB

Versions: 6

Compression:

Stored size: 1.99 KB

Contents

module Embulk
  # logger should be setup first
  require 'embulk/logger'

  def self.lib_path(path)
    path = '' if path == '/'
    jar, resource = __FILE__.split("!", 2)
    if resource
      lib = resource.split("/")[0..-2].join("/")
      "#{jar}!#{lib}/#{path}"
    elsif __FILE__ =~ /^classpath:/
      lib = __FILE__.split("/")[0..-2].join("/")
      "#{lib}/#{path}"
    else
      lib = File.expand_path File.dirname(__FILE__)
      File.join(lib, *path.split("/"))
    end
  end

  def self.require_classpath
    if __FILE__.include?("!")
      # single jar. __FILE__ should point path/to/embulk.jar!/embulk.rb
      # which means that embulk.jar is already loaded in this JVM.

    elsif __FILE__ =~ /^classpath:/
      # already in classpath

    else
      # gem package. __FILE__ should point path/to/embulk/lib/embulk.rb
      # that requires here to load ../classpath/*.jar to start EmbulkEmbed.
      gem_root = File.expand_path('..', File.dirname(__FILE__))
      classpath_dir = File.join(gem_root, "classpath")
      jars = Dir.entries(classpath_dir).select{|f| f =~ /\.jar$/ }.sort
      jars.each do |jar|
        require File.join(classpath_dir, jar)
      end
    end
  end

  def self.setup(system_config={})
    unless RUBY_PLATFORM =~ /java/i
      raise "Embulk.setup works only with JRuby."
    end

    require 'json'

    require_classpath

    systemConfigJson = system_config.merge({
      # use the global ruby runtime for all ScriptingContainer
      # injected by org.embulk.jruby.JRubyScriptingModule
      use_global_ruby_runtime: true
    }).to_json

    bootstrap = org.embulk.EmbulkEmbed::Bootstrap.new
    systemConfig = bootstrap.getSystemConfigLoader.fromJsonString(systemConfigJson)
    bootstrap.setSystemConfig(systemConfig)
    embed = bootstrap.java_method(:initialize).call  # see embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.

    # see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule

    Embulk.const_set :Runner, EmbulkRunner.new(embed)
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
embulk-0.7.7 lib/embulk.rb
embulk-0.7.7-java lib/embulk.rb
embulk-0.7.6 lib/embulk.rb
embulk-0.7.6-java lib/embulk.rb
embulk-0.7.5 lib/embulk.rb
embulk-0.7.5-java lib/embulk.rb