cep_facil 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: 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.
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 6 métodos (propriedades): cep, type, state, city, neighborhood, street. Assim você os acessa:
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
- Adicionalmente, seu objeto `CepFacil::API` possui um método `full` que o descreve por extenso:
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.full_format # => "Rua Panelas, Paulista - PE, Brasil"
87
+ address = CepFacil::API.new "53020-140", token
88
+
89
+ address.valid? # true
65
90
 
66
91
  ```
67
92
 
68
- Existem três formatos possíveis para se armazenar CEPs:
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 # Eu realmente não usaria esse
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
@@ -1,6 +1,4 @@
1
- require "cep_facil/api"
2
1
  require "cep_facil/version"
3
-
4
2
  module CepFacil
5
3
  autoload :API, "cep_facil/api"
6
4
  end
data/lib/cep_facil/api.rb CHANGED
@@ -1,53 +1,36 @@
1
- # coding: utf-8
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 :cep, :type, :state, :city, :neighborhood, :street
9
- ## Obtenção de endereço atráves do CEP
10
- # retorna um objeto `CepFacil::API` que contem 6 métodos (propriedades):
11
- # cep, type, state, city, neighborhood e street.
12
-
13
- def initialize(cep, token)
14
- @cep = cep
15
- @token = token
16
-
17
- zip_code = @cep.to_s
18
-
19
- if zip_code.match(/^[0-9]{5}[-]?[0-9]{3}/)
20
- zip_code.gsub!("-", "")
21
- @uri = URI.parse "http://www.cepfacil.com.br/service/?filiacao=#{token}&cep=#{zip_code}&formato=texto"
22
- else
23
- @uri = URI.parse "http://www.cepfacil.com.br/service/?filiacao=#{token}&cep=#{zip_code}&formato=texto"
24
- end
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
- "#{self.type} #{self.street}, #{self.city} - #{self.state}, Brasil"
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
@@ -1,3 +1,3 @@
1
1
  module CepFacil
2
- VERSION = "1.0.1" #:nodoc:
2
+ VERSION = "1.0.2" #:nodoc:
3
3
  end
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.1
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-07 00:00:00.000000000 Z
12
+ date: 2012-08-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec