Sha256: 00c4d67cbbbc7fd71c3efa549da2be6f3acadc92b95685346b56c500a7d110bc

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

module Embulk
  module Input
    class Elasticsearch < InputPlugin
      class Converter
        def self.get_sources(results, fields)
          hits = results['hits']['hits']
          hits.map { |hit|
            result = hit['_source']
            fields.map { |field|
              value = field['metadata'] ? hit[field['name']] : result[field['name']]
              convert_value(value, field)
            }
          }
        end

        def self.convert_value(value, field)
          return nil if value.nil?
          case field["type"]
          when "string"
            value
          when "long"
            value.to_i
          when "double"
            value.to_f
          when "boolean"
            if value.is_a?(TrueClass) || value.is_a?(FalseClass)
              value
            else
              downcased_val = value.downcase
              case downcased_val
              when 'true' then true
              when 'false' then false
              when '1' then true
              when '0' then false
              else nil
              end
            end
          when "timestamp"
            Time.parse(value)
          when "json"
            value
          else
            raise Elasticsearch::TypecastError.new "Unsupported type #{field['type']}"
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
embulk-input-elasticsearch-nosslverify-0.3.9 lib/embulk/input/elasticsearch/converter.rb
embulk-input-elasticsearch-nosslverify-0.3.8 lib/embulk/input/elasticsearch/converter.rb
embulk-input-elasticsearch-nosslverify-0.3.7 lib/embulk/input/elasticsearch/converter.rb
embulk-input-elasticsearch-nosslverify-0.3.6 lib/embulk/input/elasticsearch/converter.rb
embulk-input-elasticsearch-0.3.6 lib/embulk/input/elasticsearch/converter.rb