diff --git a/assets/styles/remmington.sass b/assets/styles/remmington.sass deleted file mode 100644 index 650a535..0000000 --- a/assets/styles/remmington.sass +++ /dev/null @@ -1,5 +0,0 @@ -#main-nav - margin-bottom: 15px - -h1.invalid - color: red diff --git a/assets/styles/rimmington.sass b/assets/styles/rimmington.sass new file mode 100644 index 0000000..d220dfa --- /dev/null +++ b/assets/styles/rimmington.sass @@ -0,0 +1,10 @@ +#main-nav + margin-bottom: 15px + +h1.invalid + color: red + +.button + position: relative + top: -25% + margin-top: 50% diff --git a/db/migrations/0003_add_tests_table.rb b/db/migrations/0003_add_tests_table.rb new file mode 100644 index 0000000..b7cb1e8 --- /dev/null +++ b/db/migrations/0003_add_tests_table.rb @@ -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 diff --git a/src/models/hardware.rb b/src/models/hardware.rb index 067a371..66f8577 100644 --- a/src/models/hardware.rb +++ b/src/models/hardware.rb @@ -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 = {} diff --git a/src/models/init.rb b/src/models/init.rb index 23d49dc..5434fc6 100644 --- a/src/models/init.rb +++ b/src/models/init.rb @@ -3,3 +3,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 916ddbb..4b7e23a 100644 --- a/src/models/result.rb +++ b/src/models/result.rb @@ -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 diff --git a/src/models/test.rb b/src/models/test.rb new file mode 100644 index 0000000..2aa1cf3 --- /dev/null +++ b/src/models/test.rb @@ -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 diff --git a/src/routes/init.rb b/src/routes/init.rb index c499fcc..e96f95e 100644 --- a/src/routes/init.rb +++ b/src/routes/init.rb @@ -5,3 +5,4 @@ require_relative 'hardware' require_relative 'benchmark' require_relative 'result' require_relative 'reports' +require_relative 'test' diff --git a/src/routes/test.rb b/src/routes/test.rb new file mode 100644 index 0000000..2cf7685 --- /dev/null +++ b/src/routes/test.rb @@ -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 diff --git a/views/hardware/view.erb b/views/hardware/view.erb index 30b76b2..ed2ec76 100644 --- a/views/hardware/view.erb +++ b/views/hardware/view.erb @@ -11,79 +11,3 @@ Hardware type: <%= hardware.type %> - -
Benchmark name | -Scoring type | -# results | -Average | -Minimum | -Maximum | - - - <% hardware.bench_results().each do |k, r| %> -
---|---|---|---|---|---|
<%= k %> | -N/a | -<%= r.length %> | -<%= average_array(r) %> | -N/a | -N/a | -