datajud 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f39081aadf1eae3fd48ec2b4c41290747c9c1d7af57e1c2277a030633ed9e64
4
- data.tar.gz: aab5ae80ec67d1465641b0af7b4674b1ee2dceddcc20c5ef36fbf9263dd2a23a
3
+ metadata.gz: 5df3f8cadbf3eb0e40ba6891207bc56a076e5624e171cd99e1fef1ee66cf1696
4
+ data.tar.gz: bfc125d69fb6a639afbc0891db64d301209cf7901e14a8fee82477623e521153
5
5
  SHA512:
6
- metadata.gz: 8c0c96e126baf36e5a1e9fe6960a60f6bf332290931515f8386245c4e808905a89c2bae3a89dd38fb900a6de953739e9175edc2880047520d62ae054bab7c674
7
- data.tar.gz: f518b69601b88db2d9a7eb452673019449504772ce4d818e2c64d65e663b8b72a1f8ec1910ce37a5839cd135b1d65386f43ba9fe67dd72b731484212cf267d53
6
+ metadata.gz: 6ad607e3b195cc8055bcad7b5e77854694a91297f86af88391ccd4c13cdeac5a49394315a9a0120dde19f49507526c41849ffe7ad3fc6ed2019ad921d74ad8dd
7
+ data.tar.gz: f9b89ba96631fa69025ae5d6b52a5cc142c4026aaccb5f1397b3459a502a5189eb9e9cc48bcdd1046b7f78cdc461697b8f6e915728e73105d51907f995afcdae
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.4] - 2026-03-12
4
+
5
+ - Todos os atributos e subatributos do processo agora podem ser acessados por ponto (OpenStruct), sem classes manuais.
6
+
7
+ ## [0.1.3] - 2026-03-12
8
+
9
+ - Exposed object-oriented accessors for nested attributes (ex.: `processo.vara.nome`).
10
+ - Standardized on `andamentos` and removed the `movimentacoes` alias.
11
+
3
12
  ## [0.1.2] - 2026-03-12
4
13
 
5
14
  - Added `Datajud.find` to return process data via an object-oriented API.
data/README.md CHANGED
@@ -19,19 +19,35 @@ If bundler is not being used to manage dependencies, install the gem by executin
19
19
  ```ruby
20
20
  require 'datajud'
21
21
 
22
+ # Busca processo (tribunal pode ser explícito ou inferido)
22
23
  processo = Datajud.find("00008323520184013202")
23
-
24
- # Com tribunal explícito
25
24
  processo = Datajud.find("00008323520184013202", tribunal: "trf1")
26
25
 
27
- processo.numero
28
- processo.classe
29
- processo.partes
30
- processo.movimentacoes
31
-
32
- # Tribunal como objeto
33
- processo.tribunal
34
- # => { nome: "TRF1", sigla: "TRF1", esfera: "Federal" }
26
+ # Acessa atributos principais
27
+ puts processo.tribunal # Tribunal como objeto ou string
28
+ puts processo.numero
29
+ puts processo.vara
30
+ puts processo.situacao
31
+ puts processo.andamentos
32
+ puts processo.documentos
33
+ puts processo.audiencias
34
+ puts processo.sistema
35
+ puts processo.formato
36
+ puts processo.data_ultima_atualizacao
37
+ puts processo.data_ajuizamento
38
+ puts processo.nivel_sigilo
39
+ puts processo.id
40
+ puts processo.timestamp
41
+
42
+ # Tribunal como objeto (se disponível)
43
+ puts processo.tribunal.nome if processo.tribunal.respond_to?(:nome)
44
+ puts processo.tribunal.sigla if processo.tribunal.respond_to?(:sigla)
45
+ puts processo.tribunal.esfera if processo.tribunal.respond_to?(:esfera)
46
+
47
+ # Exemplos de acesso orientado a objeto
48
+ puts processo.vara.nome if processo.vara.respond_to?(:nome)
49
+ puts processo.vara.comarca.nome if processo.vara&.comarca&.respond_to?(:nome)
50
+ puts processo.assunto.map(&:nome) if processo.assunto
35
51
 
36
52
  # Tabela HTML de endpoints (todos os tribunais conhecidos)
37
53
  Datajud.endpoints_table(Datajud::TRIBUNAIS_SIGLAS)
@@ -42,6 +58,8 @@ Datajud.endpoints_table(Datajud::TRIBUNAIS_SIGLAS)
42
58
  ```ruby
43
59
  # API orientada a objeto
44
60
  processo = Datajud.find("00008323520184013202", tribunal: "trf1")
61
+ # ou
62
+ processo = Datajud.find("00008323520184013202", "trf1")
45
63
 
46
64
  # Retorno bruto (hash)
47
65
  resultado = Datajud.processo("00008323520184013202", tribunal: "trf1")
@@ -73,7 +91,7 @@ para evitar varrer todas as bases.
73
91
 
74
92
  ```ruby
75
93
  processo = Datajud.find("0000832-35.2018.8.26.0202")
76
- puts processo.tribunal
94
+ puts processo.tribunal.nome
77
95
  ```
