bipbop-client 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|