bipbop-client 0.0.1

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.
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: []