matkoniecz/CartoCSSHelper

View on GitHub
lib/cartocss_helper/util/generic_cached_downloader.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require_relative 'generic_downloader.rb'

class GenericCachedDownloader
  def initialize(timeout: 20, error_message: nil, stop_on_timeout: true, wrapper: RestClientWrapper.new)
    @request_timeout = timeout
    @error_message = error_message
    @stop_on_timeout = stop_on_timeout
    @wrapper = wrapper
  end

  def get_specified_resource(url, cache_filename, description: nil, invalidate_cache: false)
    cache = read_from_cache(cache_filename)
    cache = nil if invalidate_cache
    return cache if cache != nil
    response = download(url, description)
    write_cache(response, cache_filename)

    return response
  end

  def read_from_cache(cache_filename)
    if File.exist?(cache_filename)
      file = File.new(cache_filename)
      cached = file.read
      file.close
      return cached
    end
    return nil
  end

  def get_cache_timestamp(cache_filename)
    return nil unless File.exist?(cache_filename)
    f = File.new(cache_filename)
    timestamp = f.mtime.to_i
    f.close
    return timestamp
  end

  def download(url, description)
    downloader = GenericDownloader.new(timeout: @request_timeout, error_message: @error_message, stop_on_timeout: @stop_on_timeout, wrapper: @wrapper)
    return downloader.get_specified_resource(url, description: description)
  end

  def write_cache(response, cache_filename)
    file = File.new(cache_filename, 'w')
    file.write response
    file.close
  end
end