scooterw/ffi-ogr

View on GitHub
lib/ffi-ogr/http_reader.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'fileutils'
require 'securerandom'
require 'faraday'
require 'faraday_middleware'

module OGR
  class HttpReader

    TF_MAP = {
      true => 1,
      false => 0,
      1 => true,
      0 => false
    }

    def read(url, writeable=false)
      file_extension = url.split('.').last
      driver = OGR::DRIVER_TYPES[file_extension]

      if driver.nil?
        unless url =~ /FeatureServer/
          raise RuntimeError.new "File type not supported."
        else
          # ? assume Esri Feature Service ?
          file_extension = 'json'
          driver = OGR::DRIVER_TYPES[file_extension]
        end
      end

      connection = Faraday.new url do |conn|
        conn.use FaradayMiddleware::FollowRedirects
        conn.adapter Faraday.default_adapter
      end

      http_data = connection.get.body

      ogr_driver = OGR::FFIOGR::OGRGetDriverByName driver
      data_source = OGR::FFIOGR::OGR_Dr_Open ogr_driver, http_data, TF_MAP[writeable]
      OGR::Tools.cast_data_source data_source
    end
  end
end