Started adding test model/routes/views; removed a bit of the old paradigm with tying results directly to hardware
This commit is contained in:
parent
883019b181
commit
47cb580393
@ -1,5 +0,0 @@
|
||||
#main-nav
|
||||
margin-bottom: 15px
|
||||
|
||||
h1.invalid
|
||||
color: red
|
10
assets/styles/rimmington.sass
Normal file
10
assets/styles/rimmington.sass
Normal file
@ -0,0 +1,10 @@
|
||||
#main-nav
|
||||
margin-bottom: 15px
|
||||
|
||||
h1.invalid
|
||||
color: red
|
||||
|
||||
.button
|
||||
position: relative
|
||||
top: -25%
|
||||
margin-top: 50%
|
39
db/migrations/0003_add_tests_table.rb
Normal file
39
db/migrations/0003_add_tests_table.rb
Normal file
@ -0,0 +1,39 @@
|
||||
Sequel.migration do
|
||||
|
||||
up do
|
||||
# create tests table
|
||||
create_table(:tests) do
|
||||
primary_key :id
|
||||
foreign_key :hardware_id, :hardware
|
||||
String :name, null: false
|
||||
String :description
|
||||
DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP
|
||||
DateTime :updated_at, default: Sequel::CURRENT_TIMESTAMP
|
||||
end
|
||||
|
||||
# create many-to-many table between tests and benchmarks
|
||||
create_table(:benchmarks_tests) do
|
||||
primary_key :id
|
||||
foreign_key :benchmark_id, :benchmarks
|
||||
foreign_key :test_id, :tests
|
||||
DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP
|
||||
DateTime :updated_at, default: Sequel::CURRENT_TIMESTAMP
|
||||
end
|
||||
|
||||
# modify results table to integrate with the new tests table
|
||||
alter_table(:results) do
|
||||
drop_foreign_key :hardware_id
|
||||
add_foreign_key :test_id, :tests
|
||||
end
|
||||
end
|
||||
|
||||
down do
|
||||
alter_table(:results) do
|
||||
drop_foreign_key :test_id
|
||||
add_foreign_key :hardware_id, :hardware
|
||||
end
|
||||
drop_table(:benchmarks_tests)
|
||||
drop_table(:tests)
|
||||
end
|
||||
|
||||
end
|
@ -3,7 +3,7 @@
|
||||
# Hardware - database model for PC hardware
|
||||
class Hardware < Sequel::Model(:hardware)
|
||||
|
||||
one_to_many :results
|
||||
one_to_many :tests
|
||||
|
||||
def bench_results
|
||||
br = {}
|
||||
|
@ -3,3 +3,4 @@
|
||||
require_relative 'hardware'
|
||||
require_relative 'benchmark'
|
||||
require_relative 'result'
|
||||
require_relative 'test'
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Result - database model for benchmark results
|
||||
class Result < Sequel::Model
|
||||
|
||||
many_to_one :hardware
|
||||
many_to_one :test
|
||||
many_to_one :benchmark
|
||||
|
||||
def formatted_score
|
||||
|
10
src/models/test.rb
Normal file
10
src/models/test.rb
Normal file
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Test - database model for hardware tests
|
||||
class Test < Sequel::Model
|
||||
|
||||
one_to_many :result
|
||||
many_to_one :hardware
|
||||
many_to_many :benchmark
|
||||
|
||||
end
|
@ -5,3 +5,4 @@ require_relative 'hardware'
|
||||
require_relative 'benchmark'
|
||||
require_relative 'result'
|
||||
require_relative 'reports'
|
||||
require_relative 'test'
|
||||
|
70
src/routes/test.rb
Normal file
70
src/routes/test.rb
Normal file
@ -0,0 +1,70 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# /test routes
|
||||
class GameData < Sinatra::Base
|
||||
|
||||
get '/test' do
|
||||
tests = Test.reverse(:updated_at).limit(10).all()
|
||||
|
||||
erb :'test/index', locals: {
|
||||
title: 'List of Tests',
|
||||
tests: tests
|
||||
}
|
||||
end
|
||||
|
||||
get '/test/add' do
|
||||
hardware = Hardware.order(:name).all()
|
||||
benchmarks = Benchmark.order(:name).all()
|
||||
erb :'test/add', locals: {
|
||||
title: 'Add Test',
|
||||
hardware: hardware,
|
||||
benchmarks: benchmarks
|
||||
}
|
||||
end
|
||||
post '/test/add' do
|
||||
tst = Test.create(
|
||||
name: params[:test_name],
|
||||
hardware_id: params[:test_hardware],
|
||||
description: params[:test_description]
|
||||
)
|
||||
|
||||
# create an array of the selected benchmarks
|
||||
benchmarks = Array(params[:test_benchmarks])
|
||||
# associate the benchmarks to the test
|
||||
benchmarks.each do |b|
|
||||
tst.add_benchmark(b)
|
||||
end
|
||||
|
||||
redirect "/test/#{tst.id}"
|
||||
end
|
||||
|
||||
get '/test/:test_id' do
|
||||
tst = Test.where(id: params[:test_id]).first()
|
||||
benchmarks = Benchmark.order(:name).all()
|
||||
erb :'test/view', locals: {
|
||||
title: tst.name,
|
||||
test: tst,
|
||||
benchmarks: benchmarks
|
||||
}
|
||||
end
|
||||
|
||||
get '/test/:hardware_id/edit' do
|
||||
hardware = Hardware.where(id: params[:hardware_id]).first()
|
||||
erb :'test/edit', locals: {
|
||||
title: "Editing: #{hardware.name}",
|
||||
hardware: hardware
|
||||
}
|
||||
end
|
||||
|
||||
post '/test/:hardware_id/edit' do
|
||||
hardware = Hardware.where(id: params[:hardware_id]).first()
|
||||
|
||||
hardware.update(
|
||||
name: params[:hardware_name],
|
||||
type: params[:hardware_type]
|
||||
)
|
||||
|
||||
redirect "/hardware/#{hardware.id}"
|
||||
end
|
||||
|
||||
end
|
@ -11,79 +11,3 @@
|
||||
Hardware type: <%= hardware.type %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="grix-x grix-margin-x">
|
||||
<div class="cell small-12">
|
||||
<form class="u-full-width" action="/result/add" method="post">
|
||||
<input type="hidden" name="result_hardware" value="<%= hardware.id %>">
|
||||
<input type="hidden" name="result_referrer" value="hardware">
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell medium-5">
|
||||
<label for="result_benchmark">
|
||||
Add benchmark result:
|
||||
<select class="u-full-width" id="result_benchmark" name="result_benchmark">
|
||||
<% benchmarks.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_average">
|
||||
Average score:
|
||||
<input type="text" id="result_average" name="result_average" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_minimum">
|
||||
Minimum score:
|
||||
<input type="text" id="result_minimum" name="result_minimum" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_maximum">
|
||||
Maximum score:
|
||||
<input type="text" id="result_maximum" name="result_maximum" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-1">
|
||||
<input type="submit" class="u-full-width button" value="Submit">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<hr>
|
||||
|
||||
<h4>Benchmark results involving this hardware:</h4>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<th>Benchmark name</th>
|
||||
<th>Scoring type</th>
|
||||
<th># results</th>
|
||||
<th>Average</th>
|
||||
<th>Minimum</th>
|
||||
<th>Maximum</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% hardware.bench_results().each do |k, r| %>
|
||||
<tr>
|
||||
<td><%= k %></td>
|
||||
<td>N/a</td>
|
||||
<td><%= r.length %></td>
|
||||
<td><%= average_array(r) %></td>
|
||||
<td>N/a</td>
|
||||
<td>N/a</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title><%= title %> | Game Data</title>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.7.5/css/foundation.min.css">
|
||||
<link rel="stylesheet" href="/css/remmington.css">
|
||||
<link rel="stylesheet" href="/css/rimmington.css">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" charset="utf-8"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.7.5/js/foundation.min.js" charset="utf-8"></script>
|
||||
<script src="/js/edgeville.js" charset="utf-8"></script>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<li><a href="/">Dashboard</a></li>
|
||||
<li><a href="/hardware">Hardware</a></li>
|
||||
<li><a href="/benchmark">Benchmarks</a></li>
|
||||
<li><a href="/result">Results</a></li>
|
||||
<li><a href="/test">Tests</a></li>
|
||||
<li><a href="/reports">Reports</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
50
views/test/add.erb
Normal file
50
views/test/add.erb
Normal file
@ -0,0 +1,50 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<h1>Add new test</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
|
||||
<form class="cell small-12" action="/test/add" method="post">
|
||||
<div class="grid-x grid-padding-x">
|
||||
<div class="cell medium-6">
|
||||
<label>
|
||||
Test name
|
||||
<input type="text" name="test_name" placeholder="My hardware test (01/99)">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-6">
|
||||
<label>
|
||||
Type
|
||||
<select name="test_hardware">
|
||||
<% for h in hardware %>
|
||||
<option value="<%= h.id %>"><%= h.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-4">
|
||||
<label>
|
||||
Benchmarks
|
||||
<select name="test_benchmarks[]" multiple>
|
||||
<% for b in benchmarks %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-8">
|
||||
<label>
|
||||
Test description
|
||||
<textarea name="test_description" placeholder="This is my test for a hardware..."></textarea>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="button" value="Submit">
|
||||
</form>
|
||||
|
||||
</div>
|
32
views/test/edit.erb
Normal file
32
views/test/edit.erb
Normal file
@ -0,0 +1,32 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<h1>Editing: <%= hardware.name %></h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
|
||||
<form class="cell small-12" action="/hardware/<%= hardware.id %>/edit" method="post">
|
||||
<div class="grid-x grid-padding-x">
|
||||
<div class="cell medium-9">
|
||||
<label>
|
||||
Hardware name
|
||||
<input type="text" name="hardware_name" placeholder="Example hardware" value="<%= hardware.name %>">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-3">
|
||||
<label>
|
||||
Type
|
||||
<select name="hardware_type">
|
||||
<option value="gpu" <% if hardware.type == 'gpu' %>selected<% end %>>Graphics card</option>
|
||||
<option value="cpu" <% if hardware.type == 'cpu' %>selected<% end %>>Processor</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="submit" class="button" value="Submit">
|
||||
</form>
|
||||
|
||||
</div>
|
42
views/test/index.erb
Normal file
42
views/test/index.erb
Normal file
@ -0,0 +1,42 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<h1>List of tests</h1>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
<p>
|
||||
<a href="/test/add">Add new test</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<% if tests.length > 0 %>
|
||||
<div class="cell small-12">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Test name</th>
|
||||
<th># of benchmarks</th>
|
||||
<th>Date added</th>
|
||||
<th>Date modified</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% tests.each do |t| %>
|
||||
<tr>
|
||||
<td><a href="/hardware/<%= t.id %>"><%= t.name %></a></td>
|
||||
<td><%= t.benchmark.length %></td>
|
||||
<td><%= date_format(t.created_at) %></td>
|
||||
<td><%= date_format(t.updated_at) %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="cell small-12">
|
||||
<p>I'm sorry, there doesn't appear to be any tests added yet. Check again later!</p>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
84
views/test/view.erb
Normal file
84
views/test/view.erb
Normal file
@ -0,0 +1,84 @@
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell small-12">
|
||||
<h1><%= test.name %></h1>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
<p><a href="/test/<%= test.id %>/edit">Edit</a></p>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
Hardware tested: <%= test.hardware.name %>
|
||||
</div>
|
||||
|
||||
<div class="cell small-12">
|
||||
<p><%= test.description %></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="grix-x grix-margin-x">
|
||||
<div class="cell small-12">
|
||||
<form class="u-full-width" action="/result/add" method="post">
|
||||
<input type="hidden" name="result_hardware" value="<%= test.id %>">
|
||||
<input type="hidden" name="result_referrer" value="test">
|
||||
|
||||
<div class="grid-x grid-margin-x">
|
||||
<div class="cell medium-5">
|
||||
<label for="result_benchmark">
|
||||
Add benchmark result:
|
||||
<select class="u-full-width" id="result_benchmark" name="result_benchmark">
|
||||
<% test.benchmark.each do |b| %>
|
||||
<option value="<%= b.id %>"><%= b.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_average">
|
||||
Average score:
|
||||
<input type="text" id="result_average" name="result_average" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_minimum">
|
||||
Minimum score:
|
||||
<input type="text" id="result_minimum" name="result_minimum" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-2">
|
||||
<label for="result_maximum">
|
||||
Maximum score:
|
||||
<input type="text" id="result_maximum" name="result_maximum" value="">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="cell medium-1">
|
||||
<input type="submit" class="u-full-width button" value="Submit">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<hr>
|
||||
|
||||
<h4>Benchmark results for this test:</h4>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<th>Benchmark name</th>
|
||||
<th>Scoring type</th>
|
||||
<th># results</th>
|
||||
<th>Average</th>
|
||||
<th>Minimum</th>
|
||||
<th>Maximum</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
Loading…
x
Reference in New Issue
Block a user