diff options
Diffstat (limited to 'app/models/trainer.rb')
-rw-r--r-- | app/models/trainer.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/app/models/trainer.rb b/app/models/trainer.rb new file mode 100644 index 0000000..930dbaf --- /dev/null +++ b/app/models/trainer.rb | |||
@@ -0,0 +1,93 @@ | |||
1 | class Trainer < ApplicationRecord | ||
2 | extend Enumerize | ||
3 | |||
4 | has_many :pokemon, dependent: :nullify | ||
5 | |||
6 | has_many :pokedex_entries, dependent: :destroy | ||
7 | |||
8 | validates :number, presence: true, | ||
9 | numericality: { greater_than_or_equal_to: 0, only_integer: true } | ||
10 | |||
11 | validates :name, presence: true, uniqueness: { | ||
12 | scope: :number, | ||
13 | message: "and number should be pairwise unique" } | ||
14 | |||
15 | validates :game, presence: true | ||
16 | enumerize :game, in: [:ruby, :sapphire, :firered, :leafgreen, :emerald], | ||
17 | predicates: true | ||
18 | |||
19 | belongs_to :marine_ribbon, class_name: "GiftRibbon", optional: true | ||
20 | belongs_to :land_ribbon, class_name: "GiftRibbon", optional: true | ||
21 | belongs_to :sky_ribbon, class_name: "GiftRibbon", optional: true | ||
22 | belongs_to :country_ribbon, class_name: "GiftRibbon", optional: true | ||
23 | belongs_to :national_ribbon, class_name: "GiftRibbon", optional: true | ||
24 | belongs_to :earth_ribbon, class_name: "GiftRibbon", optional: true | ||
25 | belongs_to :world_ribbon, class_name: "GiftRibbon", optional: true | ||
26 | |||
27 | validates :box_1_name, presence: true | ||
28 | validates :box_2_name, presence: true | ||
29 | validates :box_3_name, presence: true | ||
30 | validates :box_4_name, presence: true | ||
31 | validates :box_5_name, presence: true | ||
32 | validates :box_6_name, presence: true | ||
33 | validates :box_7_name, presence: true | ||
34 | validates :box_8_name, presence: true | ||
35 | validates :box_9_name, presence: true | ||
36 | validates :box_10_name, presence: true | ||
37 | validates :box_11_name, presence: true | ||
38 | validates :box_12_name, presence: true | ||
39 | validates :box_13_name, presence: true | ||
40 | validates :box_14_name, presence: true | ||
41 | |||
42 | def party | ||
43 | pokemon.party.includes(current: [:species]) | ||
44 | end | ||
45 | |||
46 | def box(n) | ||
47 | pokemon.box(n).includes(current: [:species]) | ||
48 | end | ||
49 | |||
50 | def box_name(n) | ||
51 | if n > 0 and n <= 14 | ||
52 | send "box_#{n}_name".intern | ||
53 | else | ||
54 | nil | ||
55 | end | ||
56 | end | ||
57 | |||
58 | def box_contents(n) | ||
59 | pokes = box(n).to_a | ||
60 | |||
61 | result = [] | ||
62 | (0..29).each do |i| | ||
63 | if pokes.empty? or (pokes.first.slot == i) | ||
64 | result << pokes.shift | ||
65 | else | ||
66 | result << nil | ||
67 | end | ||
68 | end | ||
69 | |||
70 | result | ||
71 | end | ||
72 | |||
73 | def boxes | ||
74 | (1..14).map { |n| { | ||
75 | name: box_name(n), | ||
76 | pokemon: box_contents(n) | ||
77 | }} | ||
78 | end | ||
79 | |||
80 | def display_number | ||
81 | number.to_s.rjust(5, '0') | ||
82 | end | ||
83 | |||
84 | def gift_ribbon_description(ribbon) | ||
85 | gift_ribbon = send ribbon | ||
86 | |||
87 | if gift_ribbon.nil? | ||
88 | "" | ||
89 | else | ||
90 | gift_ribbon.description | ||
91 | end | ||
92 | end | ||
93 | end | ||