smarty_streets.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. require "rest_client"
  2. module SmartyStreets
  3. def self.get_city_state(zipcode)
  4. url = "https://us-zipcode.api.smartystreets.com/lookup"
  5. res = post(url, base_params.merge(zipcode: zipcode))
  6. if res && !res.empty?
  7. res.first["city_states"].try :first
  8. end
  9. end
  10. def self.get_congressional_district(street, zipcode)
  11. url = "https://api.smartystreets.com/street-address"
  12. res = post(url, base_params.merge(street: street, zipcode: zipcode))
  13. if res && res.first
  14. district = res.first.dig("metadata", "congressional_district")
  15. district = "0" if district == "AL"
  16. [res.first["components"]["state_abbreviation"], district]
  17. end
  18. end
  19. private
  20. def self.post(url, params)
  21. begin
  22. res = JSON.parse RestClient.get("#{url}?#{params.to_query}")
  23. return res
  24. rescue => e
  25. Rails.logger.error "#{ e } (#{ e.class })!"
  26. return false
  27. end
  28. end
  29. def self.base_params
  30. {
  31. "auth-id" => Rails.application.secrets.smarty_streets_id,
  32. "auth-token" => Rails.application.secrets.smarty_streets_token
  33. }
  34. end
  35. end