cep_facil 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +46 -9
- data/lib/cep_facil.rb +0 -2
- data/lib/cep_facil/api.rb +28 -45
- data/lib/cep_facil/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# CepFacil
|
2
2
|
|
3
|
-
Ruby wrapper para o serviço em cepfacil.com.br
|
3
|
+
Ruby wrapper para o serviço em [cepfacil.com.br]
|
4
4
|
|
5
5
|
## Instalação
|
6
6
|
|
7
|
-
NOTA
|
7
|
+
**NOTA:** Esse projeto encontra-se na versão 1.x, cuja API difere completamente das versões 0.x. Se você está procurando a versão mais antiga, veja a branch [0x], que se mantém intacta.
|
8
8
|
|
9
9
|
No `Gemfile`:
|
10
10
|
|
@@ -33,14 +33,23 @@ token = "1234567890"
|
|
33
33
|
|
34
34
|
address = CepFacil::API.new(cep, token)
|
35
35
|
|
36
|
+
### Acesso rápido via método de classe
|
37
|
+
|
38
|
+
address = CepFacil::API.get(cep, token) # Hash Notation => CepFacil::API.get(cep: cep, token: token)
|
39
|
+
|
40
|
+
# Argumentos como Hashes
|
41
|
+
|
42
|
+
address = CepFacil::API.new(cep: cep, token: token, format: "texto")
|
43
|
+
|
36
44
|
```
|
37
45
|
|
38
46
|
#### Retorna o endereço referente àquele CEP
|
39
47
|
|
40
|
-
O retorno é um objeto `CepFacil::API` que contem
|
48
|
+
O retorno é um objeto `CepFacil::API` que contem os seguintes métodos (propriedades) :
|
41
49
|
|
42
50
|
```ruby
|
43
51
|
|
52
|
+
|
44
53
|
address.cep # => "53417540"
|
45
54
|
|
46
55
|
address.type # => "Rua"
|
@@ -53,28 +62,54 @@ address.neighborhood # => "Artur Lundgren II"
|
|
53
62
|
|
54
63
|
address.street # => "Panelas"
|
55
64
|
|
65
|
+
# Também é possivel acessar utilizando metodos em português
|
66
|
+
|
67
|
+
address.tipo # => "Avenida"
|
68
|
+
|
69
|
+
address.rua # => "Francisco Navarro"
|
70
|
+
|
71
|
+
address.cidade # => "Varginha"
|
72
|
+
|
73
|
+
address.bairro # => "Centro"
|
74
|
+
|
75
|
+
address.estado # => "MG"
|
76
|
+
|
77
|
+
address.uf # => "MG"
|
78
|
+
|
56
79
|
```
|
57
80
|
|
58
81
|
Embora isso deva parecer óbvio, informo que essas propriedades são todas **READONLY**.
|
59
82
|
|
60
|
-
|
83
|
+
Você pode checar se o endereço retornado é válido utilizando o método `valid?`:
|
61
84
|
|
62
85
|
```ruby
|
63
86
|
|
64
|
-
address
|
87
|
+
address = CepFacil::API.new "53020-140", token
|
88
|
+
|
89
|
+
address.valid? # true
|
65
90
|
|
66
91
|
```
|
67
92
|
|
68
|
-
|
93
|
+
Adicionalmente, seu objeto `CepFacil::API` possui um método `full_format` e seu alias (`full_address`) que o descreve por extenso:
|
69
94
|
|
70
95
|
```ruby
|
96
|
+
|
97
|
+
address.full_format # => "Rua Panelas, Paulista - PE, Brasil"
|
98
|
+
|
99
|
+
address.full_address # => Avenida Francisco Navarro, Varginha - MG, Brasil" # Alias
|
100
|
+
|
101
|
+
```
|
102
|
+
Você pode passar o CEP como uma string qualquer, letras, caracteres especiais (pontos, hífens) são removidos automaticamente.
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
|
71
106
|
"12345-678"
|
107
|
+
"123.45.678"
|
108
|
+
"123-456.78"
|
72
109
|
"12345678"
|
73
|
-
12345678 #
|
110
|
+
12345678 # Não recomendado, prefira utilizar Strings
|
74
111
|
```
|
75
112
|
|
76
|
-
CepFacil funciona com esses três formatos.
|
77
|
-
|
78
113
|
## Integração com a gem Geocoder
|
79
114
|
|
80
115
|
A gem [Geocoder] é ótima para uso e manipulação de dados geográficos em projetos Ruby. Para integrá-la com o CepFacil, faça assim:
|
@@ -92,6 +127,7 @@ geocoded_by address.full_format
|
|
92
127
|
## Contribuidores
|
93
128
|
|
94
129
|
* Adriano Bacha - abacha@gmail.com
|
130
|
+
* Rafael Fidelis - rafa_fidelis@yahoo.com.br | http://defidelis.com
|
95
131
|
|
96
132
|
## Agradecimentos
|
97
133
|
|
@@ -106,5 +142,6 @@ CepFacil é liberado sob a [licença do MIT] com atribuições a Rodrigo Alves V
|
|
106
142
|
[0x]: https://github.com/rodrigoalvesvieira/cep_facil/tree/0x
|
107
143
|
[Geocoder]: https://github.com/alexreisner/geocoder
|
108
144
|
[CepFácil]: http://cepfacil.com.br
|
145
|
+
[cepfacil.com.br]: http://cepfacil.com.br
|
109
146
|
[Contribuidores]: #contribuidores
|
110
147
|
[licença do MIT]: http://pt.wikipedia.org/wiki/Licen%C3%A7a_MIT#Texto_da_licen.C3.A7a
|
data/lib/cep_facil.rb
CHANGED
data/lib/cep_facil/api.rb
CHANGED
@@ -1,53 +1,36 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
require "cgi"
|
1
|
+
# encoding: utf-8
|
4
2
|
require "net/http"
|
5
3
|
|
6
4
|
module CepFacil
|
7
5
|
class API
|
8
|
-
attr_reader :
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def initialize(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
http = Net::HTTP.new(@uri.host, @uri.port)
|
27
|
-
call = Net::HTTP::Get.new(@uri.request_uri)
|
28
|
-
|
29
|
-
response = http.request(call)
|
30
|
-
|
31
|
-
pattern = /^([a-z]+)\=/
|
32
|
-
|
33
|
-
result = response.body.split("&")
|
34
|
-
|
35
|
-
if result[2]
|
36
|
-
@type = result[2].gsub!(pattern, "")
|
37
|
-
@state = result[3].gsub!(pattern, "")
|
38
|
-
@city = result[4].gsub!(pattern, "")
|
39
|
-
@neighborhood = result[5].gsub!(pattern, "")
|
40
|
-
@street = result[6].gsub!(pattern, "")
|
41
|
-
else
|
42
|
-
return false
|
43
|
-
end
|
6
|
+
attr_reader :read
|
7
|
+
|
8
|
+
BASE_URL = "http://www.cepfacil.com.br/service/?filiacao=%s&cep=%s&formato=%s"
|
9
|
+
METHODS_PLACEHOLDER = {:estado => :uf , :type => :tipo , :state => :uf , :city => :cidade , :neighborhood => :bairro , :street => :descricao , :rua => :descricao}
|
10
|
+
|
11
|
+
def initialize(*args)
|
12
|
+
args = (args[0].is_a?(Hash) ? args[0] : Hash[[:cep,:token,:format].zip(args)])
|
13
|
+
args[:format] ||= "texto"
|
14
|
+
args[:cep] = args[:cep].to_s.gsub(/([^0-9]+)/,"")[0...8] # Removing all non-numeric caracters and limit to 8 caracters
|
15
|
+
|
16
|
+
uri = URI(BASE_URL % [args[:token],args[:cep],args[:format]])
|
17
|
+
@read = Net::HTTP.get(uri)
|
18
|
+
@data = args[:format].to_s == "texto" ? Hash[@read.split("&").map { |i| i.split("=") } ] : @read # Need a better implementation
|
19
|
+
return self
|
20
|
+
end
|
21
|
+
def valid?
|
22
|
+
@data.is_a?(Hash) and @data.size > 1
|
44
23
|
end
|
45
|
-
|
46
|
-
##
|
47
|
-
# Descreve o endereço obtido, por extenso. i.e: "Rua Panelas, Paulista - PE, Brasil"
|
48
|
-
#
|
49
24
|
def full_format
|
50
|
-
"#{
|
25
|
+
"#{type} #{street}, #{city} - #{state}, Brasil"
|
26
|
+
end
|
27
|
+
def self.get(*args)
|
28
|
+
self.new(*args)
|
29
|
+
end
|
30
|
+
private
|
31
|
+
def method_missing(*args)
|
32
|
+
return (@data[METHODS_PLACEHOLDER[args[0].to_sym].to_s] || @data[args[0].to_s]).force_encoding(Encoding::UTF_8) || super(*args)
|
51
33
|
end
|
34
|
+
alias :address :full_format
|
52
35
|
end
|
53
|
-
end
|
36
|
+
end
|
data/lib/cep_facil/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cep_facil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|