Sha256: 27d88353f6f7d7ae46fe5af82cc94aaebf7c68442657d02f99f762ab79c2814f

Contents?: true

Size: 1.62 KB

Versions: 6

Compression:

Stored size: 1.62 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_object(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 java_object
        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

6 entries across 6 versions & 1 rubygems

Version Path
embulk-0.3.2 lib/embulk/data_source.rb
embulk-0.3.1 lib/embulk/data_source.rb
embulk-0.3.0 lib/embulk/data_source.rb
embulk-0.2.1 lib/embulk/data_source.rb
embulk-0.2.0 lib/embulk/data_source.rb
embulk-0.1.0 lib/embulk/data_source.rb