brcep-vandal 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bd0d83fdf74931b3a6c39373178e577ccdb497bd
4
+ data.tar.gz: b8aa08fc9322cf2bf22092afe0a525219b4ea5ba
5
+ SHA512:
6
+ metadata.gz: bfa9ae67f2d2b2e457b9f47e7f8ac4bb671efda5d21aa4d474cd0b69b03531835b3ee9c8909d8b363495a82c865e8139bd1a85a7f1bec9cf8382c0f74f415d88
7
+ data.tar.gz: 6c207e572f24c6b0b263fdc335bd61773ba93cf2d29413cda32e2a189e78e60fdccf9c92626d4ffbda552b4d73cfd0319fc7df82e17441b92d30737bc6975253
data/CHANGELOG ADDED
File without changes
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 ADDED
@@ -0,0 +1,72 @@
1
+ # encoding: UTF-8
2
+ require "rubygems"
3
+ require "rake"
4
+ require "rake/testtask"
5
+ require "rdoc/task"
6
+ require "rake/packagetask"
7
+ require "rubygems/package_task"
8
+
9
+ require File.join(File.dirname(__FILE__), "lib", "brcep", "version")
10
+
11
+ PKG_BUILD = ENV["PKG_BUILD"] ? "." + ENV["PKG_BUILD"] : ""
12
+ PKG_NAME = "brcep-vandal"
13
+ PKG_VERSION = BrCep::VERSION::STRING + PKG_BUILD
14
+ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
15
+
16
+ desc "Default Task"
17
+ task :default => [ :test ]
18
+
19
+ # Run the unit tests
20
+ Rake::TestTask.new { |t|
21
+ t.libs << "test"
22
+ t.pattern = "test/*_test.rb"
23
+ t.verbose = true
24
+ t.warning = false
25
+ }
26
+
27
+
28
+ #Generate the RDoc documentation
29
+ Rake::RDocTask.new { |rdoc|
30
+ rdoc.rdoc_dir = "doc"
31
+ rdoc.title = "Brazilian Rails -- CEP"
32
+ rdoc.options << "--line-numbers" << "--inline-source" << "-A cattr_accessor=object"
33
+ rdoc.options << "--charset" << "utf-8"
34
+ rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
35
+ rdoc.rdoc_files.include("README.mkdn", "CHANGELOG")
36
+ rdoc.rdoc_files.include("lib/**/*")
37
+ }
38
+
39
+
40
+ # Create compressed packages
41
+ spec = Gem::Specification.new do |s|
42
+ s.platform = Gem::Platform::RUBY
43
+ s.name = PKG_NAME
44
+ s.summary = "brcep é uma das gems que compoem o Brazilian Rails"
45
+ s.description = %q{brcep é uma das gems que compoem o Brazilian Rails}
46
+ s.version = PKG_VERSION
47
+
48
+ s.authors = ["Marcos Tapajós", "Celestino Gomes", "Andre Kupkosvki", "Vinícius Teles", "Felipe Barreto", "Rafael Walter", "Cassio Marques"]
49
+ s.email = %w"tapajos@gmail.com tinorj@gmail.com kupkovski@gmail.com vinicius.m.teles@gmail.com felipebarreto@gmail.com rafawalter@gmail.com cassiommc@gmail.com"
50
+ s.rubyforge_project = "brcep-vandal"
51
+ s.homepage = "http://www.improveit.com.br/software_livre/brazilian_rails"
52
+
53
+ s.has_rdoc = true
54
+ s.requirements << "none"
55
+ s.require_path = "lib"
56
+
57
+ s.add_development_dependency "rake"
58
+ s.add_development_dependency "mocha"
59
+
60
+ s.files = [ "Rakefile", "README.mkdn", "CHANGELOG", "MIT-LICENSE" ]
61
+ s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
62
+ s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
63
+ end
64
+
65
+ Gem::PackageTask.new(spec) do |p|
66
+ p.gem_spec = spec
67
+ end
68
+
69
+ desc "Publish the release files to RubyForge."
70
+ task :release => [ :package ] do
71
+ `gem push pkg/#{PKG_FILE_NAME}.gem`
72
+ end
@@ -0,0 +1,96 @@
1
+ # encoding: UTF-8
2
+ require 'net/http'
3
+ require 'cgi'
4
+
5
+ # Este recurso tem como finalidade encontrar um endereço através de um CEP, e
6
+ # para isso ele utiliza o web service da Republica Virtual (http://cep.republicavirtual.com.br/web_cep.php)
7
+ # Obviamente, para utilizar este serviço é necessário uma conexão com a Internet.
8
+ #
9
+ # Como fazer a busca de endereço por cep?
10
+ #
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'}
15
+ #
16
+ # É feita uma validação para ver se o cep possui 8 caracteres após a remoção de '.' e '-'.
17
+ # BuscaEndereco.cep('0000000') ==> RuntimeError 'O CEP informado possui um formato inválido.'
18
+ #
19
+ # Se necessário usar proxy, faça (de preferência em environment.rb):
20
+ # BuscaEndereco.proxy_addr= 'endereco.do.proxy'
21
+ # BuscaEndereco.proxy_port= 999 # porta a ser utilizada
22
+ #
23
+ class BuscaEndereco
24
+ @@proxy_addr = nil
25
+ @@proxy_port = nil
26
+
27
+ class << self
28
+ def proxy_addr
29
+ @@proxy_addr
30
+ end
31
+
32
+ def proxy_addr=(addr)
33
+ @@proxy_addr = addr
34
+ end
35
+
36
+ def proxy_port
37
+ @@proxy_port
38
+ end
39
+
40
+ def proxy_port=(port)
41
+ @@proxy_port = port
42
+ end
43
+ end
44
+
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
60
+
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.
64
+ #
65
+ # Exemplo:
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, acronym=true)
68
+ cep = numero.to_s.gsub(/[\.-]/, '')
69
+ raise "O CEP informado possui um formato inválido." unless cep.to_s.match(/^\d{8}$/)
70
+
71
+ response = Net::HTTP.Proxy(self.proxy_addr, self.proxy_port).get_response(URI.parse("#{WEB_SERVICE_REPUBLICA_VIRTUAL_URL}#{cep}"))
72
+ raise "A busca de endereço por CEP através do web service da República Virtual está indisponível." unless response.kind_of?(Net::HTTPSuccess)
73
+
74
+ doc = Hash[* CGI::parse(response.body).map {|k,v| [k,v[0]]}.flatten]
75
+
76
+ retorno = {}
77
+
78
+ raise "CEP #{cep} não encontrado." unless [1,2].include?(doc['resultado'].to_i)
79
+
80
+ %w(tipo_logradouro logradouro bairro cidade uf).each do |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
87
+ end
88
+
89
+ retorno[:cep] = cep
90
+ if acronym == false
91
+ retorno[:uf] = ConvertAcronym.convert(retorno[:uf].to_sym)
92
+ end
93
+
94
+ retorno
95
+ end
96
+ end
@@ -0,0 +1,34 @@
1
+ class ConvertAcronym
2
+ def self.convert(acronym)
3
+ ufs = {
4
+ 'AC': 'Acre',
5
+ 'AL': 'Alagoas',
6
+ 'AP': 'Amapá',
7
+ 'AM': 'Amazonas',
8
+ 'BA': 'Bahia',
9
+ 'CE': 'Ceará',
10
+ 'DF': 'Distrito Federal',
11
+ 'ES': 'Espírito Santo',
12
+ 'GO': 'Goiás',
13
+ 'MA': 'Maranhão',
14
+ 'MT': 'Mato Grosso',
15
+ 'MS': 'Mato Grosso do Sul',
16
+ 'MG': 'Minas Gerais',
17
+ 'PA': 'Pará',
18
+ 'PB': 'Paraíba',
19
+ 'PR': 'Paraná',
20
+ 'PE': 'Pernambuco',
21
+ 'PI': 'Piauí',
22
+ 'RJ': 'Rio de Janeiro',
23
+ 'RN': 'Rio Grande do Norte',
24
+ 'RS': 'Rio Grande do Sul',
25
+ 'RO': 'Rond&ohat;nia',
26
+ 'RR': 'Roraima',
27
+ 'SC': 'Santa Catarina',
28
+ 'SP': 'São Paulo',
29
+ 'SE': 'Sergipe',
30
+ 'TO': 'Tocantins'
31
+ }
32
+ ufs[acronym]
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ module BrCep
2
+ module VERSION #:nodoc:
3
+ MAJOR = 3
4
+ MINOR = 3
5
+ TINY = 0
6
+
7
+ STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
8
+ end
9
+ end
10
+
data/lib/brcep.rb ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ %w(busca_endereco version convert_acronym).each {|req| require File.dirname(__FILE__) + "/brcep/#{req}"}
5
+
6
+
7
+ module BrCep
8
+ end
@@ -0,0 +1,87 @@
1
+ # encoding: UTF-8
2
+ require File.dirname(__FILE__) + '/test_helper'
3
+ require 'rubygems'
4
+ require 'net/http'
5
+ require 'mocha'
6
+ require 'fakeweb'
7
+
8
+ FakeWeb.allow_net_connect = false
9
+
10
+ INVALID_ZIPS = [0, '0', '00', '000', '0000', '00000', '000000', '0000000', '4006000']
11
+ VALID_ZIPS = [22640100, '22640100', '22.640100', '22640-100', '22.640-100']
12
+ VALID_ZIPS_WITH_ZERO_AT_BEGINNING = ['05145100', '05145-100', '05.145-100']
13
+ ZIPS_WITH_NO_ADDRESS_ASSOCIATED = [12345678, '12345678', '12.345678', '12345-678', '12.345-678']
14
+
15
+ URL = BuscaEndereco::WEB_SERVICE_REPUBLICA_VIRTUAL_URL
16
+
17
+ class BuscaEnderecoTest < Test::Unit::TestCase
18
+ def test_accept_option_to_convert_acronym
19
+ cep = VALID_ZIPS.first.to_s
20
+ expected = {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :cidade => 'Rio de Janeiro', :uf => 'Rio de Janeiro', :cep => cep}
21
+ 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"
22
+
23
+ FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
24
+
25
+ assert_equal expected, BuscaEndereco.cep(cep, acronym=false)
26
+ end
27
+
28
+ def test_if_warn_for_por_cep_usage
29
+ cep = VALID_ZIPS.sample
30
+ expected = {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :cidade => 'Rio de Janeiro', :uf => 'RJ', :cep => cep}
31
+ BuscaEndereco.expects(:warn).with("DEPRECATION WARNING: O método `BuscaEnderedo.por_cep` será removido. Use o BuscaEndereco.cep e faça os ajustes necessarios")
32
+ BuscaEndereco.expects(:cep).with(cep).returns(expected)
33
+
34
+ assert_equal expected.values, BuscaEndereco.por_cep(cep)
35
+ end
36
+
37
+ def test_raise_without_service_on_both_web_services
38
+ FakeWeb.register_uri(:get, "#{URL}#{22640100}", :status => 504, :body => "Service Unavailable")
39
+
40
+ assert_raise RuntimeError, "A busca de endereço por CEP está indisponível no momento." do
41
+ BuscaEndereco.cep(22640100)
42
+ end
43
+ end
44
+
45
+ INVALID_ZIPS.each do |invalid_zip|
46
+ define_method "test_raise_for_invalid_zip_code_#{invalid_zip}" do
47
+ assert_raise RuntimeError, "O CEP informado possui um formato inválido." do
48
+ BuscaEndereco.cep(invalid_zip)
49
+ end
50
+ end
51
+ end
52
+
53
+ VALID_ZIPS.each do |valid_zip|
54
+ define_method "test_valid_code_#{valid_zip}" do
55
+ cep = VALID_ZIPS.first.to_s
56
+ expected = {:tipo_logradouro => 'Avenida', :logradouro => 'das Américas', :bairro => 'Barra da Tijuca', :cidade => 'Rio de Janeiro', :uf => 'RJ', :cep => cep}
57
+ 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"
58
+
59
+ FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
60
+
61
+ assert_equal expected,BuscaEndereco.cep(valid_zip)
62
+ end
63
+ end
64
+
65
+ VALID_ZIPS_WITH_ZERO_AT_BEGINNING.each do |valid_zip|
66
+ define_method "test_valid_code_#{valid_zip}" do
67
+ cep = VALID_ZIPS_WITH_ZERO_AT_BEGINNING.first
68
+ expected = {:tipo_logradouro => "Avenida", :logradouro => "Raimundo Pereira de Magalhães", :bairro => "Jardim Iris", :cidade => "São Paulo", :uf => "SP", :cep => cep}
69
+ 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"
70
+
71
+ FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
72
+
73
+ assert_equal expected, BuscaEndereco.cep(cep)
74
+ end
75
+ end
76
+
77
+ def test_should_raise_exception_when_invalid_code
78
+ cep = "12345678"
79
+ body = "&resultado=0&resultado_txt=servi%E7o+indispon%EDvel%2Fcep+inv%E1lido&uf=&cidade=&bairro=&tipo_logradouro=&logradouro="
80
+
81
+ assert_raise RuntimeError, "CEP #{cep} não encontrado." do
82
+ FakeWeb.register_uri(:get, "#{URL}#{cep}", :body => body)
83
+
84
+ BuscaEndereco.cep("12345678")
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,15 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/brcep'
3
+
4
+ def tornar_metodos_publicos(clazz)
5
+ clazz.class_eval do
6
+ private_instance_methods.each { |instance_method| public instance_method }
7
+ private_methods.each { |method| public_class_method method }
8
+ end
9
+ end
10
+
11
+ def p80 text
12
+ p '*'*80
13
+ p text
14
+ yield if block_given?
15
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brcep-vandal
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcos Tapajós
8
+ - Celestino Gomes
9
+ - Andre Kupkosvki
10
+ - Vinícius Teles
11
+ - Felipe Barreto
12
+ - Rafael Walter
13
+ - Cassio Marques
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+ date: 2015-02-23 00:00:00.000000000 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rake
21
+ requirement: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ type: :development
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: mocha
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: brcep é uma das gems que compoem o Brazilian Rails
48
+ email:
49
+ - tapajos@gmail.com
50
+ - tinorj@gmail.com
51
+ - kupkovski@gmail.com
52
+ - vinicius.m.teles@gmail.com
53
+ - felipebarreto@gmail.com
54
+ - rafawalter@gmail.com
55
+ - cassiommc@gmail.com
56
+ executables: []
57
+ extensions: []
58
+ extra_rdoc_files: []
59
+ files:
60
+ - CHANGELOG
61
+ - MIT-LICENSE
62
+ - README.mkdn
63
+ - Rakefile
64
+ - lib/brcep.rb
65
+ - lib/brcep/busca_endereco.rb
66
+ - lib/brcep/convert_acronym.rb
67
+ - lib/brcep/version.rb
68
+ - test/busca_endereco_test.rb
69
+ - test/test_helper.rb
70
+ homepage: http://www.improveit.com.br/software_livre/brazilian_rails
71
+ licenses: []
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements:
88
+ - none
89
+ rubyforge_project: brcep-vandal
90
+ rubygems_version: 2.4.5
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: brcep é uma das gems que compoem o Brazilian Rails
94
+ test_files: []