brcep 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.mkdn +31 -0
- data/Rakefile +2 -2
- data/lib/brcep/busca_endereco.rb +36 -17
- data/lib/brcep/version.rb +1 -1
- data/test/busca_endereco_test.rb +16 -7
- metadata +19 -9
- data/README +0 -1
data/README.mkdn
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# BrCep
|
2
|
+
|
3
|
+
## O que é?
|
4
|
+
|
5
|
+
O BrCep é um gem que tem como objetivo buscar um endereço com base no seu CEP. Para isso ele utiliza dois web services:
|
6
|
+
|
7
|
+
* Bronze Business
|
8
|
+
* Buscar CEP
|
9
|
+
|
10
|
+
Primeiro o endereço é procurado no web service da Bronze Business, e caso não ache o endereço lá, ou caso este web service esteja indisponível, o endereço será então procurado no web service do Buscar CEP. Portanto, o endereço tem duas chances para ser encontrado, sendo mais difícil o serviço de busca de endereço por CEP estar indisponível ou não encontrar o endereço.
|
11
|
+
|
12
|
+
## Como usar?
|
13
|
+
|
14
|
+
BuscaEndereco.por_cep(22640100) ==> ['Avenida', 'das Americas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', 22640100]
|
15
|
+
BuscaEndereco.por_cep('22640100') ==> ['Avenida', 'das Americas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', 22640100]
|
16
|
+
BuscaEndereco.por_cep('22640-100') ==> ['Avenida', 'das Americas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', 22640100]
|
17
|
+
BuscaEndereco.por_cep('22.640-100') ==> ['Avenida', 'das Americas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', 22640100]
|
18
|
+
|
19
|
+
## O que acontece se o CEP informado tiver um formato inválido?
|
20
|
+
|
21
|
+
BuscaEndereco.por_cep('00000000') ==> RuntimeError 'O CEP informado possui um formato inválido.'
|
22
|
+
|
23
|
+
## E se os dois web services estiverem indisponíveis?
|
24
|
+
|
25
|
+
BuscaEndereco.por_cep('22.640-100') ==> RuntimeError, "A busca de endereço por CEP está indisponível no momento."
|
26
|
+
|
27
|
+
## E se por acaso o CEP não for encontrado em nenhum dos dois web services:
|
28
|
+
|
29
|
+
BuscaEndereco.por_cep('12345678') ==> RuntimeError, "CEP 12345678 não encontrado."
|
30
|
+
|
31
|
+
P.S.: Nesse caso o endereço não foi encontrado porque não existe um endereço associado ao CEP 12345678. No entanto, pode haver situações em que CEPs que possuem endereços associados não tenham os seus endereços encontrados, no entanto, até o momemnto os dois web services utilizados cobrem todas os CEPs testados na prática.
|
data/Rakefile
CHANGED
@@ -32,7 +32,7 @@ Rake::RDocTask.new { |rdoc|
|
|
32
32
|
rdoc.options << "--line-numbers" << "--inline-source" << "-A cattr_accessor=object"
|
33
33
|
rdoc.options << "--charset" << "utf-8"
|
34
34
|
rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
|
35
|
-
rdoc.rdoc_files.include("README", "CHANGELOG")
|
35
|
+
rdoc.rdoc_files.include("README.mkdn", "CHANGELOG")
|
36
36
|
rdoc.rdoc_files.include("lib/**/*")
|
37
37
|
}
|
38
38
|
|
@@ -57,7 +57,7 @@ spec = Gem::Specification.new do |s|
|
|
57
57
|
s.add_development_dependency "rake"
|
58
58
|
s.add_development_dependency "mocha"
|
59
59
|
|
60
|
-
s.files = [ "Rakefile", "README", "CHANGELOG", "MIT-LICENSE" ]
|
60
|
+
s.files = [ "Rakefile", "README.mkdn", "CHANGELOG", "MIT-LICENSE" ]
|
61
61
|
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
62
62
|
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
63
63
|
end
|
data/lib/brcep/busca_endereco.rb
CHANGED
@@ -1,24 +1,22 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'net/http'
|
3
3
|
require 'cgi'
|
4
|
-
require 'iconv'
|
5
4
|
|
6
5
|
# Este recurso tem como finalidade encontrar um endereço através de um CEP, e
|
7
6
|
# para isso ele utiliza o web service da Republica Virtual (http://cep.republicavirtual.com.br/web_cep.php)
|
8
7
|
# Obviamente, para utilizar este serviço é necessário uma conexão com a Internet.
|
9
8
|
#
|
10
|
-
#Como fazer a busca de endereço por cep?
|
9
|
+
# Como fazer a busca de endereço por cep?
|
11
10
|
#
|
12
|
-
# BuscaEndereco.
|
13
|
-
# BuscaEndereco.
|
14
|
-
# BuscaEndereco.
|
15
|
-
# BuscaEndereco.
|
16
|
-
# BuscaEndereco.por_cep('04006000') ==> ["Rua", "Doutor Tomaz Carvalhal", "Paraiso", "SP", "Sao Paulo", "04006000"]
|
11
|
+
# BuscaEndereco.cep(22640100) ==> {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :uf => 'RJ', :cidade => 'Rio de Janeiro', :cep => '22640100'}
|
12
|
+
# BuscaEndereco.cep('22640100') ==> {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :uf => 'RJ', :cidade => 'Rio de Janeiro', :cep => '22640100'}
|
13
|
+
# BuscaEndereco.cep('22640-100') ==> {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :uf => 'RJ', :cidade => 'Rio de Janeiro', :cep => '22640100'}
|
14
|
+
# BuscaEndereco.cep('22.640-100') ==> {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :uf => 'RJ', :cidade => 'Rio de Janeiro', :cep => '22640100'}
|
17
15
|
#
|
18
16
|
# É feita uma validação para ver se o cep possui 8 caracteres após a remoção de '.' e '-'.
|
19
|
-
# BuscaEndereco.
|
17
|
+
# BuscaEndereco.cep('0000000') ==> RuntimeError 'O CEP informado possui um formato inválido.'
|
20
18
|
#
|
21
|
-
#Se necessário usar proxy, faça (de preferência em environment.rb):
|
19
|
+
# Se necessário usar proxy, faça (de preferência em environment.rb):
|
22
20
|
# BuscaEndereco.proxy_addr= 'endereco.do.proxy'
|
23
21
|
# BuscaEndereco.proxy_port= 999 # porta a ser utilizada
|
24
22
|
#
|
@@ -45,13 +43,28 @@ class BuscaEndereco
|
|
45
43
|
end
|
46
44
|
|
47
45
|
WEB_SERVICE_REPUBLICA_VIRTUAL_URL = "http://cep.republicavirtual.com.br/web_cep.php?formato=query_string&cep="
|
46
|
+
|
47
|
+
# Deprecated: Será removido
|
48
|
+
def self.por_cep(numero)
|
49
|
+
warn("DEPRECATION WARNING: O método `BuscaEnderedo.por_cep` será removido. Use o BuscaEndereco.cep e faça os ajustes necessarios")
|
50
|
+
_cep = cep(numero)
|
51
|
+
[
|
52
|
+
_cep[:tipo_logradouro],
|
53
|
+
_cep[:logradouro],
|
54
|
+
_cep[:bairro],
|
55
|
+
_cep[:cidade],
|
56
|
+
_cep[:uf],
|
57
|
+
_cep[:cep]
|
58
|
+
]
|
59
|
+
end
|
48
60
|
|
49
|
-
# Retorna um
|
50
|
-
# quando o
|
61
|
+
# Retorna um hash com os dados de endereçamento para o cep informado ou
|
62
|
+
# um erro quando o serviço está indisponível, quando o cep informado possui
|
63
|
+
# um formato inválido ou quando o endereço não foi encontrado.
|
51
64
|
#
|
52
65
|
# Exemplo:
|
53
|
-
# BuscaEndereco.
|
54
|
-
def self.
|
66
|
+
# BuscaEndereco.cep(22640100) ==> {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :uf => 'RJ', :cidade => 'Rio de Janeiro', :cep => '22640100'}
|
67
|
+
def self.cep(numero)
|
55
68
|
cep = numero.to_s.gsub(/[\.-]/, '')
|
56
69
|
raise "O CEP informado possui um formato inválido." unless cep.to_s.match(/^\d{8}$/)
|
57
70
|
|
@@ -60,14 +73,20 @@ class BuscaEndereco
|
|
60
73
|
|
61
74
|
doc = Hash[* CGI::parse(response.body).map {|k,v| [k,v[0]]}.flatten]
|
62
75
|
|
63
|
-
retorno =
|
76
|
+
retorno = {}
|
64
77
|
|
65
78
|
raise "CEP #{cep} não encontrado." unless [1,2].include?(doc['resultado'].to_i)
|
66
79
|
|
67
80
|
%w(tipo_logradouro logradouro bairro cidade uf).each do |field|
|
68
|
-
retorno
|
81
|
+
retorno[field.to_sym] = if RUBY_VERSION < '1.9'
|
82
|
+
require 'iconv'
|
83
|
+
Iconv.conv("utf-8", "ISO-8859-1", doc[field])
|
84
|
+
else
|
85
|
+
doc[field].force_encoding("ISO-8859-1").encode("UTF-8")
|
86
|
+
end
|
69
87
|
end
|
70
|
-
|
71
|
-
retorno
|
88
|
+
|
89
|
+
retorno[:cep] = cep
|
90
|
+
retorno
|
72
91
|
end
|
73
92
|
end
|
data/lib/brcep/version.rb
CHANGED
data/test/busca_endereco_test.rb
CHANGED
@@ -15,18 +15,27 @@ ZIPS_WITH_NO_ADDRESS_ASSOCIATED = [12345678, '12345678', '12.345678', '12345-678
|
|
15
15
|
URL = BuscaEndereco::WEB_SERVICE_REPUBLICA_VIRTUAL_URL
|
16
16
|
|
17
17
|
class BuscaEnderecoTest < Test::Unit::TestCase
|
18
|
+
def test_if_warn_for_por_cep_usage
|
19
|
+
cep = VALID_ZIPS.sample
|
20
|
+
expected = {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :cidade => 'Rio de Janeiro', :uf => 'RJ', :cep => cep}
|
21
|
+
BuscaEndereco.expects(:warn).with("DEPRECATION WARNING: O método `BuscaEnderedo.por_cep` será removido. Use o BuscaEndereco.cep e faça os ajustes necessarios")
|
22
|
+
BuscaEndereco.expects(:cep).with(cep).returns(expected)
|
23
|
+
|
24
|
+
assert_equal expected.values, BuscaEndereco.por_cep(cep)
|
25
|
+
end
|
26
|
+
|
18
27
|
def test_raise_without_service_on_both_web_services
|
19
28
|
FakeWeb.register_uri(:get, "#{URL}#{22640100}", :status => 504, :body => "Service Unavailable")
|
20
29
|
|
21
30
|
assert_raise RuntimeError, "A busca de endereço por CEP está indisponível no momento." do
|
22
|
-
BuscaEndereco.
|
31
|
+
BuscaEndereco.cep(22640100)
|
23
32
|
end
|
24
33
|
end
|
25
34
|
|
26
35
|
INVALID_ZIPS.each do |invalid_zip|
|
27
36
|
define_method "test_raise_for_invalid_zip_code_#{invalid_zip}" do
|
28
37
|
assert_raise RuntimeError, "O CEP informado possui um formato inválido." do
|
29
|
-
BuscaEndereco.
|
38
|
+
BuscaEndereco.cep(invalid_zip)
|
30
39
|
end
|
31
40
|
end
|
32
41
|
end
|
@@ -34,24 +43,24 @@ class BuscaEnderecoTest < Test::Unit::TestCase
|
|
34
43
|
VALID_ZIPS.each do |valid_zip|
|
35
44
|
define_method "test_valid_code_#{valid_zip}" do
|
36
45
|
cep = VALID_ZIPS.first.to_s
|
37
|
-
expected =
|
46
|
+
expected = {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :cidade => 'Rio de Janeiro', :uf => 'RJ', :cep => cep}
|
38
47
|
body = "&resultado=1&resultado_txt=sucesso+-+cep+completo&uf=RJ&cidade=Rio+de+Janeiro&bairro=Barra+da+Tijuca&tipo_logradouro=Avenida&logradouro=das+Am%E9ricas"
|
39
48
|
|
40
49
|
FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
|
41
50
|
|
42
|
-
assert_equal expected,BuscaEndereco.
|
51
|
+
assert_equal expected,BuscaEndereco.cep(valid_zip)
|
43
52
|
end
|
44
53
|
end
|
45
54
|
|
46
55
|
VALID_ZIPS_WITH_ZERO_AT_BEGINNING.each do |valid_zip|
|
47
56
|
define_method "test_valid_code_#{valid_zip}" do
|
48
57
|
cep = VALID_ZIPS_WITH_ZERO_AT_BEGINNING.first
|
49
|
-
expected =
|
58
|
+
expected = {:tipo_logradouro => "Avenida", :logradouro => "Raimundo Pereira de Magalhães", :bairro => "Jardim Iris", :cidade => "São Paulo", :uf => "SP", :cep => cep}
|
50
59
|
body = "&resultado=1&resultado_txt=sucesso+-+cep+completo&uf=SP&cidade=S%E3o+Paulo&bairro=Jardim+Iris&tipo_logradouro=Avenida&logradouro=Raimundo+Pereira+de+Magalh%E3es"
|
51
60
|
|
52
61
|
FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
|
53
62
|
|
54
|
-
assert_equal expected, BuscaEndereco.
|
63
|
+
assert_equal expected, BuscaEndereco.cep(cep)
|
55
64
|
end
|
56
65
|
end
|
57
66
|
|
@@ -62,7 +71,7 @@ class BuscaEnderecoTest < Test::Unit::TestCase
|
|
62
71
|
assert_raise RuntimeError, "CEP #{cep} não encontrado." do
|
63
72
|
FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
|
64
73
|
|
65
|
-
BuscaEndereco.
|
74
|
+
BuscaEndereco.cep("12345678")
|
66
75
|
end
|
67
76
|
end
|
68
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brcep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,11 +15,11 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-08-28 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rake
|
22
|
-
requirement:
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
23
|
none: false
|
24
24
|
requirements:
|
25
25
|
- - ! '>='
|
@@ -27,10 +27,15 @@ dependencies:
|
|
27
27
|
version: '0'
|
28
28
|
type: :development
|
29
29
|
prerelease: false
|
30
|
-
version_requirements:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
31
36
|
- !ruby/object:Gem::Dependency
|
32
37
|
name: mocha
|
33
|
-
requirement:
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
34
39
|
none: false
|
35
40
|
requirements:
|
36
41
|
- - ! '>='
|
@@ -38,7 +43,12 @@ dependencies:
|
|
38
43
|
version: '0'
|
39
44
|
type: :development
|
40
45
|
prerelease: false
|
41
|
-
version_requirements:
|
46
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
42
52
|
description: brcep é uma das gems que compoem o Brazilian Rails
|
43
53
|
email:
|
44
54
|
- tapajos@gmail.com
|
@@ -53,7 +63,7 @@ extensions: []
|
|
53
63
|
extra_rdoc_files: []
|
54
64
|
files:
|
55
65
|
- Rakefile
|
56
|
-
- README
|
66
|
+
- README.mkdn
|
57
67
|
- CHANGELOG
|
58
68
|
- MIT-LICENSE
|
59
69
|
- lib/brcep/busca_endereco.rb
|
@@ -75,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
85
|
version: '0'
|
76
86
|
segments:
|
77
87
|
- 0
|
78
|
-
hash:
|
88
|
+
hash: -4051342479164425422
|
79
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
90
|
none: false
|
81
91
|
requirements:
|
@@ -85,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
95
|
requirements:
|
86
96
|
- none
|
87
97
|
rubyforge_project: brcep
|
88
|
-
rubygems_version: 1.8.
|
98
|
+
rubygems_version: 1.8.23
|
89
99
|
signing_key:
|
90
100
|
specification_version: 3
|
91
101
|
summary: brcep é uma das gems que compoem o Brazilian Rails
|
data/README
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Aqui vai o readme...
|