class ApiPostcodeNl::API

Constants

BASE_URL
NIL_RESULT_CODE

Public Class Methods

address(postcode, house_number, house_number_addition = nil) click to toggle source
# File lib/api_postcode_nl/api.rb, line 66
def address(postcode, house_number, house_number_addition = nil)
  if house_number_addition.blank? && house_number
    # attempt to get a house_number_addition from the house number
    house_number = house_number.to_s
    number = house_number.split(/[^0-9]/)[0] 
    house_number_addition = house_number.sub(number, "")
    house_number = number 
  end
  
  if postcode.blank? || house_number.blank?
    return nil
  end
  
  key = cache_key(postcode, house_number, house_number_addition)
  if cache && result = cache.read(key)
    return nil if result == NIL_RESULT_CODE
    return result
  end
  
  result = parse(send(postcode, house_number, house_number_addition))
  
  cache.write(key, result ? result : NIL_RESULT_CODE, :expires_in => 1.week) if cache
  
  result
end
cache() click to toggle source
# File lib/api_postcode_nl/api.rb, line 96
def cache
  @@cache ||= nil
end
cache=(cache) click to toggle source
# File lib/api_postcode_nl/api.rb, line 92
def cache=(cache)
  @@cache = cache
end
cache_key(postcode, house_number, house_number_addition) click to toggle source
# File lib/api_postcode_nl/api.rb, line 62
def cache_key(postcode, house_number, house_number_addition)
  "api_postcode_nl_#{postcode.to_s.downcase}_#{house_number.to_s.downcase}_#{house_number_addition.to_s.downcase}"
end
get_url(postcode, house_number, house_number_addition = nil) click to toggle source
# File lib/api_postcode_nl/api.rb, line 13
def get_url(postcode, house_number, house_number_addition = nil)
  postcode, house_number, house_number_addition = [postcode, house_number, house_number_addition].map{|c| c.to_s.delete(" ")}
  "#{BASE_URL}/#{postcode}/#{house_number}/#{house_number_addition}"
end
handle_errors(result) click to toggle source
# File lib/api_postcode_nl/api.rb, line 33
def handle_errors(result)
  if result.is_a?(Net::HTTPNotFound)
    raise ApiPostcodeNl::InvalidPostcodeException, JSON.parse(result.body)["exception"]
  end
  #puts result.code.class
  #puts result.message
  #puts result.body
end
key() click to toggle source
# File lib/api_postcode_nl/api.rb, line 100
def key
  @@key
end
key=(value) click to toggle source
# File lib/api_postcode_nl/api.rb, line 104
def key=(value)
  @@key = value
end
parse(response) click to toggle source
# File lib/api_postcode_nl/api.rb, line 42
def parse(response)
  result = {}
  parsed_response = JSON.parse(response)
  { 
    street_name: parsed_response["street"],
    house_number: parsed_response["houseNumber"],
    postcode: parsed_response["postcode"],
    city:  parsed_response["city"],
    municipality: parsed_response["municipality"],
    province: parsed_response["province"],
    latitude: parsed_response["latitude"],
    longitude: parsed_response["longitude"],
    address_type: parsed_response["addressType"],
    purpose: parsed_response["purpose"],
    area: parsed_response["surfaceArea"],
    house_number_additions: parsed_response["houseNumberAdditions"],
    house_number_addition: parsed_response["houseNumberAddition"]
  }
end
secret() click to toggle source
# File lib/api_postcode_nl/api.rb, line 108
def secret
  @@secret
end
secret=(value) click to toggle source
# File lib/api_postcode_nl/api.rb, line 112
def secret=(value)
  @@secret = value
end
send(postcode, house_number, house_number_addition = nil) click to toggle source
# File lib/api_postcode_nl/api.rb, line 18
def send(postcode, house_number, house_number_addition = nil)
  uri = URI.parse(get_url(postcode, house_number, house_number_addition))
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  
  request = Net::HTTP::Get.new(uri.path)
  request.basic_auth key, secret
  result = http.start {|http|
    http.request(request)
  }
  handle_errors(result)
  
  result.body
end