From 47cb580393c3dcb2ef98ccb7dc8b04275175c443 Mon Sep 17 00:00:00 2001 From: Gregory Ballantine Date: Tue, 10 Jun 2025 17:35:52 -0400 Subject: [PATCH] Started adding test model/routes/views; removed a bit of the old paradigm with tying results directly to hardware --- assets/styles/remmington.sass | 5 -- assets/styles/rimmington.sass | 10 ++++ db/migrations/0003_add_tests_table.rb | 39 +++++++++++++ src/models/hardware.rb | 2 +- src/models/init.rb | 1 + src/models/result.rb | 2 +- src/models/test.rb | 10 ++++ src/routes/init.rb | 1 + src/routes/test.rb | 70 ++++++++++++++++++++++ views/hardware/view.erb | 76 ------------------------ views/layout.erb | 2 +- views/partials/navbar.erb | 2 +- views/test/add.erb | 50 ++++++++++++++++ views/test/edit.erb | 32 ++++++++++ views/test/index.erb | 42 ++++++++++++++ views/test/view.erb | 84 +++++++++++++++++++++++++++ 16 files changed, 343 insertions(+), 85 deletions(-) delete mode 100644 assets/styles/remmington.sass create mode 100644 assets/styles/rimmington.sass create mode 100644 db/migrations/0003_add_tests_table.rb create mode 100644 src/models/test.rb create mode 100644 src/routes/test.rb create mode 100644 views/test/add.erb create mode 100644 views/test/edit.erb create mode 100644 views/test/index.erb create mode 100644 views/test/view.erb 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 results involving this hardware:

- - - - - - - - - - - - <% hardware.bench_results().each do |k, r| %> - - - - - - - - - <% end %> - -
Benchmark nameScoring type# resultsAverageMinimumMaximum
<%= k %>N/a<%= r.length %><%= average_array(r) %>N/aN/a
-
-
diff --git a/views/layout.erb b/views/layout.erb index 2037de2..fccc741 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -6,7 +6,7 @@ <%= title %> | Game Data - + diff --git a/views/partials/navbar.erb b/views/partials/navbar.erb index 0b6030e..e29b002 100644 --- a/views/partials/navbar.erb +++ b/views/partials/navbar.erb @@ -4,7 +4,7 @@
  • Dashboard
  • Hardware
  • Benchmarks
  • -
  • Results
  • +
  • Tests
  • Reports
  • diff --git a/views/test/add.erb b/views/test/add.erb new file mode 100644 index 0000000..c118021 --- /dev/null +++ b/views/test/add.erb @@ -0,0 +1,50 @@ +
    +
    +

    Add new test

    +
    +
    + +
    + +
    +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + + + +
    diff --git a/views/test/edit.erb b/views/test/edit.erb new file mode 100644 index 0000000..de842b3 --- /dev/null +++ b/views/test/edit.erb @@ -0,0 +1,32 @@ +
    +
    +

    Editing: <%= hardware.name %>

    +
    +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    + + +
    + +
    diff --git a/views/test/index.erb b/views/test/index.erb new file mode 100644 index 0000000..520c912 --- /dev/null +++ b/views/test/index.erb @@ -0,0 +1,42 @@ +
    +
    +

    List of tests

    +
    + +
    +

    + Add new test +

    +
    +
    + +
    + <% if tests.length > 0 %> +
    + + + + + + + + + + + <% tests.each do |t| %> + + + + + + + <% end %> + +
    Test name# of benchmarksDate addedDate modified
    <%= t.name %><%= t.benchmark.length %><%= date_format(t.created_at) %><%= date_format(t.updated_at) %>
    +
    + <% else %> +
    +

    I'm sorry, there doesn't appear to be any tests added yet. Check again later!

    +
    + <% end %> +
    diff --git a/views/test/view.erb b/views/test/view.erb new file mode 100644 index 0000000..86069dd --- /dev/null +++ b/views/test/view.erb @@ -0,0 +1,84 @@ +
    +
    +

    <%= test.name %>

    +
    + +
    +

    Edit

    +
    + +
    + Hardware tested: <%= test.hardware.name %> +
    + +
    +

    <%= test.description %>

    +
    +
    + +
    + +
    +
    +
    + + + +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    +
    +
    + +
    + +

    Benchmark results for this test:

    + + + + + + + + + + + + + +
    Benchmark nameScoring type# resultsAverageMinimumMaximum
    +
    +