From 2818e8becfb6a257df623713d507f0994d5cc278 Mon Sep 17 00:00:00 2001 From: "Ira W. Snyder" Date: Fri, 23 Nov 2007 11:17:51 -0800 Subject: [PATCH] Add real Gamegenre support This adds real, chooseable game genres, modeled after the Videogenre code. Signed-off-by: Ira W. Snyder --- app/controllers/gamegenre_controller.rb | 51 ++++++++++ app/helpers/gamegenre_helper.rb | 2 + app/models/game.rb | 4 + app/models/gamegenre.rb | 2 + app/models/video.rb | 8 ++ app/views/game/_form.rhtml | 2 +- app/views/game/list.rhtml | 22 +++-- app/views/gamegenre/_form.rhtml | 7 ++ app/views/gamegenre/edit.rhtml | 9 ++ app/views/gamegenre/list.rhtml | 27 ++++++ app/views/gamegenre/new.rhtml | 8 ++ app/views/gamegenre/show.rhtml | 8 ++ app/views/layouts/gamegenre.rhtml | 17 ++++ app/views/video/list.rhtml | 4 +- db/development.sqlite3 | Bin 22528 -> 23552 bytes db/migrate/024_create_gamegenres.rb | 11 +++ db/schema.rb | 6 +- test/fixtures/gamegenres.yml | 5 + test/functional/gamegenre_controller_test.rb | 92 +++++++++++++++++++ test/unit/gamegenre_test.rb | 10 ++ 20 files changed, 281 insertions(+), 14 deletions(-) create mode 100644 app/controllers/gamegenre_controller.rb create mode 100644 app/helpers/gamegenre_helper.rb create mode 100644 app/models/gamegenre.rb create mode 100644 app/views/gamegenre/_form.rhtml create mode 100644 app/views/gamegenre/edit.rhtml create mode 100644 app/views/gamegenre/list.rhtml create mode 100644 app/views/gamegenre/new.rhtml create mode 100644 app/views/gamegenre/show.rhtml create mode 100644 app/views/layouts/gamegenre.rhtml create mode 100644 db/migrate/024_create_gamegenres.rb create mode 100644 test/fixtures/gamegenres.yml create mode 100644 test/functional/gamegenre_controller_test.rb create mode 100644 test/unit/gamegenre_test.rb diff --git a/app/controllers/gamegenre_controller.rb b/app/controllers/gamegenre_controller.rb new file mode 100644 index 0000000..1293676 --- /dev/null +++ b/app/controllers/gamegenre_controller.rb @@ -0,0 +1,51 @@ +class GamegenreController < ApplicationController + def index + list + render :action => 'list' + end + + # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) + verify :method => :post, :only => [ :destroy, :create, :update ], + :redirect_to => { :action => :list } + + def list + @gamegenre_pages, @gamegenres = paginate :gamegenres, :per_page => 10 + end + + def show + @gamegenre = Gamegenre.find(params[:id]) + end + + def new + @gamegenre = Gamegenre.new + end + + def create + @gamegenre = Gamegenre.new(params[:gamegenre]) + if @gamegenre.save + flash[:notice] = 'Gamegenre was successfully created.' + redirect_to :action => 'list' + else + render :action => 'new' + end + end + + def edit + @gamegenre = Gamegenre.find(params[:id]) + end + + def update + @gamegenre = Gamegenre.find(params[:id]) + if @gamegenre.update_attributes(params[:gamegenre]) + flash[:notice] = 'Gamegenre was successfully updated.' + redirect_to :action => 'show', :id => @gamegenre + else + render :action => 'edit' + end + end + + def destroy + Gamegenre.find(params[:id]).destroy + redirect_to :action => 'list' + end +end diff --git a/app/helpers/gamegenre_helper.rb b/app/helpers/gamegenre_helper.rb new file mode 100644 index 0000000..d53499c --- /dev/null +++ b/app/helpers/gamegenre_helper.rb @@ -0,0 +1,2 @@ +module GamegenreHelper +end diff --git a/app/models/game.rb b/app/models/game.rb index 6c6b59b..15bf8e0 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -2,6 +2,10 @@ class Game < Rentable validates_presence_of :game_genre validates_presence_of :platform + def genre + return Gamegenre.find(game_genre).name + end + def calculated_price # FIXME: generate this based on day of week, newrelease day_of_week = Time.now.to_date.wday diff --git a/app/models/gamegenre.rb b/app/models/gamegenre.rb new file mode 100644 index 0000000..5a6631a --- /dev/null +++ b/app/models/gamegenre.rb @@ -0,0 +1,2 @@ +class Gamegenre < ActiveRecord::Base +end diff --git a/app/models/video.rb b/app/models/video.rb index 52344e1..b20602a 100644 --- a/app/models/video.rb +++ b/app/models/video.rb @@ -6,6 +6,14 @@ class Video < Rentable validates_presence_of :video_genre validates_presence_of :media + def genre + return Videogenre.find(video_genre).name + end + + def media_name + return Media.find(media).name + end + def calculated_price # FIXME: generate this based on day of week, newrelease day_of_week = Time.now.to_date.wday diff --git a/app/views/game/_form.rhtml b/app/views/game/_form.rhtml index b264601..b65208f 100644 --- a/app/views/game/_form.rhtml +++ b/app/views/game/_form.rhtml @@ -11,6 +11,6 @@ <%= text_field 'game', 'platform' %>