78
96
 
79
97
  > A UF da comarca é derivada localmente pelo código IBGE do município quando disponível.
data/examples/find.rb CHANGED
@@ -11,11 +11,11 @@ begin
11
11
  processo = Datajud.find("0000832-35.2018.8.26.0202")
12
12
 
13
13
  if processo
14
- puts "Tribunal: #{processo.tribunal}"
14
+ puts "Tribunal: #{processo.tribunal.nome}"
15
15
  puts "Número: #{processo.numero}"
16
- puts "Classe: #{processo.classe}"
16
+ puts "Classe: #{processo.classe.nome}"
17
17
  puts "Partes: #{processo.partes.map(&:nome).join(', ')}"
18
- puts "Movimentações: #{processo.movimentacoes.size}"
18
+ puts "Andamentos: #{processo.andamentos.size}"
19
19
  else
20
20
  puts "Processo não encontrado."
21
21
  end
@@ -6,99 +6,63 @@ module Datajud
6
6
  # Representa um processo retornado pela API DataJud.
7
7
  # Fornece acesso simples a campos comuns via métodos.
8
8
  class Processo
9
- attr_reader :tribunal, :data
9
+ def self.deep_struct(obj)
10
+ case obj
11
+ when Hash
12
+ OpenStruct.new(obj.transform_values { |v| deep_struct(v) })
13
+ when Array
14
+ obj.map { |v| deep_struct(v) }
15
+ else
16
+ obj
17
+ end
18
+ end
19
+ def municipio_ibge
20
+ orgao = instance_variable_get(:@orgao_julgador) || instance_variable_get(:@orgao_julgador) || self.respond_to?(:orgao_julgador) ? self.orgao_julgador : nil
21
+ return nil unless orgao && orgao.is_a?(Hash)
22
+ orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
23
+ end
24
+ def comarca_ibge_codigo
25
+ v = instance_variable_get(:@vara)
26
+ return nil unless v && v.is_a?(Hash)
27
+ comarca = v['comarca'] || v[:comarca]
28
+ return nil unless comarca && comarca.is_a?(Hash)
29
+ comarca['codigoIbge'] || comarca[:codigoIbge] || comarca['ibge'] || comarca[:ibge]
30
+ end
31
+ attr_reader :tribunal
10
32
 
11
33
  def initialize(raw)
12
- # raw expected: { tribunal: 'TJSP', processo: { ... } } or string-keyed
13
- @tribunal = raw[:tribunal] || raw['tribunal']
14
- @data = raw[:processo] || raw['processo'] || {}
15
- end
16
-
17
- def numero
18
- @data['numero'] || @data[:numero]
19
- end
20
-
21
- def classe
22
- @data['classe'] || @data[:classe]
23
- end
24
-
25
- def vara
26
- v = @data['vara'] || @data[:vara]
27
- return nil unless v
28
-
29
- OpenStruct.new(
30
- nome: v['nome'] || v[:nome],
31
- codigo: v['codigo'] || v[:codigo],
32
- comarca: v['comarca'] || v[:comarca]
33
- )
34
- end
35
-
36
- def situacao
37
- @data['situacao'] || @data[:situacao]
38
- end
39
-
40
- def origem
41
- @data['origem'] || @data[:origem]
42
- end
43
-
44
- def instancia
45
- @data['instancia'] || @data[:instancia]
46
- end
47
-
48
- def assunto
49
- @data['assunto'] || @data[:assunto]
50
- end
51
-
52
- def partes
53
- partes = @data['partes'] || @data[:partes] || []
54
- partes.map do |p|
55
- OpenStruct.new(
56
- nome: p['nome'] || p[:nome],
57
- tipo: p['tipo'] || p['tipoParte'] || p[:tipo],
58
- documento: p['documento'] || p[:documento]
59
- )
34
+ processo_hash = raw[:processo] || raw['processo'] || raw
35
+ @tribunal = self.class.deep_struct(raw[:tribunal] || raw['tribunal'])
36
+ processo_hash.each do |k, v|
37
+ ivar = "@#{k.to_s.gsub(/([A-Z])/, '_\\1').downcase}"
38
+ instance_variable_set(ivar, self.class.deep_struct(v))
39
+ self.class.send(:attr_reader, k.to_s.gsub(/([A-Z])/, '_\\1').downcase)
60
40
  end
61
- end
62
-
63
- def andamentos
64
- mov = @data['andamentos'] || @data[:andamentos] || @data['movimentacoes'] || @data[:movimentacoes]
65
- (mov || []).map do |m|
66
- OpenStruct.new(
67
- descricao: m['descricao'] || m[:descricao],
68
- data: m['data'] || m['dataHora'] || m[:data],
69
- tipo: m['tipo'] || m['codigoTipoMovimento'] || m[:tipo]
70
- )
41
+ if processo_hash['orgaoJulgador'] || processo_hash[:orgaoJulgador]
42
+ orgao = processo_hash['orgaoJulgador'] || processo_hash[:orgaoJulgador]
43
+ instance_variable_set(:@orgao_julgador, self.class.deep_struct(orgao))
44
+ self.class.send(:attr_reader, :orgao_julgador)
45
+ if orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
46
+ vara = instance_variable_get(:@vara)
47
+ if vara && vara.respond_to?(:comarca)
48
+ comarca = vara.comarca
49
+ if comarca && comarca.is_a?(OpenStruct)
50
+ ibge = orgao['codigoMunicipioIBGE'] || orgao[:codigoMunicipioIBGE]
51
+ comarca.codigoIbge = ibge if comarca.respond_to?(:codigoIbge=)
52
+ end
53
+ end
54
+ end
71
55
  end
