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 +7 -0
- data/README.md +86 -0
- data/lib/bipbop/cnpj.rb +29 -0
- data/lib/bipbop/config.rb +13 -0
- data/lib/bipbop/cpf.rb +30 -0
- data/lib/bipbop/database.rb +54 -0
- data/lib/bipbop/exception.rb +41 -0
- data/lib/bipbop/field.rb +47 -0
- data/lib/bipbop/name_by_cpf_cnpj.rb +28 -0
- data/lib/bipbop/push.rb +59 -0
- data/lib/bipbop/push_juristek.rb +27 -0
- data/lib/bipbop/receiver.rb +20 -0
- data/lib/bipbop/service_discovery.rb +42 -0
- data/lib/bipbop/service_discovery_juristek.rb +15 -0
- data/lib/bipbop/table.rb +32 -0
- data/lib/bipbop/version.rb +5 -0
- data/lib/bipbop/webservice.rb +52 -0
- data/lib/bipbop.rb +20 -0
- metadata +89 -0
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).
|
data/lib/bipbop/cnpj.rb
ADDED
@@ -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
|
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
|
data/lib/bipbop/field.rb
ADDED
@@ -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
|
data/lib/bipbop/push.rb
ADDED
@@ -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
|
data/lib/bipbop/table.rb
ADDED
@@ -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,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: []
|