class Datafiniti::Api
Attributes
conn[RW]
data_type[R]
format[RW]
response[RW]
status[RW]
token[RW]
Public Class Methods
new(args={})
click to toggle source
# File lib/datafiniti/api.rb, line 15 def initialize(args={}) query = args[:query].gsub(/\bhttp\:\/\/\b/, '*') @format = "json" @conn ||= Faraday.new("https://#{ENV['DATAFINITI_API_KEY']}:@api.datafiniti.co/v2/data") @response = solr_query(query) end
Public Instance Methods
default_to_csv()
click to toggle source
# File lib/datafiniti/api.rb, line 30 def default_to_csv @format = "csv" end
default_to_json()
click to toggle source
# File lib/datafiniti/api.rb, line 34 def default_to_json @format = "json" end
download(force=false)
click to toggle source
# File lib/datafiniti/api.rb, line 42 def download(force=false) query = SolrQuery.build(@query) force ? @dl_code = get("/v2/data/locations/download?view=location_#{@format}&q=#{query}") : @dl_code ||= get("/v2/data/locations/download?view=location_#{@format}&q=#{query}") return download_object end
method_missing(name, *args, &block)
click to toggle source
# File lib/datafiniti/api.rb, line 48 def method_missing(name, *args, &block) @response.to_h[name.to_s] end
preview()
click to toggle source
# File lib/datafiniti/api.rb, line 38 def preview @response end
records()
click to toggle source
# File lib/datafiniti/api.rb, line 26 def records @response.records end
solr_query(query)
click to toggle source
# File lib/datafiniti/api.rb, line 59 def solr_query(query) query = build_new_query(query, true) @response = get("/v2/data/#{data_type}/preview?view=#{data_type.singularize}_#{format}&q=#{query}") update_records return @response end
where(query)
click to toggle source
# File lib/datafiniti/api.rb, line 52 def where(query) query = build_new_query(query) @response = get("/v2/data/#{data_type}/preview?view=#{data_type.singularize}_#{format}&q=#{query}") update_records return @response end
Private Instance Methods
build_new_query(query, solr=false)
click to toggle source
# File lib/datafiniti/api.rb, line 79 def build_new_query(query, solr=false) @query = escape_for_solr(query) remove_instance_variable(:@dl_code) unless @dl_code.nil? # query = solr ? query : SolrQuery.build(query) return @query end
download_object()
click to toggle source
# File lib/datafiniti/api.rb, line 125 def download_object if @dl_code.split(' ').size > 1 raise RuntimeError, @dl_code else get("/v2/status/#{@dl_code}") end end
escape_for_solr(string)
click to toggle source
# File lib/datafiniti/api.rb, line 86 def escape_for_solr(string) return string .gsub("!"){"\\!"} .gsub("?"){"\\?"} .gsub("%"){"\\%"} .gsub("+"){"\\+"} .gsub("-"){"\\-"} end
get(uri)
click to toggle source
# File lib/datafiniti/api.rb, line 95 def get(uri) error_code = { 401 => Datafiniti::Unauthorized, 400 => Datafiniti::BadRequest, 404 => Datafiniti::NotFound, 405 => Datafiniti::MethodNotAllowed, 415 => Datafiniti::UnsupportedMediaType, 500 => Datafiniti::InternalServerError, 502 => Datafiniti::APIUnavailable, 503 => Datafiniti::APIUnavailable, 504 => Datafiniti::APIUnavailable } api_response = @conn.get(uri) if api_response.status >= 400 case api_response.status when 401 then raise Exception.new(Datafiniti::Unauthorized, api_response.status) when 400 then raise Exception.new(Datafiniti::BadRequest, api_response.status) when 404 then raise Exception.new(Datafiniti::NotFound, api_response.status) when 405 then raise Exception.new(Datafiniti::MethodNotAllowed, api_response.status) when 415 then raise Exception.new(Datafiniti::UnsupportedMediaType, api_response.status) when 500 then raise Exception.new(Datafiniti::InternalServerError, api_response.status) when 502 then raise Exception.new(Datafiniti::APIUnavailable, api_response.status) when 503 then raise Exception.new(Datafiniti::APIUnavailable, api_response.status) when 504 then raise Exception.new(Datafiniti::APIUnavailable api_response.status) end else return DataContainer.new(JSON.parse(api_response.body)) end end
update_records()
click to toggle source
# File lib/datafiniti/api.rb, line 72 def update_records unless @response.is_a? String @records = @response.records rescue [] @total = @response.total rescue 0 end end