-<%= text_field 'game', 'game_genre' %>

+<%= select 'game', 'game_genre', Gamegenre.find(:all).collect {|c| [c.name.to_s, c.id] } %>

diff --git a/app/views/game/list.rhtml b/app/views/game/list.rhtml index 1a17dbf..fce55da 100644 --- a/app/views/game/list.rhtml +++ b/app/views/game/list.rhtml @@ -2,20 +2,22 @@ - - - <% for column in Game.content_columns %> - - <% end %> + + + + + + <% for game in @games %> - - - <% for column in Game.content_columns %> - - <% end %> + + + + + + diff --git a/app/views/gamegenre/_form.rhtml b/app/views/gamegenre/_form.rhtml new file mode 100644 index 0000000..9378e76 --- /dev/null +++ b/app/views/gamegenre/_form.rhtml @@ -0,0 +1,7 @@ +<%= error_messages_for 'gamegenre' %> + + +


+<%= text_field 'gamegenre', 'name' %>

+ + diff --git a/app/views/gamegenre/edit.rhtml b/app/views/gamegenre/edit.rhtml new file mode 100644 index 0000000..e5246a9 --- /dev/null +++ b/app/views/gamegenre/edit.rhtml @@ -0,0 +1,9 @@ +

Editing gamegenre

+ +<% form_tag :action => 'update', :id => @gamegenre do %> + <%= render :partial => 'form' %> + <%= submit_tag 'Edit' %> +<% end %> + +<%= link_to 'Show', :action => 'show', :id => @gamegenre %> | +<%= link_to 'Back', :action => 'list' %> diff --git a/app/views/gamegenre/list.rhtml b/app/views/gamegenre/list.rhtml new file mode 100644 index 0000000..21e0ea3 --- /dev/null +++ b/app/views/gamegenre/list.rhtml @@ -0,0 +1,27 @@ +

Listing gamegenres

+ +
Game IDChecked Out<%= column.human_name %>Game IDChecked OutTitleNew ReleaseGenrePlatform
<%=h game.id %><%=h game.checkedout? %><%=h game.send(column.name) %><%=h game.id %><%=h game.checkedout? %><%=h game.title %><%=h game.newrelease %><%=h game.genre %>FIXME <%= link_to 'Show', :action => 'show', :id => game %> <%= link_to 'Edit', :action => 'edit', :id => game %> <%= link_to 'Destroy', { :action => 'destroy', :id => game }, :confirm => 'Are you sure?', :method => :post %>
+ + <% for column in Gamegenre.content_columns %> + + <% end %> + + +<% for gamegenre in @gamegenres %> + + <% for column in Gamegenre.content_columns %> + + <% end %> + + + + +<% end %> +
<%= column.human_name %>
<%=h gamegenre.send(column.name) %><%= link_to 'Show', :action => 'show', :id => gamegenre %><%= link_to 'Edit', :action => 'edit', :id => gamegenre %><%= link_to 'Destroy', { :action => 'destroy', :id => gamegenre }, :confirm => 'Are you sure?', :method => :post %>
+ +<%= link_to 'Previous page', { :page => @gamegenre_pages.current.previous } if @gamegenre_pages.current.previous %> +<%= link_to 'Next page', { :page => @gamegenre_pages.current.next } if @gamegenre_pages.current.next %> + +
+ +<%= link_to 'New gamegenre', :action => 'new' %> diff --git a/app/views/gamegenre/new.rhtml b/app/views/gamegenre/new.rhtml new file mode 100644 index 0000000..98a943f --- /dev/null +++ b/app/views/gamegenre/new.rhtml @@ -0,0 +1,8 @@ +

New gamegenre

+ +<% form_tag :action => 'create' do %> + <%= render :partial => 'form' %> + <%= submit_tag "Create" %> +<% end %> + +<%= link_to 'Back', :action => 'list' %> diff --git a/app/views/gamegenre/show.rhtml b/app/views/gamegenre/show.rhtml new file mode 100644 index 0000000..417f406 --- /dev/null +++ b/app/views/gamegenre/show.rhtml @@ -0,0 +1,8 @@ +<% for column in Gamegenre.content_columns %> +

+ <%= column.human_name %>: <%=h @gamegenre.send(column.name) %> +

+<% end %> + +<%= link_to 'Edit', :action => 'edit', :id => @gamegenre %> | +<%= link_to 'Back', :action => 'list' %> diff --git a/app/views/layouts/gamegenre.rhtml b/app/views/layouts/gamegenre.rhtml new file mode 100644 index 0000000..ab082d2 --- /dev/null +++ b/app/views/layouts/gamegenre.rhtml @@ -0,0 +1,17 @@ + + + + + + Gamegenre: <%= controller.action_name %> + <%= stylesheet_link_tag 'scaffold' %> + + + +