72
- end
73
56
 
74
- def documentos
75
- docs = @data['documentos'] || @data[:documentos] || []
76
- docs.map do |d|
77
- OpenStruct.new(
78
- titulo: d['titulo'] || d['nomeDocumento'] || d[:titulo],
79
- tipo: d['tipo'] || d['tipoDocumento'] || d[:tipo],
80
- data: d['data'] || d['dataJuntada'] || d[:data],
81
- assinatura_digital: d['assinatura_digital'] || d['assinaturaDigital'] || d[:assinatura_digital]
82
- )
83
- end
84
57
  end
85
58
 
86
- def audiencias
87
- auds = @data['audiencias'] || @data[:audiencias] || []
88
- auds.map do |a|
89
- OpenStruct.new(
90
- data_hora: a['data_hora'] || a['dataHora'] || a[:data_hora],
91
- tipo: a['tipo'] || a[:tipo],
92
- status: a['status'] || a['statusAudiencia'] || a[:status],
93
- observacao: a['observacao'] || a[:observacao]
94
- )
59
+ def codigo_municipio_ibge
60
+ if respond_to?(:orgao_julgador) && orgao_julgador.is_a?(Hash)
61
+ orgao_julgador['codigoMunicipioIBGE'] || orgao_julgador[:codigoMunicipioIBGE]
62
+ else
63
+ nil
95
64
  end
96
65
  end
97
-
98
- alias movimentacoes andamentos
99
-
100
- def to_h
101
- { tribunal: tribunal, processo: data }
102
- end
66
+ # Only tribunal is explicit; all other fields are dynamic.
103
67
  end
104
68
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Datajud
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
data/lib/datajud.rb CHANGED
@@ -357,11 +357,11 @@ module Datajud
357
357
  tribunal: tribunal_from(sigla, proc),
358
358
  processo: {
359
359
  numero: proc['numeroProcesso'],
360
- vara: proc['orgaoJulgador'] ? {
361
- nome: proc['orgaoJulgador']['nome'],
362
- codigo: proc['orgaoJulgador']['codigo'],
363
- comarca: comarca_from(proc['orgaoJulgador'], sigla)
364
- } : nil,
360
+ vara: proc['orgaoJulgador'] ? {
361
+ nome: proc['orgaoJulgador']['nome'],
362
+ codigo: proc['orgaoJulgador']['codigo'],
363
+ comarca: comarca_from(proc['orgaoJulgador'], sigla)
364
+ } : nil,
365
365
  situacao: proc['situacao'],
366
366
  origem: proc['origem'],
367
367
  instancia: proc['grau'],
@@ -390,7 +390,14 @@ module Datajud
390
390
  status: aud['statusAudiencia'],
391
391
  observacao: aud['observacao']
392
392
  }
393
- end
393
+ end,
394
+ sistema: proc['sistema'],
395
+ formato: proc['formato'],
396
+ dataHoraUltimaAtualizacao: proc['dataHoraUltimaAtualizacao'],
397
+ dataAjuizamento: proc['dataAjuizamento'],
398
+ nivelSigilo: proc['nivelSigilo'],
399
+ id: proc['id'],
400
+ timestamp: proc['@timestamp']
394
401
  }
395
402
  }
396
403
  break
@@ -471,7 +478,8 @@ module Datajud
471
478
  if comarca.is_a?(Hash)
472
479
  nome = comarca['nome'] || comarca['descricao'] || comarca['nomeComarca']
473
480
  uf = comarca['uf'] || comarca['siglaUf'] || comarca['estado']
474
- return { nome: nome, uf: uf, tribunal: sigla.upcase }
481
+ hash = { nome: nome, uf: uf, tribunal: sigla.upcase }
482
+ return hash
475
483
  end
476
484
 
477
485
  nome = comarca || orgao_julgador['nome']
@@ -485,7 +493,11 @@ module Datajud
485
493
 
486
494
  return nil unless nome
487
495
 
488
- { nome: nome, uf: uf, tribunal: sigla.upcase }
496
+ hash = { nome: nome, uf: uf, tribunal: sigla.upcase }
497
+ if orgao_julgador['codigoMunicipioIBGE']
498
+ hash[:codigoIbge] = orgao_julgador['codigoMunicipioIBGE']
499
+ end
500
+ hash
489
501
  end
490
502
 
491
503
  def self.ibge_uf_from(codigo_municipio)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datajud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - PablUoo