Sha256: 98291f3521f2f8a398d6a505b173c6b1bb13af9cafd600cc247bc5c033327a26

Contents?: true

Size: 1.61 KB

Versions: 4

Compression:

Stored size: 1.61 KB

Contents

module Embulk
  require 'json'

  class DataSource < Hash
    def param(key, type, options={})
      if self.has_key?(key)
        v = self[key]
        value =
          case type
          when :integer
            Integer(v)
          when :float
            Float(v)
          when :string
            String(v)
          when :bool
            !!v  # TODO validation
          when :hash
            raise ArgumentError, "Invalid value for :hash" unless v.is_a?(Hash)
            v
          when :array
            raise ArgumentError, "Invalid value for :array" unless v.is_a?(Array)
            v
          else
            unless type.respond_to?(:load)
              raise ArgumentError, "Unknown type #{type.to_s.dump}"
            end
            type.load(v)
          end

      elsif options.has_key?(:default)
        value = options[:default]

      else
        raise "Required field #{key.to_s.dump} is not set"
      end

      return value
    end

    if Embulk.java?
      def self.from_java(java_data_source_impl)
        json = java_data_source_impl.toString
        new.merge!(JSON.parse(json))
      end

      def self.from_ruby_hash(hash)
        new.merge!(hash)
      end

      def to_java
        json = to_json
        Java::Injected::ModelManager.readObject(Java::DataSourceImpl.java_class, json.to_java)
      end

      def load_config(task_type)
        Java::Injected::ModelManager.readObjectWithConfigSerDe(task_type.java_class, to_json.to_java)
      end

      def load_task(task_type)
        Java::Injected::ModelManager.readObject(task_type.java_class, to_json.to_java)
      end
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
embulk-0.4.3 lib/embulk/data_source.rb
embulk-0.4.2 lib/embulk/data_source.rb
embulk-0.4.1 lib/embulk/data_source.rb
embulk-0.4.0 lib/embulk/data_source.rb