bipbop-client 0.0.1

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: 944d39e25689e922a9aad85c6e57e1e9ce2352d2
4
+ data.tar.gz: 65a6116b0467152d3751595e81598c4a0f64e82a
5
+ SHA512:
6
+ metadata.gz: d9db4807c800694c866934b7ab2266cb21c9603cdd5af08d91fdbcb5851213d6b71062cf9f9bfa92a0c6639c161e372cad117ce7fb4105f76d0890074b845e22
7
+ data.tar.gz: 829fd7434c3a6b4009081f9aea6cd3f9f67e5bcb0160c203381cfa68bce2c8d5890ca9d31ac792ae298d017a151e0294908c37b7c6b9ae73e5442517e4f1d602
data/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Bipbop Ruby
2
+
3
+ # Instalação
4
+
5
+ Simples instalação via ruby gem
6
+ ```
7
+ # gem install bipbop-client
8
+ ```
9
+ Biblioteca em Ruby para interação com a Bipbop API. Com ela você pode fazer consulta de dados cadastrais, consulta do Perfil Consumidor para SAC, Correios, placas de veículos entre outras bases. Tudo que você precisa é adquirir uma chave de API válida entrando em contato com a Bipbop.
10
+
11
+ # Buscando o nome através do CPF/CNPJ
12
+
13
+ Existe uma classe especial chamada `NameByCPFCNPJ` cujo método estático *evaluate* pode ser usado para consultar o nome através do CPF/CNPJ, passando-se o CPF/CNPJ como string e opcionalmente a data de nascimento como DATETIME ou Inteiro:
14
+
15
+ ```ruby
16
+ puts Bipbop::Client::NameByCpfCnpj.evaluate($cpf, $nasc)
17
+ ```
18
+
19
+ # Como utilizar
20
+
21
+ Com uma chave de API válida em mãos você pode interagir com bancos os quais sua chave tem acesso. Nesse repositório você encontrará o arquivo __example.rb__ com o codigo a abaixo.
22
+
23
+ O primeiro passo é saber quais são esses bancos. Para isso temos a classe `ServiceDiscovery` que usa uma instância de `WebService`, criada a partir de sua chave:
24
+
25
+ ```ruby
26
+ require 'bipbop'
27
+
28
+ Bipbop::Client::Config.new({:api_key => # sua chave #})
29
+
30
+ webservice = Bipbop::Client::Webservice.new
31
+ service_discovery = Bipbop::Client::ServiceDiscovery.factory(webservice)
32
+
33
+ puts "\n\n== Listando todos os databases ==\n\n"
34
+ service_discovery.list_databases() { |database_info|
35
+ database = service_discovery.get_database(database_info.first['name'])
36
+ puts "Available Database: %s\nDescription: %s\nURL: %s\n\n" % [database.name(), database.get("description"), database.get("url")]
37
+ }
38
+
39
+ ```
40
+
41
+ Vamos tomar como exemplo o database __PLACA__ e descobrir quais tabelas podemos consultar e com quais campos:
42
+
43
+ ```ruby
44
+ puts "\n== Listando tabelas de PLACA ==\n\n"
45
+ database_placa = service_discovery.get_database('PLACA')
46
+ database_placa.list_tables() { |table_info|
47
+ table = database_placa.get_table(table_info.first['name'])
48
+ puts "Available Table: %s\nDescription: %s\nURL: %s\n\n" % [table.name(), table.get("description"), table.get("url")]
49
+ }
50
+
51
+ ```
52
+
53
+ Nossa listagem retornou a tabela __CONSULTA__ mas quais serão os campos que podemos usar como parâmetros em nossa consulta? Vamos descobrir:
54
+
55
+ ```ruby
56
+ tabela_consulta = database_placa.get_table('CONSULTA')
57
+ puts "\n== Listando campos de CONSULTA ==\n\n"
58
+
59
+ tabela_consulta.get_fields() { |field|
60
+ puts "Available Field: %s\n\n" % field.name()
61
+ }
62
+ ```
63
+
64
+ Nossa busca retornou o campo __placa__.
65
+
66
+ Com esses dados em mãos torna-se simples montar nossa consulta. Basta utilizarmos o método *post* de `WebService` da seguinte forma:
67
+
68
+ ```php
69
+ placa = webservice.post("SELECT FROM 'PLACA'.'CONSULTA'", {
70
+ "placa" => "XXX9999"
71
+ });
72
+ ```
73
+
74
+ Esse método retorna um [Nokogiri::XML::Document](http://www.rubydoc.info/github/sparklemotion/nokogiri/master/Nokogiri/XML/Document)
75
+
76
+ ```ruby
77
+ // Visualizando as tags do documento retornado
78
+ puts placa
79
+
80
+ // Recuperando a marca do veículo
81
+ puts (placa.xpath("string(//BPQL//body//marca/.)"));
82
+ ```
83
+
84
+ # Mais informações
85
+
86
+ Para mais informações e aquisição de uma chave de api acesse [http://api.bipbop.com.br](http://api.bipbop.com.br).
@@ -0,0 +1,29 @@
1
+ module Bipbop
2
+ module Client
3
+ module CpfCnpjValidation
4
+ class Cnpj
5
+ # Escrito por: André Camargo < andre@boaideia.inf.br > http://blog.boaideia.inf.br
6
+ def is_valid?(cnpj)
7
+ return false if cnpj.nil?
8
+ nulos = %w{11111111111111 22222222222222 33333333333333 44444444444444 55555555555555 66666666666666 77777777777777 88888888888888 99999999999999 00000000000000}
9
+ valor = cnpj.scan /[0-9]/
10
+ if valor.length == 14
11
+ unless nulos.member?(valor.join)
12
+ valor = valor.collect{|x| x.to_i}
13
+ soma = valor[0]*5+valor[1]*4+valor[2]*3+valor[3]*2+valor[4]*9+valor[5]*8+valor[6]*7+valor[7]*6+valor[8]*5+valor[9]*4+valor[10]*3+valor[11]*2
14
+ soma = soma - (11*(soma/11))
15
+ resultado1 = (soma==0 || soma==1) ? 0 : 11 - soma
16
+ if resultado1 == valor[12]
17
+ soma = valor[0]*6+valor[1]*5+valor[2]*4+valor[3]*3+valor[4]*2+valor[5]*9+valor[6]*8+valor[7]*7+valor[8]*6+valor[9]*5+valor[10]*4+valor[11]*3+valor[12]*2
18
+ soma = soma - (11*(soma/11))
19
+ resultado2 = (soma == 0 || soma == 1) ? 0 : 11 - soma
20
+ return true if resultado2 == valor[13]
21
+ end
22
+ end
23
+ end
24
+ return false
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module Bipbop
2
+ module Client
3
+ class Config
4
+ @@key = '6057b71263c21e4ada266c9d4d4da613'
5
+ def initialize(config)
6
+ @@key = config[:bipbop_api_key]
7
+ end
8
+ def self.key
9
+ @@key
10
+ end
11
+ end
12
+ end
13
+ end
data/lib/bipbop/cpf.rb ADDED
@@ -0,0 +1,30 @@
1
+ module Bipbop
2
+ module Client
3
+ module CpfCnpjValidation
4
+ class Cpf
5
+ # Escrito por: André Camargo < andre@boaideia.inf.br > http://blog.boaideia.inf.br
6
+ def is_valid?(cpf)
7
+ return false if cpf.nil?
8
+ nulos = %w{12345678909 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000}
9
+ valor = cpf.scan /[0-9]/
10
+ if valor.length == 11
11
+ unless nulos.member?(valor.join)
12
+ valor = valor.collect{|x| x.to_i}
13
+ soma = 10*valor[0]+9*valor[1]+8*valor[2]+7*valor[3]+6*valor[4]+5*valor[5]+4*valor[6]+3*valor[7]+2*valor[8]
14
+ soma = soma - (11 * (soma/11))
15
+ resultado1 = (soma == 0 or soma == 1) ? 0 : 11 - soma
16
+ if resultado1 == valor[9]
17
+ soma = valor[0]*11+valor[1]*10+valor[2]*9+valor[3]*8+valor[4]*7+valor[5]*6+valor[6]*5+valor[7]*4+valor[8]*3+valor[9]*2
18
+ soma = soma - (11 * (soma/11))
19
+ resultado2 = (soma == 0 or soma == 1) ? 0 : 11 - soma
20
+ return true if resultado2 == valor[10]
21
+ end
22
+ end
23
+ end
24
+ return false
25
+ true
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ module Bipbop
2
+ module Client
3
+ class Database
4
+
5
+ KEY_TABLE_NAME = "name"
6
+ KEY_TABLE_DESCRIPTION = "description"
7
+ KEY_TABLE_URL = "url"
8
+
9
+ @ws
10
+ @dom_node
11
+ @dom
12
+
13
+ # Instância um Database
14
+ # @param BIPBOP::Client::Webservice ws
15
+ # @param Nokogiri::XML::Node dom_node
16
+ # @param Nokogiri::XML::Document dom
17
+
18
+ def initialize(ws, dom_node, dom)
19
+ @ws = ws
20
+ @dom_node = dom_node
21
+ @dom = dom
22
+ end
23
+
24
+ # Captura o nome do database
25
+ def name
26
+ @dom_node['name']
27
+ end
28
+
29
+ def list_tables
30
+ @dom_node.xpath("table").each { |node|
31
+ yield [
32
+ KEY_TABLE_NAME => node['name'],
33
+ KEY_TABLE_DESCRIPTION => node["description"],
34
+ KEY_TABLE_URL => node["url"]
35
+ ]
36
+ }
37
+ end
38
+
39
+ def get_table(name)
40
+ table = @dom_node.xpath(".//table[@name='%s']" % name.gsub(/[^a-z0-9\-_]/i, ''))
41
+ if (table.length == 0)
42
+ raise Exception, "Can't find that table."
43
+ end
44
+
45
+ Bipbop::Client::Table.new(@ws, self, table.first, @dom)
46
+
47
+ end
48
+
49
+ def get(attribute)
50
+ @dom_node[attribute]
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,41 @@
1
+ module Bipbop
2
+ module Client
3
+ class Exception < Exception
4
+ INVALID_ARGUMENT = 1
5
+
6
+ @bipbop_code
7
+ @bipbop_source
8
+ @bipbop_id
9
+ @bipbop_message
10
+ @bipbop_pushable
11
+
12
+ def get_bipbop_code
13
+ @bipbop_code
14
+ end
15
+
16
+ def get_bipbop_source
17
+ @bipbop_source
18
+ end
19
+
20
+ def get_bipbop_id
21
+ @bipbop_id
22
+ end
23
+
24
+ def get_bipbop_message
25
+ @bipbop_message
26
+ end
27
+
28
+ def get_bipbop_pushable
29
+ @bipbop_pushable
30
+ end
31
+
32
+ def set_attributes(code, source, id, message, pushable)
33
+ @bipbop_code = code
34
+ @bipbop_source = source
35
+ @bipbop_id = id
36
+ @bipbop_message = message
37
+ @bipbop_pushable = pushable
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,47 @@
1
+ module Bipbop
2
+ module Client
3
+ #Informações a respeito de um campo da BIPBOP
4
+ class Field
5
+
6
+ @dom_node
7
+ @dom
8
+ @table
9
+ @database
10
+
11
+ def initialize(table, database, dom_node, dom)
12
+ @table = table
13
+ @database = database
14
+ @dom = dom
15
+ @dom_node = dom_node
16
+ end
17
+ def name
18
+ @dom_node['name']
19
+ end
20
+
21
+ #Informação do XML a respeito de um campo
22
+ def get(attribute)
23
+ @dom_node[attribute]
24
+ end
25
+
26
+ #Lista de opções do campo
27
+ def options
28
+ self.read_options(@dom_node.xpath(".//option"))
29
+ end
30
+
31
+ # Lista de opções do grupo
32
+ def group_options
33
+ @dom_node.xpath(".//optgroup").to_a.map { |node|
34
+ [node['value'], self.read_options(node.xpath(".//option"))]
35
+ }
36
+ end
37
+
38
+ #Lista de opções disponíveis
39
+ protected
40
+ def read_options(node_list)
41
+ node_list.to_a.map { |obj|
42
+ [obj['value'], obj.text]
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,28 @@
1
+ module Bipbop
2
+ module Client
3
+ class NameByCpfCnpj
4
+ # birtyday Time
5
+ def self.evaluate(cpf_cnpj, birtyday = nil)
6
+ cpf = Bipbop::Client::CpfCnpjValidation::Cpf.new
7
+ cnpj = Bipbop::Client::CpfCnpjValidation::Cnpj.new
8
+
9
+ if (cpf.is_valid?(cpf_cnpj))
10
+ if (!birtyday.instance_of? Time)
11
+ raise raise Bipbop::Client::Exception.new("É necessário informar a data de nascimento para consultar um CPF.")
12
+ end
13
+ elsif (!cnpj.is_valid?(cpf_cnpj))
14
+ raise Bipbop::Client::Exception.new("O documento informado não é um CPF ou CNPJ válido.")
15
+ end
16
+
17
+ if (birtyday.instance_of? Time)
18
+ birtyday = birtyday.strftime('%d-%m-%Y')
19
+ end
20
+
21
+ Bipbop::Client::Webservice.new.post("SELECT FROM 'BIPBOPJS'.'CPFCNPJ'", {
22
+ "documento" => cpf_cnpj,
23
+ "nascimento" => birtyday
24
+ }).xpath('string(//BPQL//body//nome//.)')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,59 @@
1
+ module Bipbop
2
+ module Client
3
+ class Push
4
+
5
+ PARAMETER_PUSH_QUERY = "pushQuery"
6
+ PARAMETER_PUSH_INTERVAL = "pushInterval"
7
+ PARAMETER_JURISTEK_CALLBACK = "juristekCallback"
8
+ PARAMETER_PUSH_LABEL = "pushLabel"
9
+ PARAMETER_PUSH_AT = "pushAt"
10
+ PARAMETER_PUSH_TRY_IN = "pushTryIn"
11
+ PARAMETER_PUSH_MAX_VERSION = "pushMaxVersion"
12
+ PARAMETER_PUSH_EXPIRE = "pushExpire"
13
+ PARAMETER_PUSH_PRIORITY = "pushPriority"
14
+ PARAMETER_PUSH_ID = "id"
15
+ PARAMETER_PUSH_CALLBACK = "pushCallback"
16
+
17
+ @ws
18
+
19
+ def initialize(ws)
20
+ @ws = ws
21
+ end
22
+
23
+ # Cria um novo PUSH
24
+ def create(label, push_callback, query, parameters)
25
+ @ws.post("INSERT INTO 'PUSH'.'JOB'", parameters.merge({
26
+ PARAMETER_PUSH_LABEL => label,
27
+ PARAMETER_PUSH_QUERY => query,
28
+ PARAMETER_PUSH_CALLBACK => push_callback
29
+ }))
30
+ end
31
+ # Remove PUSH
32
+ def delete(id)
33
+ @ws.post("DELETE FROM 'PUSH'.'JOB'", {"id" => id}).xpath('string(//BPQL//body//id)')
34
+ end
35
+
36
+ # Abre um documento criado
37
+ def open(id, label = nil)
38
+ @ws.post("SELECT FROM 'PUSH'.'DOCUMENT'", {"id" => id , "label" => label})
39
+ end
40
+
41
+ # Muda o intervalo do PUSH
42
+ def change_interval(id, interval)
43
+ @ws.post("UPDATE 'PUSH'.'PUSHINTERVAL'", {
44
+ PARAMETER_PUSH_ID => id,
45
+ PARAMETER_PUSH_INTERVAL => interval,
46
+ })
47
+ end
48
+
49
+ # Muda a versão máxima do PUSH
50
+ def change_max_version(id, max_version)
51
+ @ws.post("UPDATE 'PUSH'.'PUSHMAXVERSION'", {
52
+ PARAMETER_PUSH_ID => id,
53
+ PARAMETER_PUSH_MAX_VERSION => max_version,
54
+ })
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,27 @@
1
+ module Bipbop
2
+ module Client
3
+ class PushJuristek < Bipbop::Client::Push
4
+
5
+ PARAMETER_PUSH_JURISTEK_CALLBACK = "juristekCallback"
6
+ PARAMETER_PUSH_JURISTEK_QUERY = "data"
7
+
8
+ # Cria um novo PUSH
9
+ def create(label, push_callback, query, parameters)
10
+ data = Array.new
11
+ if !parameters.nil? && !parameters.empty?
12
+ parameters.each { |key, value|
13
+ data.push("'%s' = '%s'" % [key.to_s.gsub(/\'/i, ''), value.to_s.gsub(/\'/i,'')])
14
+ }
15
+ query += ((query =~ /where/i) == nil ? ' WHERE ' : '' ) + data.join(' AND ')
16
+
17
+ @ws.post("INSERT INTO 'PUSHJURISTEK'.'JOB'", parameters.merge({
18
+ PARAMETER_PUSH_LABEL => label,
19
+ PARAMETER_PUSH_QUERY => "SELECT FROM 'JURISTEK'.'PUSH'",
20
+ PARAMETER_PUSH_JURISTEK_QUERY => query,
21
+ PARAMETER_PUSH_JURISTEK_CALLBACK => push_callback
22
+ }))
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module BIpbop
2
+ module Client
3
+ # Recebe os parâmetros do PUSH
4
+ class Receiver
5
+ # Versão do documento
6
+ @version
7
+
8
+ # ID do documento
9
+ @documentId
10
+
11
+ # Nome do documento
12
+ @label
13
+
14
+ def initialize
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module Bipbop
2
+ module Client
3
+ class ServiceDiscovery
4
+
5
+ @ws
6
+ @list_databases
7
+
8
+ KEY_DATABASE_NAME = "name"
9
+ KEY_DATABASE_DESCRIPTION = "description"
10
+ KEY_DATABASE_URL = "url"
11
+
12
+ def initialize (ws, databases)
13
+ @ws = ws
14
+ @list_databases = databases
15
+ end
16
+
17
+ def self.factory(ws, parameters = {})
18
+ ServiceDiscovery.new(ws, ws.post("SELECT FROM 'INFO'.'INFO'", parameters))
19
+ end
20
+
21
+ def list_databases
22
+ @list_databases.xpath("//BPQL//body//database").each { |node|
23
+ yield [
24
+ KEY_DATABASE_NAME => node["name"],
25
+ KEY_DATABASE_DESCRIPTION => node["description"],
26
+ KEY_DATABASE_URL => node["url"]
27
+ ]
28
+ }
29
+ end
30
+
31
+ def get_database(name)
32
+ database = @list_databases.xpath("/BPQL/body/database[@name='%s']" % [name.gsub(/[^a-z0-9]/i, '')])
33
+ if (database.length == 0)
34
+ raise Exception, "Can't find that database."
35
+ end
36
+
37
+ Bipbop::Client::Database.new(@ws, database.first, @list_databases)
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,15 @@
1
+ module Bipbop
2
+ module Client
3
+ class ServiceDiscoveryJuristek < Bipbop::Client::ServiceDiscovery
4
+
5
+ PARAMETER_OAB = "OAB"
6
+
7
+ def self.factory(ws, parameters = {})
8
+ ServiceDiscoveryJuristek.new(ws, ws.post("SELECT FROM 'JURISTEK'.'INFO'", parameters.merge(
9
+ 'data' => !parameters[PARAMETER_OAB].nil? && parameters[PARAMETER_OAB] != nil ?
10
+ "SELECT FROM 'INFO'.'INFO'" : "SELECT FROM 'INFO'.'INFO' WHERE 'TIPO_CONSULTA' = 'OAB'"
11
+ )))
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ module Bipbop
2
+ module Client
3
+ class Table
4
+ @ws
5
+ @dom_node
6
+ @dom
7
+ @database
8
+
9
+ def initialize(ws, database, dom_node, dom)
10
+ @ws = ws
11
+ @dom_node = dom_node
12
+ @dom = dom
13
+ @database = database
14
+ end
15
+
16
+ def get_fields
17
+ @dom_node.xpath(".//field").each { |field|
18
+ yield Bipbop::Client::Field.new(self, @database, field, @dom)
19
+ }
20
+ end
21
+
22
+ def name
23
+ @dom_node['name']
24
+ end
25
+
26
+ def get(attribute)
27
+ @dom_node[attribute]
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module Bipbop
2
+ module Client
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,52 @@
1
+ require 'curl'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+ module Bipbop
6
+ module Client
7
+ class Webservice
8
+
9
+ ENDPOINT = "https://irql.bipbop.com.br/";
10
+ REFERRER = "https://juridicocorrespondentes.com.br/";
11
+ PARAMETER_QUERY = "q";
12
+ PARAMETER_APIKEY = "apiKey";
13
+
14
+ # Inicializa a API
15
+ # @param string $apiKey Chave de acesso da BIPBOP
16
+ # @return Nokogiri::XML::Document
17
+
18
+ def post (query, parameters = {})
19
+
20
+ curl = CURL.new({'cookies_enable' => false})
21
+ response = curl.post(ENDPOINT, parameters.merge({
22
+ PARAMETER_QUERY => query,
23
+ PARAMETER_APIKEY => Bipbop::Client::Config.key
24
+ }));
25
+ document = Nokogiri::XML(response)
26
+ self::assert(document)
27
+
28
+ document
29
+
30
+ end
31
+ # Realiza um assertion do documento
32
+ def assert(doc)
33
+ node = doc.xpath('//BPQL//header//exception')
34
+
35
+ if node.length > 0
36
+ node_exception = node.first
37
+ source = node_exception["source"]
38
+ code = node_exception["code"]
39
+ id = node_exception["id"]
40
+ pushable = (node_exception["pushable"] || node_exception["push"]) === true
41
+ message = node_exception.text
42
+
43
+ exception = Bipbop::Client::Exception.new("[%s:%s/%s] %s" % [code, source, id, message, pushable])
44
+ exception.set_attributes(code, source, id, message, pushable)
45
+
46
+ raise exception
47
+
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
data/lib/bipbop.rb ADDED
@@ -0,0 +1,20 @@
1
+ require "bipbop/version"
2
+ require "bipbop/database"
3
+ require "bipbop/webservice"
4
+ require "bipbop/exception"
5
+ require "bipbop/field"
6
+ require "bipbop/table"
7
+ require "bipbop/service_discovery"
8
+ require "bipbop/push"
9
+ require "bipbop/push_juristek"
10
+ require "bipbop/service_discovery_juristek"
11
+ require "bipbop/config"
12
+ require "bipbop/name_by_cpf_cnpj"
13
+ require "bipbop/cpf"
14
+ require "bipbop/cnpj"
15
+
16
+ module Bipbop
17
+ module Client
18
+
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bipbop-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Otavio Carvalho
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Library for communicating with BIPBOP
42
+ email:
43
+ - otaviolcarvalho@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - lib/bipbop.rb
50
+ - lib/bipbop/cnpj.rb
51
+ - lib/bipbop/config.rb
52
+ - lib/bipbop/cpf.rb
53
+ - lib/bipbop/database.rb
54
+ - lib/bipbop/exception.rb
55
+ - lib/bipbop/field.rb
56
+ - lib/bipbop/name_by_cpf_cnpj.rb
57
+ - lib/bipbop/push.rb
58
+ - lib/bipbop/push_juristek.rb
59
+ - lib/bipbop/receiver.rb
60
+ - lib/bipbop/service_discovery.rb
61
+ - lib/bipbop/service_discovery_juristek.rb
62
+ - lib/bipbop/table.rb
63
+ - lib/bipbop/version.rb
64
+ - lib/bipbop/webservice.rb
65
+ homepage: https://github.com/OTATA/bipbop
66
+ licenses:
67
+ - MIT
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.4.3
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Library for communicating with BIPBOP
89
+ test_files: []