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 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