1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# `class List < Sequel::Model(DB[:lists])` has no constant superclass for
# the inline parser to read, so the models are marked `@rbs skip` in
# models.rb and signed here: their columns and associations.
module RankKing
  class User < Sequel::Model
    def login: () -> String
    def lists: () -> Array[List]
    def lists_dataset: () -> Sequel::Dataset[List]
  end

  class List < Sequel::Model
    def user_id: () -> Integer
    def user: () -> User
    def name: () -> String
    def items: () -> Array[Item]
    def axes: () -> Array[Axis]
    def items_dataset: () -> Sequel::Dataset[Item]
    def axes_dataset: () -> Sequel::Dataset[Axis]
    def source_kind: () -> String
    def synced_at: () -> Time?
  end

  class Item < Sequel::Model
    def name: () -> String
    def list_id: () -> Integer
    def list: () -> List
    def archived_at: () -> Time?
  end

  class Axis < Sequel::Model
    def name: () -> String
    def list_id: () -> Integer
    def list: () -> List
    def results: () -> Array[Result]
    def results_dataset: () -> Sequel::Dataset[Result]
    def ranking: (?Hash[Integer, OpenSkill::Rating]) -> [Array[Item], Array[Item]]
    def ratings: () -> Hash[Integer, OpenSkill::Rating]
  end

  class Result < Sequel::Model
    def axis_id: () -> Integer
    def winner_id: () -> Integer
    def loser_id: () -> Integer
    def tie: () -> bool
    def axis: () -> Axis
    def winner: () -> Item
    def loser: () -> Item
  end
end