module Embulk

TODO(v2): Remove this file. github.com/embulk/embulk/issues/562

Constants

DEPRECATED_MESSAGE
VERSION_INTERNAL

Public Class Methods

const_missing(name) click to toggle source
Calls superclass method
# File lib/embulk/version.rb, line 9
def self.const_missing(name)
  if name == :VERSION
    unless @@warned
      if Embulk.method_defined?(:logger)
        Embulk.logger.warn(DEPRECATED_MESSAGE)
        @@warned = true
      else
        STDERR.puts(DEPRECATED_MESSAGE)
      end
    end
    return VERSION_INTERNAL
  else
    super
  end
end
lib_path(path) click to toggle source
# File lib/embulk.rb, line 5
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|uri:classloader):/
    lib = __FILE__.split("/")[0..-2].join("/")
    "#{lib}/#{path}"
  else
    lib = File.expand_path File.dirname(__FILE__)
    File.join(lib, *path.split("/"))
  end
end
logger() click to toggle source
# File lib/embulk/logger.rb, line 144
def self.logger
  @@logger
end
logger=(logger) click to toggle source
# File lib/embulk/logger.rb, line 148
def self.logger=(logger)
  @@logger = logger
end
require_classpath(already_warned=false) click to toggle source
# File lib/embulk.rb, line 20
def self.require_classpath(already_warned=false)
  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|uri:classloader):/
    # 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.

    unless already_warned
      STDERR.puts "################################################################################"
      STDERR.puts "[WARN] Embulk's gem package is deprecated, and will be removed from v0.9."
      STDERR.puts "[WARN] Use the jar version installed from http://dl.embulk.org/ instead."
      STDERR.puts "[WARN] See the issue and comment at: https://github.com/embulk/embulk/issues/628"
      STDERR.puts "################################################################################"
      STDERR.puts ""
    end

    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
setup(system_config={}) click to toggle source
# File lib/embulk.rb, line 50
def self.setup(system_config={})
  STDERR.puts "################################################################################"
  STDERR.puts "[WARN] Embulk's gem package is deprecated, and will be removed from v0.9."
  STDERR.puts "[WARN] Use the jar version installed from http://dl.embulk.org/ instead."
  STDERR.puts "[WARN] See the issue and comment at: https://github.com/embulk/embulk/issues/628"
  STDERR.puts "################################################################################"
  STDERR.puts ""

  unless RUBY_PLATFORM =~ /java/i
    raise "Embulk.setup works only with JRuby."
  end

  # require 'json' -- was required to format the system config into a JSON string.

  require_classpath(true)

  require 'embulk/runner'

  # see also embulk/java/bootstrap.rb loaded by JRubyScriptingModule
  runner_java = EmbulkRunner.new(Java::org.embulk.EmbulkSetup::setup(Java::java.util.HashMap.new(system_config)))
  Embulk.const_set :Runner, runner_java
end

Public Instance Methods

set(ruby_object) click to toggle source
# File lib/embulk/page_builder.rb, line 4
def set(ruby_object)
  # Using |java_send| so that it calls Java's correct overloaded |set| method, not Ruby's itself.
  if ruby_object.nil?
    self.java_send(:setNull, [])
  elsif ruby_object == true || ruby_object == false
    self.java_send(:set, [::Java::boolean], ruby_object.to_java(:boolean))
  elsif ruby_object.kind_of?(Integer)
    self.java_send(:set, [::Java::long], ruby_object.to_java(:long))
  elsif ruby_object.kind_of?(Float)
    self.java_send(:set, [::Java::double], ruby_object.to_java(:double))
  elsif ruby_object.kind_of?(String)
    self.java_send(:set, [::Java::java.lang.String], ruby_object.to_java(::Java::java.lang.String))
  elsif ruby_object.kind_of?(Time)
    self.java_send(:set, [::Java::org.embulk.spi.time.Timestamp],
                   ::Java::org.embulk.spi.time.Timestamp.ofEpochSecond(ruby_object.to_i, ruby_object.nsec))
  else
    self.java_send(:set, [::Java::org.msgpack.value.Value],
                   ::Java::org.msgpack.core.MessagePack.newDefaultUnpacker(ruby_object.to_msgpack.to_java_bytes).unpackValue())
  end
end