A 1000 Blank White Cards Initial Migration for Rails

class FirstWhack < ActiveRecord::Migration
def self.up create_table :cards, :force=>true do |t|
t.column :title, :string, :null=>false # Name of the card. "Jumpin' Jesus on a Pogo-Stick"
t.column :img, :string # A fully-qualified URL or local filename. Null implies "blank"!
t.column :effect, :string # Psuedo-code. Ex: "modify 1 cards where target has tag 2" Optional
t.column :action, :string # Describe the effect. "Play on a blue card--change the image." Optional.
t.column :points, :integer, :null=>false, :default=>0
t.column :player_id, :integer # Current owner, null is discards
t.column :game_id, :integer, :null=>false
t.column :created_at, :datetime, :null=>false
t.column :created_by, :integer, :null=>false # fk to players
end
create_table :tags, :force=>true do |t|
t.column :name, :string, :null=>false
end
create_table :cards_tags, :force=>true do |t|
t.column :card_id, :integer, :null=>false
t.column :tag_id, :integer, :null=>false
t.column :player_id, :integer # Who created it? If null, it was auto-added (ex: "blank")
t.column :created_at, :datetime, :null=>false
end
create_table :players, :force=>true do |t|
t.column :name, :string, :null=>false, :limit=>128
t.column :born_on, :date, :null=>false # So we know their age (and birthday?) - play will be youngest -> oldest
t.column :email, :string # Notification of turns. Optional.
t.column :img, :string # Full URL or local filename. Optional.
end
# Apparantly we've got a Catch-22, here: I don't yet have a Player object. Hmmmn.
# jr = Player.create :name=>"Jeremy Rice", :born_on=>Date.civil(1974,8,7), :email => "jrice.blue@gmail.com"
create_table :players_tags, :force=>true do |t|
t.column :player_id, :integer, :null=>false
t.column :tag_id, :integer, :null=>false
end
create_table :games, :force=>true do |t|
t.column :name, :string, :null=>false # Name of the game: "Teh Interwebs is 4 p0rn///"
t.column :current_player, :integer # Null until the game starts. Fk to players.
t.column :turn_order_sort, :string, :limit=>4 # Null for ASC, otherwise "DESC".
t.column :created_at, :datetime
t.column :started_at, :datetime
end
create_table :games_players, :force=>true do |t|
t.column :player_id, :integer, :null=>false
t.column :game_id, :integer, :null=>false
t.column :ready_to_start_at, :datetime # Null until the player has created their first 5 cards.
t.column :joined_at, :datetime
end
# This will store each play in a game. Useful for undos, but might also produce a kind of history.
create_table :plays, :force=>true do |t|
t.column :player_id, :integer, :null=>false
t.column :game_id, :integer, :null=>false
t.column :card_id, :integer, :null=>false
t.column :comment, :text # Jibe from the player; optional.
t.column :targets, :text # Not yet sure how I'll store this, but it'll be an array of objects.
end
end

def self.down
drop_table :cards
drop_table :tags
drop_table :cards_tags
drop_table :players
drop_table :players_tags
drop_table :games
drop_table :games_players
drop_table :plays
end
end

No comments: