From 1d621019d7bf74b65898e009aef31766c7e7572b Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 16 Sep 2017 22:40:16 -0400 Subject: Created a bunch of models --- app/models/pokeviewer/move.rb | 10 +++++ app/models/pokeviewer/pokemon.rb | 50 +++++++++++++++++++++++ app/models/pokeviewer/revision.rb | 72 ++++++++++++++++++++++++++++++++++ app/models/pokeviewer/revision_move.rb | 19 +++++++++ app/models/pokeviewer/species.rb | 7 ++++ app/models/pokeviewer/trainer.rb | 17 ++++++++ 6 files changed, 175 insertions(+) create mode 100644 app/models/pokeviewer/move.rb create mode 100644 app/models/pokeviewer/pokemon.rb create mode 100644 app/models/pokeviewer/revision.rb create mode 100644 app/models/pokeviewer/revision_move.rb create mode 100644 app/models/pokeviewer/species.rb create mode 100644 app/models/pokeviewer/trainer.rb (limited to 'app') diff --git a/app/models/pokeviewer/move.rb b/app/models/pokeviewer/move.rb new file mode 100644 index 0000000..337ac11 --- /dev/null +++ b/app/models/pokeviewer/move.rb @@ -0,0 +1,10 @@ +module Pokeviewer + class Move < ApplicationRecord + has_many :revision_moves + has_many :revisions, through: :revision_moves + + validates :name, presence: true, uniqueness: true + validates :pp, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + end +end diff --git a/app/models/pokeviewer/pokemon.rb b/app/models/pokeviewer/pokemon.rb new file mode 100644 index 0000000..114e9dd --- /dev/null +++ b/app/models/pokeviewer/pokemon.rb @@ -0,0 +1,50 @@ +module Pokeviewer + class Pokemon < ApplicationRecord + extend Enumerize + + belongs_to :species + belongs_to :trainer, optional: true + has_many :revisions, 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 } + + 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_mark, :exclamation_mark] + + def to_param + uuid + 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 diff --git a/app/models/pokeviewer/revision.rb b/app/models/pokeviewer/revision.rb new file mode 100644 index 0000000..a8f8ab2 --- /dev/null +++ b/app/models/pokeviewer/revision.rb @@ -0,0 +1,72 @@ +module Pokeviewer + class Revision < ApplicationRecord + belongs_to :pokemon + acts_as_sequenced scope: :pokemon_id + + has_many :revision_moves, -> { order "number ASC" } + has_many :moves, through: :revision_moves + + validates :moves, presence: true + validates :nickname, presence: true + + validates :experience, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :level, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :hp, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :attack, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :defense, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :special_attack, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :special_defense, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :speed, presence: true, + numericality: { greater_than_or_equal_to: 1, only_integer: true } + + validates :coolness, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + + validates :beauty, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + + validates :cuteness, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + + validates :smartness, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + + validates :toughness, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + + validates :sheen, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 10, + only_integer: true } + end +end diff --git a/app/models/pokeviewer/revision_move.rb b/app/models/pokeviewer/revision_move.rb new file mode 100644 index 0000000..74b9e9e --- /dev/null +++ b/app/models/pokeviewer/revision_move.rb @@ -0,0 +1,19 @@ +module Pokeviewer + class RevisionMove < ApplicationRecord + belongs_to :revision + belongs_to :move + + validates :number, presence: true, + numericality: { + greater_than_or_equal_to: 1, + less_than_or_equal_to: 4, + only_integer: true }, + uniqueness: { scope: :revision_id } + + validates :pp_bonuses, presence: true, + numericality: { + greater_than_or_equal_to: 0, + less_than_or_equal_to: 3, + only_integer: true} + end +end diff --git a/app/models/pokeviewer/species.rb b/app/models/pokeviewer/species.rb new file mode 100644 index 0000000..c69fd21 --- /dev/null +++ b/app/models/pokeviewer/species.rb @@ -0,0 +1,7 @@ +module Pokeviewer + class Species < ApplicationRecord + has_many :pokemon, dependent: :restrict_with_exception + + validates :name, presence: true, uniqueness: true + end +end diff --git a/app/models/pokeviewer/trainer.rb b/app/models/pokeviewer/trainer.rb new file mode 100644 index 0000000..1cef881 --- /dev/null +++ b/app/models/pokeviewer/trainer.rb @@ -0,0 +1,17 @@ +module Pokeviewer + class Trainer < ApplicationRecord + extend Enumerize + + has_many :pokemon, dependent: :nullify + + validates :number, presence: true, + numericality: { greater_than_or_equal_to: 0, only_integer: true } + + validates :name, presence: true, uniqueness: { + scope: :number, + message: "and number should be pairwise unique" } + + validates :game, presence: true + enumerize :game, in: [:ruby, :sapphire, :firered, :leafgreen, :emerald] + end +end -- cgit 1.4.1