lib/cep.rb in cep-0.0.2 vs lib/cep.rb in cep-0.0.4
- old
+ new
@@ -1,25 +1,22 @@
require 'net/http'
require 'nokogiri'
require 'addressable/uri'
+require 'correios/address_search_response'
class Cep
URL = 'http://m.correios.com.br/movel/buscaCepConfirma.do'
- def initialize
- @ceps = []
- @_cep = {}
+ def search(term)
+ response = query({cepEntrada: term, metodo: :buscarCep})
+ Correios::AddressSearchResponse.new(response.body).addresses
end
+ alias_method :address, :search
- def address(cep)
- response = query({cepEntrada: cep, metodo: :buscarCep})
- values = values(response)
- end
-
def cep(cep)
- address(cep)[0]
+ search(cep)[0]
end
def url(params = {})
uri = Addressable::URI.new
uri.query_values = params
@@ -27,79 +24,7 @@
end
def query(params = {})
uri = URI.parse(url(params))
Net::HTTP.get_response(uri)
- end
-
- def values(response)
- Nokogiri::HTML(response.body).css('.respostadestaque').each do |el|
- el.parent.children.children.each_slice(2).each do |k,v|
- elements = clean_element(k, v)
- handle_keys(elements)
- end
- end
- @ceps.uniq
- end
-
- private
-
- def clean_element(key, value)
- key = resolve_text(key.text).gsub(/:/,'').downcase unless key.nil?
- value = resolve_text(value.text) unless value.nil?
- [key, value]
- end
-
- def resolve_text(text)
- text.gsub(/[\n\t]/,'').gsub(/\s+/,' ').strip
- end
-
- def handle_keys(elements)
- key = elements[0]
- value = elements[1]
- unless key == 'opções' and value == nil
- add_cep_in_ceps(key)
- resolve_adrress(key, value)
- resolve_locality(key, value)
- resolve_others(key, value)
- end
- end
-
- def add_cep_in_ceps(key)
- if key_name_present?(key, ['logradouro','endereço'])
- @ceps << @_cep unless @_cep.empty?
- @_cep = {}
- end
- @ceps
- end
-
- def resolve_adrress(key, value)
- if key_name_present?(key, ['logradouro','endereço'])
- @_cep[:tipo_logradouro] = value.split(' ').map{|v| v.strip}[0]
- @_cep[:logradouro] = value
- end
- @_cep
- end
-
- def resolve_locality(key, value)
- if key_name_present?(key, ['localidade / uf'])
- @_cep[locality(key,0).to_sym] = locality(value,0)
- @_cep[locality(key,1).to_sym] = locality(value,1)
- end
- @_cep
- end
-
- def resolve_others(key, value)
- unless key_name_present?(key, ['logradouro','endereço','localidade / uf'])
- @_cep[key.to_sym] = value
- end
- @_cep
- end
-
- def locality(el, pos)
- el.split('/').map{|v| v.strip}[pos]
- end
-
- def key_name_present?(key, names=[])
- names.include?(key)
end
end
\ No newline at end of file