<%= flash[:notice] %>

+ +<%= yield %> + + + diff --git a/app/views/video/list.rhtml b/app/views/video/list.rhtml index d74ec25..afe84ed 100644 --- a/app/views/video/list.rhtml +++ b/app/views/video/list.rhtml @@ -17,9 +17,9 @@ <%=h video.checkedout? %> <%=h video.title %> <%=h video.newrelease %> - <%=h Videogenre.find(video.video_genre).name %> + <%=h video.genre %> <%=h video.director %> - <%=h Media.find(video.media).name %> + <%=h video.media_name %> <%= link_to 'Show', :action => 'show', :id => video %> <%= link_to 'Edit', :action => 'edit', :id => video %> <%= link_to 'Destroy', { :action => 'destroy', :id => video }, :confirm => 'Are you sure?', :method => :post %> diff --git a/db/development.sqlite3 b/db/development.sqlite3 index 3c5a59d7ae4b2a3611a346ab10c7a258c373decb..6285c9da9bc9b6b78fc636db9a756dba0e6f619a 100644 GIT binary patch delta 258 zcmZqJz}T>Zae}nqdj?eCvQg(UJEO!VjwReIj0{rDlY4|E7#SxY6t-n#+5BIa)q#td zaXSN(F|#z|_Kl4z87-$#=zsIsN=Y6#PPcd^9&3hn-~<;sv^gm3adL^K<6g%omuCF>lx`$TE*P zK!lZ false + end + end + + def self.down + drop_table :gamegenres + end +end diff --git a/db/schema.rb b/db/schema.rb index 5e0c608..d372187 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2,7 +2,7 @@ # migrations feature of ActiveRecord to incrementally modify your database, and # then regenerate this schema definition. -ActiveRecord::Schema.define(:version => 23) do +ActiveRecord::Schema.define(:version => 24) do create_table "bitems", :force => true do |t| t.column "customer_id", :integer, :null => false @@ -32,6 +32,10 @@ ActiveRecord::Schema.define(:version => 23) do t.column "description", :string end + create_table "gamegenres", :force => true do |t| + t.column "name", :string, :null => false + end + create_table "medias", :force => true do |t| t.column "name", :string, :null => false end diff --git a/test/fixtures/gamegenres.yml b/test/fixtures/gamegenres.yml new file mode 100644 index 0000000..b49c4eb --- /dev/null +++ b/test/fixtures/gamegenres.yml @@ -0,0 +1,5 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html +one: + id: 1 +two: + id: 2 diff --git a/test/functional/gamegenre_controller_test.rb b/test/functional/gamegenre_controller_test.rb new file mode 100644 index 0000000..aa660e6 --- /dev/null +++ b/test/functional/gamegenre_controller_test.rb @@ -0,0 +1,92 @@ +require File.dirname(__FILE__) + '/../test_helper' +require 'gamegenre_controller' + +# Re-raise errors caught by the controller. +class GamegenreController; def rescue_action(e) raise e end; end + +class GamegenreControllerTest < Test::Unit::TestCase + fixtures :gamegenres + + def setup + @controller = GamegenreController.new + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + + @first_id = gamegenres(:first).id + end + + def test_index + get :index + assert_response :success + assert_template 'list' + end + + def test_list + get :list + + assert_response :success + assert_template 'list' + + assert_not_nil assigns(:gamegenres) + end + + def test_show + get :show, :id => @first_id + + assert_response :success + assert_template 'show' + + assert_not_nil assigns(:gamegenre) + assert assigns(:gamegenre).valid? + end + + def test_new + get :new + + assert_response :success + assert_template 'new' + + assert_not_nil assigns(:gamegenre) + end + + def test_create + num_gamegenres = Gamegenre.count + + post :create, :gamegenre => {} + + assert_response :redirect + assert_redirected_to :action => 'list' + + assert_equal num_gamegenres + 1, Gamegenre.count + end + + def test_edit + get :edit, :id => @first_id + + assert_response :success + assert_template 'edit' + + assert_not_nil assigns(:gamegenre) + assert assigns(:gamegenre).valid? + end + + def test_update + post :update, :id => @first_id + assert_response :redirect + assert_redirected_to :action => 'show', :id => @first_id + end + + def test_destroy + assert_nothing_raised { + Gamegenre.find(@first_id) + } + + post :destroy, :id => @first_id + assert_response :redirect + assert_redirected_to :action => 'list' + + assert_raise(ActiveRecord::RecordNotFound) { + Gamegenre.find(@first_id) + } + end +end diff --git a/test/unit/gamegenre_test.rb b/test/unit/gamegenre_test.rb new file mode 100644 index 0000000..1a72d2c --- /dev/null +++ b/test/unit/gamegenre_test.rb @@ -0,0 +1,10 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class GamegenreTest < Test::Unit::TestCase + fixtures :gamegenres + + # Replace this with your real tests. + def test_truth + assert true + end +end -- 2.25.1