Changed naming from Routes to Controllers; fixed some Sinatra modular layout stuff; added RSpec for testing and some basic tests
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
require: rubocop-sequel
|
plugins:
|
||||||
|
- rubocop-rspec
|
||||||
|
- rubocop-sequel
|
||||||
|
|
||||||
AllCops:
|
AllCops:
|
||||||
NewCops: enable
|
NewCops: enable
|
||||||
|
1
Gemfile
1
Gemfile
@@ -15,6 +15,7 @@ group :development, :test do
|
|||||||
|
|
||||||
# rubocop and extensions for code style
|
# rubocop and extensions for code style
|
||||||
gem 'rubocop'
|
gem 'rubocop'
|
||||||
|
gem 'rubocop-rspec'
|
||||||
gem 'rubocop-sequel'
|
gem 'rubocop-sequel'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@@ -78,6 +78,9 @@ GEM
|
|||||||
rubocop-ast (1.45.1)
|
rubocop-ast (1.45.1)
|
||||||
parser (>= 3.3.7.2)
|
parser (>= 3.3.7.2)
|
||||||
prism (~> 1.4)
|
prism (~> 1.4)
|
||||||
|
rubocop-rspec (3.6.0)
|
||||||
|
lint_roller (~> 1.1)
|
||||||
|
rubocop (~> 1.72, >= 1.72.1)
|
||||||
rubocop-sequel (0.4.1)
|
rubocop-sequel (0.4.1)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (>= 1.72.1, < 2)
|
rubocop (>= 1.72.1, < 2)
|
||||||
@@ -132,6 +135,7 @@ DEPENDENCIES
|
|||||||
rerun
|
rerun
|
||||||
rspec
|
rspec
|
||||||
rubocop
|
rubocop
|
||||||
|
rubocop-rspec
|
||||||
rubocop-sequel
|
rubocop-sequel
|
||||||
sequel (~> 5.92)
|
sequel (~> 5.92)
|
||||||
sinatra (~> 4.1)
|
sinatra (~> 4.1)
|
||||||
|
2
Rakefile
2
Rakefile
@@ -29,7 +29,7 @@ namespace :test do
|
|||||||
end
|
end
|
||||||
|
|
||||||
task :rubocop do
|
task :rubocop do
|
||||||
system("rubocop src/")
|
system("rubocop src/ spec/")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
# Load application config
|
# Load application config
|
||||||
require_relative 'src/config.rb'
|
|
||||||
$conf = Config.new(File.join(__dir__, 'config/defaults.yaml'))
|
|
||||||
|
|
||||||
root = ::File.dirname(__FILE__)
|
root = ::File.dirname(__FILE__)
|
||||||
require ::File.join( root, 'src', 'app' )
|
require ::File.join( root, 'src', 'server' )
|
||||||
run GameData.new
|
run GameData.new
|
||||||
|
23
spec/controllers/index_controller_spec.rb
Normal file
23
spec/controllers/index_controller_spec.rb
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative '../spec_helper'
|
||||||
|
|
||||||
|
RSpec.describe(IndexController) do
|
||||||
|
# / route
|
||||||
|
describe 'Get /' do
|
||||||
|
it 'Dashboard returns 200.' do
|
||||||
|
get '/'
|
||||||
|
expect(last_response).to(be_ok)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "Dashboard contains 'Game Data' on page (nav bar should be loaded)." do
|
||||||
|
get '/'
|
||||||
|
expect(last_response.body).to(include('Game Data'))
|
||||||
|
end
|
||||||
|
|
||||||
|
it "Dashboard contains 'Ruby version' on page (footer should be loaded)." do
|
||||||
|
get '/'
|
||||||
|
expect(last_response.body).to(include('Ruby version'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@@ -1,14 +0,0 @@
|
|||||||
require_relative '../spec_helper'
|
|
||||||
|
|
||||||
RSpec.describe IndexRoutes do
|
|
||||||
|
|
||||||
def app
|
|
||||||
IndexRoutes
|
|
||||||
end
|
|
||||||
|
|
||||||
it "Dashboard returns 200" do
|
|
||||||
get '/'
|
|
||||||
expect(last_response).to be_ok
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
@@ -1,17 +1,21 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
ENV['APP_ENV'] = 'test'
|
ENV['APP_ENV'] = 'test'
|
||||||
|
|
||||||
require_relative '../src/app'
|
require_relative '../src/server'
|
||||||
require 'rspec'
|
require 'rspec'
|
||||||
require 'rack/test'
|
require 'rack/test'
|
||||||
|
|
||||||
module RSpecMixin
|
module RSpecMixin
|
||||||
|
|
||||||
include Rack::Test::Methods
|
include Rack::Test::Methods
|
||||||
|
|
||||||
def app
|
def app
|
||||||
GameData
|
GameData
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.include RSpecMixin
|
config.include(RSpecMixin)
|
||||||
end
|
end
|
||||||
|
41
src/app.rb
41
src/app.rb
@@ -1,41 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'sinatra/base'
|
|
||||||
require 'sequel'
|
|
||||||
require 'sqlite3'
|
|
||||||
|
|
||||||
# Load the Sequel timestamps plugin
|
|
||||||
Sequel::Model.plugin(:timestamps)
|
|
||||||
# Initialize Sequel gem for database actions
|
|
||||||
DB = Sequel.connect(adapter: $conf.get('database.adapter'), database: $conf.get('database.database'))
|
|
||||||
|
|
||||||
# Load in routes (must happen after Sequel is loaded!)
|
|
||||||
require_relative 'routes/api1'
|
|
||||||
require_relative 'routes/benchmark'
|
|
||||||
require_relative 'routes/hardware'
|
|
||||||
require_relative 'routes/index'
|
|
||||||
require_relative 'routes/reports'
|
|
||||||
require_relative 'routes/result'
|
|
||||||
require_relative 'routes/test'
|
|
||||||
|
|
||||||
# GameData - main app that gets launched
|
|
||||||
# - inherits from Sinatra::Base to instantiate the server
|
|
||||||
# - sets up some base app configuration
|
|
||||||
# - registers route classes with the base app
|
|
||||||
class GameData < Sinatra::Base
|
|
||||||
|
|
||||||
enable :sessions
|
|
||||||
|
|
||||||
# Set up static file serving
|
|
||||||
enable :static
|
|
||||||
set :public_folder, File.join(__dir__, '/../public')
|
|
||||||
|
|
||||||
use IndexRoutes
|
|
||||||
use HardwareRoutes
|
|
||||||
use BenchmarkRoutes
|
|
||||||
use TestRoutes
|
|
||||||
use ResultRoutes
|
|
||||||
use ReportsRoutes
|
|
||||||
use APIv1Routes
|
|
||||||
|
|
||||||
end
|
|
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
require 'sinatra/json'
|
require 'sinatra/json'
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/benchmark'
|
require_relative '../models/benchmark'
|
||||||
require_relative '../models/test'
|
require_relative '../models/test'
|
||||||
require_relative '../models/result'
|
require_relative '../models/result'
|
||||||
|
|
||||||
# /api/v1 routes
|
# /api/v1 routes
|
||||||
class APIv1Routes < Server
|
class APIv1Controller < BaseController
|
||||||
|
|
||||||
get '/api/v1/benchmark/details' do
|
get '/api/v1/benchmark/details' do
|
||||||
benchmark_id = params[:benchmark_id]
|
benchmark_id = params[:benchmark_id]
|
15
src/controllers/base_controller.rb
Normal file
15
src/controllers/base_controller.rb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'sinatra/base'
|
||||||
|
|
||||||
|
# BaseController - base modular Sinatra app class
|
||||||
|
class BaseController < Sinatra::Base
|
||||||
|
|
||||||
|
# Register view helpers
|
||||||
|
require_relative '../helpers'
|
||||||
|
helpers Helpers
|
||||||
|
|
||||||
|
# Set up our view engine
|
||||||
|
set :views, File.join(settings.root, '/../../views')
|
||||||
|
|
||||||
|
end
|
@@ -1,10 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/benchmark'
|
require_relative '../models/benchmark'
|
||||||
|
|
||||||
# /benchmark routes
|
# /benchmark routes
|
||||||
class BenchmarkRoutes < Server
|
class BenchmarkController < BaseController
|
||||||
|
|
||||||
get '/benchmark' do
|
get '/benchmark' do
|
||||||
benchmarks = Benchmark.reverse(:updated_at).limit(10).all()
|
benchmarks = Benchmark.reverse(:updated_at).limit(10).all()
|
@@ -1,11 +1,11 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/hardware'
|
require_relative '../models/hardware'
|
||||||
require_relative '../models/benchmark'
|
require_relative '../models/benchmark'
|
||||||
|
|
||||||
# /hardware routes
|
# /hardware routes
|
||||||
class HardwareRoutes < Server
|
class HardwareController < BaseController
|
||||||
|
|
||||||
get '/hardware' do
|
get '/hardware' do
|
||||||
hardware = Hardware.reverse(:updated_at).limit(10).all()
|
hardware = Hardware.reverse(:updated_at).limit(10).all()
|
@@ -1,10 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/test'
|
require_relative '../models/test'
|
||||||
|
|
||||||
# / (top-level) routes
|
# / (top-level) routes
|
||||||
class IndexRoutes < Server
|
class IndexController < BaseController
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
tests = Test.reverse(:updated_at).limit(10).all()
|
tests = Test.reverse(:updated_at).limit(10).all()
|
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
require 'sinatra/json'
|
require 'sinatra/json'
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/benchmark'
|
require_relative '../models/benchmark'
|
||||||
require_relative '../models/result'
|
require_relative '../models/result'
|
||||||
require_relative '../models/test'
|
require_relative '../models/test'
|
||||||
|
|
||||||
# /reports routes
|
# /reports routes
|
||||||
class ReportsRoutes < Server
|
class ReportsController < BaseController
|
||||||
|
|
||||||
get '/report' do
|
get '/report' do
|
||||||
benchmarks = Benchmark.order(:name).all()
|
benchmarks = Benchmark.order(:name).all()
|
@@ -1,10 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/result'
|
require_relative '../models/result'
|
||||||
|
|
||||||
# /result routes
|
# /result routes
|
||||||
class ResultRoutes < Server
|
class ResultController < BaseController
|
||||||
|
|
||||||
post '/result/add' do
|
post '/result/add' do
|
||||||
result_minimum = params[:result_minimum] if params.key?(:result_minimum)
|
result_minimum = params[:result_minimum] if params.key?(:result_minimum)
|
@@ -1,12 +1,12 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../server'
|
require_relative 'base_controller'
|
||||||
require_relative '../models/benchmark'
|
require_relative '../models/benchmark'
|
||||||
require_relative '../models/hardware'
|
require_relative '../models/hardware'
|
||||||
require_relative '../models/test'
|
require_relative '../models/test'
|
||||||
|
|
||||||
# /test routes
|
# /test routes
|
||||||
class TestRoutes < Server
|
class TestController < BaseController
|
||||||
|
|
||||||
get '/test' do
|
get '/test' do
|
||||||
tests = Test.reverse(:updated_at).limit(10).all()
|
tests = Test.reverse(:updated_at).limit(10).all()
|
44
src/server.rb
Executable file → Normal file
44
src/server.rb
Executable file → Normal file
@@ -1,15 +1,45 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'sinatra/base'
|
require 'sinatra/base'
|
||||||
|
require 'sequel'
|
||||||
|
require 'sqlite3'
|
||||||
|
|
||||||
# Server - base modular Sinatra app class
|
require_relative 'config'
|
||||||
class Server < Sinatra::Base
|
|
||||||
|
|
||||||
# Register view helpers
|
$conf = Config.new(File.join(__dir__, 'config/defaults.yaml'))
|
||||||
require_relative 'helpers'
|
|
||||||
helpers Helpers
|
|
||||||
|
|
||||||
# Set up our view engine
|
# Load the Sequel timestamps plugin
|
||||||
set :views, File.join(settings.root, '/../views')
|
Sequel::Model.plugin(:timestamps)
|
||||||
|
# Initialize Sequel gem for database actions
|
||||||
|
DB = Sequel.connect(adapter: $conf.get('database.adapter'), database: $conf.get('database.database'))
|
||||||
|
|
||||||
|
# Load in routes (must happen after Sequel is loaded!)
|
||||||
|
require_relative 'controllers/api1'
|
||||||
|
require_relative 'controllers/benchmark'
|
||||||
|
require_relative 'controllers/hardware'
|
||||||
|
require_relative 'controllers/index'
|
||||||
|
require_relative 'controllers/reports'
|
||||||
|
require_relative 'controllers/result'
|
||||||
|
require_relative 'controllers/test'
|
||||||
|
|
||||||
|
# GameData - main app that gets launched
|
||||||
|
# - inherits from Sinatra::Base to instantiate the server
|
||||||
|
# - sets up some base app configuration
|
||||||
|
# - registers route classes with the base app
|
||||||
|
class GameData < Sinatra::Base
|
||||||
|
|
||||||
|
enable :sessions
|
||||||
|
|
||||||
|
# Set up static file serving
|
||||||
|
enable :static
|
||||||
|
set :public_folder, File.join(__dir__, '/../public')
|
||||||
|
|
||||||
|
use IndexController
|
||||||
|
use HardwareController
|
||||||
|
use BenchmarkController
|
||||||
|
use TestController
|
||||||
|
use ResultController
|
||||||
|
use ReportsController
|
||||||
|
use APIv1Controller
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user