Vizzuality/gfw-climate

View on GitHub
app/models/for_compare.rb

Summary

Maintainability
A
1 hr
Test Coverage
require 'httparty'

class ForCompare
  include HTTParty
  default_timeout 10

  class << self

    def base_path
      "#{ENV['CDB_API_HOST']}?q="
    end

    def find_countries_or_jurisdictions(filter_params)
      params_array = filter_params[:path].to_s.downcase.split('/').map { |p| p.split('+') }
      params_array = params_array.map { |p| (p - ["0"] unless ( p[2].present? && p[2] != "0" ) ) || p }

      values = []
      (params_array.count).times do |i|
        url =  base_path
        # ToDo: Implementation for Protected areas
        url += if params_array[i][1].blank? || (params_array[i][1].present? && params_array[i][1] == '0')
                 search_country_query(params_array[i][0].upcase)
               else
                 search_jurisdiction_query(params_array[i][0].upcase, params_array[i][1])
               end

        i_cached_url = timeouts do
                         item_caching(params_array[i], nil, nil, nil) do
                           get(url)['rows'][0]
                         end
                       end
        values << i_cached_url
      end

      timeouts do
        item_caching(params_array, nil, nil, nil) do
          values
        end
      end
    end

    def search_country_query(iso)
      filter =  "iso = '#{iso}'"
      "SELECT iso, name_engli AS name, cartodb_id
       FROM #{CDB_COUNTRIES_TABLE}
       WHERE #{filter}"
    end

    def search_jurisdiction_query(iso, id)
      filter =  "iso = '#{iso}'"
      filter += "AND id_1 = #{id}"
      "SELECT cartodb_id, iso, id_1 as id, name_1 as name
       FROM #{CDB_SUBNAT_TABLE}
       WHERE #{filter}"
    end

    include Concerns::Cached

  end

end