class Tng::Gtk::Utils::Fetch

Constants

LOGGER

Attributes

site[RW]

Public Class Methods

call(params) click to toggle source
# File lib/tng/gtk/utils/fetch.rb, line 49
def self.call(params)
  msg=self.name+'#'+__method__.to_s
  began_at=Time.now.utc
  original_params = params.dup
  begin
    if params.key?(:uuid)
      no_cache=ENV.fetch('NO_CACHE', nil)
      
      unless no_cache
        cached = Tng::Gtk::Utils::Cache.cached?(params[:uuid])
        return cached unless (cached.nil? || cached.empty?)
      end
      uuid = params.delete :uuid
      uri = URI.parse("#{self.site}/#{uuid}")
      # mind that there cany be more params, so we might need to pass params as well
    else
      uri = URI.parse(self.site)
      uri.query = URI.encode_www_form(sanitize(params))
    end
    request = Net::HTTP::Get.new(uri)
    request['content-type'] = 'application/json'
    response = Net::HTTP.start(uri.hostname, uri.port) {|http| http.request(request)}
    case response
    when Net::HTTPSuccess
      body = response.read_body
      result = JSON.parse(body, quirks_mode: true, symbolize_names: true)
      cache_result(result)
      return result
    when Net::HTTPNotFound
      return {} unless uuid.nil?
      return []
    else
       LOGGER.error(start_stop: 'STOP', component:self.name, operation:__method__.to_s, message:"#{response.message}", status:'404', time_elapsed: Time.now.utc - began_at)
      return nil
    end
  rescue Exception => e
     LOGGER.error(start_stop: 'STOP', component:self.name, operation:__method__.to_s, message:"#{e.message}", time_elapsed: Time.now.utc - began_at)
  end
  nil
end

Private Class Methods

cache_result(result) click to toggle source
# File lib/tng/gtk/utils/fetch.rb, line 97
def self.cache_result(result)
  if result.is_a?(Hash)      
    Tng::Gtk::Utils::Cache.cache(result)
    return
  end
  result.each do |record|
    Tng::Gtk::Utils::Cache.cache(record)
  end
end
sanitize(params) click to toggle source
# File lib/tng/gtk/utils/fetch.rb, line 91
def self.sanitize(params)
  params[:page_number] ||= ENV.fetch('DEFAULT_PAGE_NUMBER', 0)
  params[:page_size]   ||= ENV.fetch('DEFAULT_PAGE_SIZE', 100)
  params
end