tormenta20 0.2.11 → 0.2.12
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 +4 -4
- data/README.md +141 -40
- data/db/schema.sql +44 -0
- data/db/tormenta20.sqlite3 +0 -0
- data/docs/armaduras.md +13 -13
- data/docs/armas.md +14 -14
- data/docs/condicoes.md +77 -0
- data/docs/divindades.md +14 -14
- data/docs/escudos.md +12 -12
- data/docs/indice_remissivo.md +105 -0
- data/docs/itens.md +9 -9
- data/docs/livros.md +43 -0
- data/docs/magias.md +41 -41
- data/docs/materiais_especiais.md +11 -11
- data/docs/melhorias.md +12 -12
- data/docs/poderes.md +12 -12
- data/docs/racas.md +68 -0
- data/docs/regras.md +7 -7
- data/src/json/indice_remissivo/t20_eja.json +1100 -0
- data/src/json/livros/t20_eja.json +5 -0
- data/src/ruby/tormenta20/concerns/book_referenceable.rb +52 -0
- data/src/ruby/tormenta20/database.rb +1 -0
- data/src/ruby/tormenta20/models/base.rb +2 -0
- data/src/ruby/tormenta20/models/indice_remissivo.rb +57 -0
- data/src/ruby/tormenta20/models/livro.rb +28 -0
- data/src/ruby/tormenta20/version.rb +1 -1
- data/src/ruby/tormenta20.rb +17 -0
- metadata +10 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Tormenta20
|
|
4
|
+
module Concerns
|
|
5
|
+
# Mixin that gives any gem model access to its book/page reference.
|
|
6
|
+
#
|
|
7
|
+
# Methods are lazy-loaded: the database is queried on the first call
|
|
8
|
+
# and the result is memoized for the lifetime of the instance.
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
# guerreiro = Tormenta20.classes.find("guerreiro")
|
|
12
|
+
# guerreiro.book_reference # => "T20 - EJA, p. 56"
|
|
13
|
+
# guerreiro.page # => 56
|
|
14
|
+
# guerreiro.book # => "T20 - EJA"
|
|
15
|
+
# guerreiro.full_book # => "Tormenta 20 - Edição Jogo do Ano"
|
|
16
|
+
module BookReferenceable
|
|
17
|
+
# "T20 - EJA, p. 215" — nil se não houver entrada no índice.
|
|
18
|
+
def book_reference
|
|
19
|
+
entry = _indice_entry
|
|
20
|
+
return nil unless entry
|
|
21
|
+
|
|
22
|
+
"#{entry.livro.nome_curto}, p. #{entry.pagina}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Número da página (Integer) — nil se não indexado.
|
|
26
|
+
def page
|
|
27
|
+
_indice_entry&.pagina
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Nome curto do livro (String) — nil se não indexado.
|
|
31
|
+
def book
|
|
32
|
+
_indice_entry&.livro&.nome_curto
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Nome completo do livro (String) — nil se não indexado.
|
|
36
|
+
def full_book
|
|
37
|
+
_indice_entry&.livro&.nome
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def _indice_entry
|
|
43
|
+
# Memoize por instância; reset se o id mudar.
|
|
44
|
+
return @_indice_entry if defined?(@_indice_entry)
|
|
45
|
+
|
|
46
|
+
@_indice_entry = Models::IndiceRemissivo
|
|
47
|
+
.includes(:livro)
|
|
48
|
+
.find_by(tabela: self.class.table_name, registro_id: id.to_s)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record"
|
|
4
|
+
|
|
5
|
+
module Tormenta20
|
|
6
|
+
module Models
|
|
7
|
+
# Entrada do índice remissivo de um livro.
|
|
8
|
+
#
|
|
9
|
+
# Cada linha representa um termo do índice associado a uma página.
|
|
10
|
+
# Os campos +tabela+ e +registro_id+ são opcionais e preenchidos quando
|
|
11
|
+
# o termo é vinculado a um registro concreto de outra tabela da gem.
|
|
12
|
+
#
|
|
13
|
+
# @example Buscar página de "Guerreiro" no T20 EJA
|
|
14
|
+
# Tormenta20::Models::IndiceRemissivo
|
|
15
|
+
# .where(livro_id: "t20_eja", tabela: "classes", registro_id: "guerreiro")
|
|
16
|
+
# .pluck(:pagina)
|
|
17
|
+
#
|
|
18
|
+
# @example Buscar todas as entradas de um livro que mencionam "Magia"
|
|
19
|
+
# Tormenta20::Models::IndiceRemissivo
|
|
20
|
+
# .where(livro_id: "t20_eja")
|
|
21
|
+
# .where("termo LIKE ?", "%Magia%")
|
|
22
|
+
class IndiceRemissivo < Base
|
|
23
|
+
self.table_name = "indice_remissivo"
|
|
24
|
+
self.primary_key = "id"
|
|
25
|
+
|
|
26
|
+
belongs_to :livro,
|
|
27
|
+
class_name: "Tormenta20::Models::Livro",
|
|
28
|
+
foreign_key: "livro_id"
|
|
29
|
+
|
|
30
|
+
validates :livro_id, presence: true
|
|
31
|
+
validates :termo, presence: true
|
|
32
|
+
validates :pagina, presence: true, numericality: { only_integer: true, greater_than: 0 }
|
|
33
|
+
|
|
34
|
+
# Scopes
|
|
35
|
+
scope :do_livro, ->(livro_id) { where(livro_id: livro_id) }
|
|
36
|
+
scope :para_tabela, ->(tabela) { where(tabela: tabela) }
|
|
37
|
+
scope :associados, -> { where.not(registro_id: nil) }
|
|
38
|
+
scope :nao_associados, -> { where(registro_id: nil) }
|
|
39
|
+
scope :buscar_termo, ->(q) { where("termo LIKE ?", "%#{q}%") }
|
|
40
|
+
|
|
41
|
+
def to_h
|
|
42
|
+
{
|
|
43
|
+
id: id,
|
|
44
|
+
livro_id: livro_id,
|
|
45
|
+
termo: termo,
|
|
46
|
+
pagina: pagina,
|
|
47
|
+
tabela: tabela,
|
|
48
|
+
registro_id: registro_id
|
|
49
|
+
}.compact
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def associado?
|
|
53
|
+
registro_id.present?
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_record"
|
|
4
|
+
|
|
5
|
+
module Tormenta20
|
|
6
|
+
module Models
|
|
7
|
+
class Livro < Base
|
|
8
|
+
self.table_name = "livros"
|
|
9
|
+
|
|
10
|
+
has_many :indice_remissivo_entries,
|
|
11
|
+
class_name: "Tormenta20::Models::IndiceRemissivo",
|
|
12
|
+
foreign_key: "livro_id",
|
|
13
|
+
dependent: :destroy
|
|
14
|
+
|
|
15
|
+
validates :id, presence: true, uniqueness: true
|
|
16
|
+
validates :nome, presence: true
|
|
17
|
+
validates :nome_curto, presence: true
|
|
18
|
+
|
|
19
|
+
def to_h
|
|
20
|
+
{
|
|
21
|
+
id: id,
|
|
22
|
+
nome: nome,
|
|
23
|
+
nome_curto: nome_curto
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/src/ruby/tormenta20.rb
CHANGED
|
@@ -6,6 +6,9 @@ require "sqlite3"
|
|
|
6
6
|
|
|
7
7
|
require_relative "tormenta20/database"
|
|
8
8
|
|
|
9
|
+
# Load concerns before models
|
|
10
|
+
require_relative "tormenta20/concerns/book_referenceable"
|
|
11
|
+
|
|
9
12
|
# Load base model first, then other models
|
|
10
13
|
require_relative "tormenta20/models/base"
|
|
11
14
|
Dir["#{__dir__}/tormenta20/models/*.rb"].each { |file| require file unless file.include?("base") }
|
|
@@ -182,6 +185,20 @@ module Tormenta20
|
|
|
182
185
|
Models::Condicao
|
|
183
186
|
end
|
|
184
187
|
|
|
188
|
+
# Acesso aos livros cadastrados.
|
|
189
|
+
#
|
|
190
|
+
# @return [Class] Tormenta20::Models::Livro
|
|
191
|
+
def livros
|
|
192
|
+
Models::Livro
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Acesso ao índice remissivo.
|
|
196
|
+
#
|
|
197
|
+
# @return [Class] Tormenta20::Models::IndiceRemissivo
|
|
198
|
+
def indice_remissivo
|
|
199
|
+
Models::IndiceRemissivo
|
|
200
|
+
end
|
|
201
|
+
|
|
185
202
|
# @!endgroup
|
|
186
203
|
end
|
|
187
204
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tormenta20
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- LuanGB
|
|
@@ -73,14 +73,18 @@ files:
|
|
|
73
73
|
- docs/armaduras.md
|
|
74
74
|
- docs/armas.md
|
|
75
75
|
- docs/classes.md
|
|
76
|
+
- docs/condicoes.md
|
|
76
77
|
- docs/divindades.md
|
|
77
78
|
- docs/escudos.md
|
|
79
|
+
- docs/indice_remissivo.md
|
|
78
80
|
- docs/itens.md
|
|
81
|
+
- docs/livros.md
|
|
79
82
|
- docs/magias.md
|
|
80
83
|
- docs/materiais_especiais.md
|
|
81
84
|
- docs/melhorias.md
|
|
82
85
|
- docs/origens.md
|
|
83
86
|
- docs/poderes.md
|
|
87
|
+
- docs/racas.md
|
|
84
88
|
- docs/regras.md
|
|
85
89
|
- examples/database_usage.rb
|
|
86
90
|
- exe/tormenta20
|
|
@@ -329,6 +333,7 @@ files:
|
|
|
329
333
|
- src/json/equipamentos/municoes/flechas.json
|
|
330
334
|
- src/json/equipamentos/municoes/pedras.json
|
|
331
335
|
- src/json/equipamentos/municoes/virotes.json
|
|
336
|
+
- src/json/indice_remissivo/t20_eja.json
|
|
332
337
|
- src/json/itens_superiores/materiais_especiais/aco_rubi.json
|
|
333
338
|
- src/json/itens_superiores/materiais_especiais/adamante.json
|
|
334
339
|
- src/json/itens_superiores/materiais_especiais/gelo_eterno.json
|
|
@@ -364,6 +369,7 @@ files:
|
|
|
364
369
|
- src/json/itens_superiores/melhorias/geral/discreto.json
|
|
365
370
|
- src/json/itens_superiores/melhorias/geral/macabro.json
|
|
366
371
|
- src/json/itens_superiores/melhorias/geral/material_especial.json
|
|
372
|
+
- src/json/livros/t20_eja.json
|
|
367
373
|
- src/json/magias/abencoar_alimentos.json
|
|
368
374
|
- src/json/magias/acalmar_animal.json
|
|
369
375
|
- src/json/magias/adaga_mental.json
|
|
@@ -1244,6 +1250,7 @@ files:
|
|
|
1244
1250
|
- src/json/regras/venenos.json
|
|
1245
1251
|
- src/python/__init__.py
|
|
1246
1252
|
- src/ruby/tormenta20.rb
|
|
1253
|
+
- src/ruby/tormenta20/concerns/book_referenceable.rb
|
|
1247
1254
|
- src/ruby/tormenta20/database.rb
|
|
1248
1255
|
- src/ruby/tormenta20/models/arma.rb
|
|
1249
1256
|
- src/ruby/tormenta20/models/armadura.rb
|
|
@@ -1252,7 +1259,9 @@ files:
|
|
|
1252
1259
|
- src/ruby/tormenta20/models/condicao.rb
|
|
1253
1260
|
- src/ruby/tormenta20/models/divindade.rb
|
|
1254
1261
|
- src/ruby/tormenta20/models/escudo.rb
|
|
1262
|
+
- src/ruby/tormenta20/models/indice_remissivo.rb
|
|
1255
1263
|
- src/ruby/tormenta20/models/item.rb
|
|
1264
|
+
- src/ruby/tormenta20/models/livro.rb
|
|
1256
1265
|
- src/ruby/tormenta20/models/magia.rb
|
|
1257
1266
|
- src/ruby/tormenta20/models/material_especial.rb
|
|
1258
1267
|
- src/ruby/tormenta20/models/melhoria.rb
|