diff --git a/config/defaults.yaml b/config/defaults.yaml index 8f173a4..baff6cc 100644 --- a/config/defaults.yaml +++ b/config/defaults.yaml @@ -1,3 +1,6 @@ database: adapter: 'sqlite' database: 'data/gamedata.db' + +testing: + minimum_results_required: 3 diff --git a/db/migrations/0003_add_tests_table.rb b/db/migrations/0003_add_tests_table.rb new file mode 100644 index 0000000..31fb3cc --- /dev/null +++ b/db/migrations/0003_add_tests_table.rb @@ -0,0 +1,31 @@ +Sequel.migration do + + up do + # create tests table + create_table(:tests) do + primary_key :id + String :date_tag, null: false + DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP + DateTime :updated_at, default: Sequel::CURRENT_TIMESTAMP + end + + # add foreign keys to tests table + alter_table(:tests) do + add_foreign_key(:benchmark_id, :benchmarks, null: false) + add_foreign_key(:hardware_id, :hardware, null: false) + end + + # add the test ID link to results table; remove old links to hardware and benchmarks tables + alter_table(:results) do + add_foreign_key(:test_id, :tests, null: false) + drop_column(:benchmark_id) + drop_column(:hardware_id) + end + end + + down do + drop_column(:results, :test_id) + drop_table(:tests) + end + +end diff --git a/public/css/remmington.css b/public/css/remmington.css index f002ff9..1c8d256 100644 --- a/public/css/remmington.css +++ b/public/css/remmington.css @@ -1,3 +1,7 @@ #main-nav{ margin-bottom: 15px; } + +h1.invalid{ + color: red; +} diff --git a/src/models/benchmark.rb b/src/models/benchmark.rb index bef091f..5943e19 100644 --- a/src/models/benchmark.rb +++ b/src/models/benchmark.rb @@ -1,5 +1,5 @@ class Benchmark < Sequel::Model - one_to_many :results + one_to_many :tests end diff --git a/src/models/hardware.rb b/src/models/hardware.rb index 0bdff73..ed2ac8a 100644 --- a/src/models/hardware.rb +++ b/src/models/hardware.rb @@ -1,5 +1,5 @@ class Hardware < Sequel::Model(:hardware) - one_to_many :results + one_to_many :tests end diff --git a/src/models/init.rb b/src/models/init.rb index fb936c7..3a9103b 100644 --- a/src/models/init.rb +++ b/src/models/init.rb @@ -1,3 +1,4 @@ require_relative 'hardware' require_relative 'benchmark' require_relative 'result' +require_relative 'test' diff --git a/src/models/result.rb b/src/models/result.rb index d7ecac8..74fca67 100644 --- a/src/models/result.rb +++ b/src/models/result.rb @@ -1,7 +1,6 @@ class Result < Sequel::Model - many_to_one :hardware - many_to_one :benchmark + many_to_one :test def formatted_score() return self.score diff --git a/src/models/test.rb b/src/models/test.rb new file mode 100644 index 0000000..0d1576e --- /dev/null +++ b/src/models/test.rb @@ -0,0 +1,27 @@ +class Test < Sequel::Model + + one_to_many :results # link Test model to its related results + many_to_one :benchmark # link Test model back to its benchmark + many_to_one :hardware # link Test model back to hardware used in test + + # formats the name of the test for display in the web UI + def formatted_name() + return "#{self.date_tag} - #{self.hardware.name} / #{self.benchmark.name}" + end + + # formats the name of the test for use in a graph + def graph_name() + return "#{self.hardware.name} (#{self.date_tag})" + end + + # determines whether the test has enough results to fulfill the requirement + def valid?() + return (self.results.length >= $conf.get('testing.minimum_results_required')) + end + + # determines how many results are still missing for a test + def missing_results() + return ($conf.get('testing.minimum_results_required') - self.results.length) + end + +end diff --git a/src/routes/index.rb b/src/routes/index.rb index 9201127..dfa08be 100644 --- a/src/routes/index.rb +++ b/src/routes/index.rb @@ -1,9 +1,11 @@ class GameData < Sinatra::Base get '/' do + tests = Test.reverse(:updated_at).limit(10).all() results = Result.reverse(:updated_at).limit(10).all() erb :'index/index', locals: { title: 'Dashboard', + tests: tests, results: results } end diff --git a/src/routes/init.rb b/src/routes/init.rb index f0f96cb..1c178d2 100644 --- a/src/routes/init.rb +++ b/src/routes/init.rb @@ -2,3 +2,4 @@ require_relative 'index' require_relative 'hardware' require_relative 'benchmark' require_relative 'result' +require_relative 'test' diff --git a/src/routes/test.rb b/src/routes/test.rb new file mode 100644 index 0000000..92d0517 --- /dev/null +++ b/src/routes/test.rb @@ -0,0 +1,48 @@ +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/:test_id' do + test = Test.where(id: params[:test_id]).first() + erb :'test/view', locals: { + title: "Test: #{test.date_tag}", + test: test + } + end + + get '/test/add' do + hardware = Hardware.all() + benchmarks = Benchmark.all() + + erb :'test/add', locals: { + title: 'Add Test', + hardware: hardware, + benchmarks: benchmarks + } + end + post '/test/add' do + date_tag = params[:test_date_tag] + + # make sure the date tag field is formatting properly + unless date_tag.start_with?('(') + date_tag = '(' + date_tag + end + unless date_tag.end_with?(')') + date_tag = date_tag + ')' + end + + test = Test.create( + date_tag: params[:test_date_tag], + hardware_id: params[:test_hardware], + benchmark_id: params[:test_benchmark] + ) + + redirect "/test/#{test.id}" + end +end diff --git a/views/index/index.erb b/views/index/index.erb index 3490a5d..17ed43e 100644 --- a/views/index/index.erb +++ b/views/index/index.erb @@ -1,12 +1,43 @@
Hardware tested | +Benchmark used | +# results | +
---|---|---|
<%= t.hardware.name %> | +<%= t.benchmark.name %> | +<%= t.results.length %> | +
I'm sorry, there don't appear to be any tests created yet. Check again later!
+Test | Hardware tested | Benchmark used | Score | @@ -15,8 +46,9 @@||
---|---|---|---|---|---|
<%= r.hardware.name %> | -<%= r.benchmark.name %> | +<%= r.test.name %> | +<%= r.test.hardware.name %> | +<%= r.test.benchmark.name %> | <%= r.formatted_score() %> |
Test name | +# of results | +Date added | +Date modified | +
---|---|---|---|
<%= t.name %> | +<%= t.results.length %> | +<%= date_format(t.created_at) %> | +<%= date_format(t.updated_at) %> | +
I'm sorry, there don't appear to be any tests added yet. Check again later!
+There are no results
+ <% end %> +