class SmartyStreets::Request

Attributes

location[RW]

Public Class Methods

new(location) click to toggle source
# File lib/smarty_streets/request.rb, line 12
def initialize(location)
  @location = location
end

Public Instance Methods

standardize!() click to toggle source
# File lib/smarty_streets/request.rb, line 16
def standardize!
  url = build_request_url(@location)
  handle_response(send_request(url))
end

Private Instance Methods

build_request_url(location) click to toggle source
# File lib/smarty_streets/request.rb, line 49
def build_request_url(location)
  parameters = {
    input_id: location.input_id,
    street: location.street,
    street2: location.street2,
    secondary: location.secondary,
    city: location.city,
    state: location.state,
    zipcode: location.zipcode,
    lastline: location.lastline,
    addressee: location.addressee,
    urbanization: location.urbanization,
    candidates: location.candidates || SmartyStreets.configuration.candidates,
    "auth-id" => SmartyStreets.configuration.auth_id,
    "auth-token" => SmartyStreets.configuration.auth_token
  }

  parameter_string = parameters.collect { |k,v|
    "#{k.to_s}=#{CGI.escape(v.to_s)}"
  }.join('&')

  'https://' + SmartyStreets.configuration.api_url + '/street-address/?' + parameter_string
end
handle_response(response) click to toggle source
# File lib/smarty_streets/request.rb, line 23
def handle_response(response)
  raise InvalidCredentials if response.code == 401
  raise MalformedData      if response.code == 400
  raise PaymentRequired    if response.code == 402
  raise RemoteServerError  if response.code == 500
  raise NoValidCandidates  if response.body.nil?

  JSON.parse(response.body).collect do |l|
    location = Location.new
    location.street                 = l['delivery_line_1']
    location.street2                = l['delivery_line_2']
    location.city                   = l['components']['city_name']
    location.state                  = l['components']['state_abbreviation']
    location.zipcode                = l['components']['zipcode'] + '-' + l['components']['plus4_code']
    location.delivery_point_barcode = l['delivery_point_barcode']
    location.components             = l['components']
    location.metadata               = l['metadata']
    location.analysis               = l['analysis']
    location
  end
end
send_request(url) click to toggle source
# File lib/smarty_streets/request.rb, line 45
def send_request(url)
  HTTParty.get(url)
end