Sha256: a2d927d87f2908ca9bee98c32a0a120fc945da34275aaadc042b87809d84f79a

Contents?: true

Size: 1022 Bytes

Versions: 11

Compression:

Stored size: 1022 Bytes

Contents

require 'net/http'
require 'uri'
require 'json'

module Chronicle
  module ETL
    class RestLoader < Chronicle::ETL::Loader
      register_connector do |r|
        r.description = 'a REST endpoint'
      end

      setting :hostname, required: true
      setting :endpoint, required: true
      setting :access_token

      def load(record)
        payload = Chronicle::ETL::JSONAPISerializer.serialize(record)
        # have the outer data key that json-api expects
        payload = { data: payload } unless payload[:data]

        uri = URI.parse("#{@config.hostname}#{@config.endpoint}")

        header = {
          "Authorization" => "Bearer #{@config.access_token}",
          "Content-Type": 'application/json'
        }
        use_ssl = uri.scheme == 'https'

        Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
          request = Net::HTTP::Post.new(uri.request_uri, header)
          request.body = payload.to_json
          http.request(request)
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
chronicle-etl-0.5.5 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.5.4 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.5.3 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.5.2 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.5.1 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.5.0 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.4.4 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.4.3 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.4.2 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.4.1 lib/chronicle/etl/loaders/rest_loader.rb
chronicle-etl-0.4.0 lib/chronicle/etl/loaders/rest_loader.rb