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 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
@@ -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.por_cep(22640100) ==> ['Avenida', 'das Américas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', '22640100']
13
- # BuscaEndereco.por_cep('22640100') ==> ['Avenida', 'das Américas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', '22640100']
14
- # BuscaEndereco.por_cep('22640-100') ==> ['Avenida', 'das Américas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', '22640100']
15
- # BuscaEndereco.por_cep('22.640-100') ==> ['Avenida', 'das Américas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', '22640100']
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.por_cep('0000000') ==> RuntimeError 'O CEP informado possui um formato inválido.'
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 array com os dados de endereçamento para o cep informado ou um erro quando o serviço está indisponível,
50
- # quando o cep informado possui um formato inválido ou quando o endereço não foi encontrado.
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.por_cep(22640100) ==> ['Avenida', 'das Américas', 'Barra da Tijuca', 'RJ', 'Rio de Janeiro', 22640100]
54
- def self.por_cep(numero)
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 << Iconv.conv("utf-8", "ISO-8859-1", doc[field])
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 << cep
88
+
89
+ retorno[:cep] = cep
90
+ retorno
72
91
  end
73
92
  end
data/lib/brcep/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module BrCep
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 0
6
6
 
7
7
  STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
@@ -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.por_cep(22640100)
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.por_cep(invalid_zip)
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 = ['Avenida', 'das Américas', 'Barra da Tijuca', 'Rio de Janeiro', 'RJ', cep]
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.por_cep(valid_zip)
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 = ["Avenida", "Raimundo Pereira de Magalhães", "Jardim Iris", "São Paulo", "SP", cep]
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.por_cep(cep)
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.por_cep("12345678")
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.1.0
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-02-26 00:00:00.000000000Z
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: &2152246600 !ruby/object:Gem::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: *2152246600
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: &2152245040 !ruby/object:Gem::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: *2152245040
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: 3897089543070755465
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.15
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...