about summary refs log tree commit diff stats
path: root/app/models/pokeviewer/pokemon.rb
blob: 1410d377cf5b4d3e5860762935c7749100c471f2 (plain) (blame)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
module Pokeviewer
  class Pokemon < ApplicationRecord
    extend Enumerize

    belongs_to :species
    belongs_to :trainer, optional: true
    has_many :revisions, -> { order "sequential_id ASC" }, dependent: :destroy

    validate :uuid_is_constant, on: :update
    before_create :set_uuid

    validates :ot_name, presence: true

    validates :ot_number, presence: true,
      numericality: { greater_than_or_equal_to: 0, only_integer: true }

    validates :met_level, presence: true,
      numericality: { greater_than_or_equal_to: 1, only_integer: true },
      if: Proc.new { |a| a.met_type == :normal }

    validates :met_type, presence: true
    enumerize :met_type, in: [:normal, :hatched, :npc_trade, :fateful_encounter]

    validates :gender, presence: true
    enumerize :gender, in: [:genderless, :female, :male]

    validates :nature, presence: true
    enumerize :nature, in: [:hardy, :lonely, :brave, :adamant, :naughty, :bold,
      :docile, :relaxed, :impish, :lax, :timid, :hasty, :serious, :jolly,
      :naive, :modest, :mild, :quiet, :bashful, :rash, :calm, :gentle, :sassy,
      :careful, :quirky]

    enumerize :unown_letter, in: [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k,
      :l, :m, :n, :o, :p, :q, :r, :s, :t, :u, :v, :w, :x, :y, :z,
      :question, :exclamation]

    def to_param
      uuid
    end

    def icon_path
      "pokeviewer/icons/#{species_id}.png"
    end

    def sprite_path
      shininess = "normal"
      if shiny
        shininess = "shiny"
      end

      game = "ruby-sapphire"
      unless trainer.nil?
        if (trainer.firered? or trainer.leafgreen?) and (species_id <= 156 or species_id == 216 or species_id == 386)
          game = "firered-leafgreen"
        elsif trainer.emerald?
          game = "emerald"
        end
      end

      form = ""
      if species_id == 201
        # Handle Unown forms
        form = "-#{unown_letter}"
      elsif species_id == 386
        # Handle Deoxys forms
        if trainer.firered?
          form = "-attack"
        elsif trainer.leafgreen?
          form = "-defense"
        elsif trainer.emerald?
          form = "-speed"
        end
      end

      if game == "emerald"
        "pokeviewer/sprites/emerald/#{shininess}/#{species_id}#{form}.gif"
      else
        "pokeviewer/sprites/#{game}/#{shininess}/#{species_id}#{form}.png"
      end
    end

    private

      def set_uuid
        self.uuid = SecureRandom.uuid
      end

      def uuid_is_constant
        errors.add(:uuid, "can't be changed") if self.uuid_changed?
      end
  end
end