diff --git a/Rakefile b/Rakefile index c526f38..2e10e6a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,16 @@ # frozen_string_literal: true require "hanami/rake_tasks" +require 'rom/sql/rake_task' + +task :environment do + require_relative 'config/app' + require 'hanami/prepare' +end + +namespace :db do + task setup: :environment do + Hanami.app.prepare(:persistence) + ROM::SQL::RakeSupport.env = Hanami.app['persistence.config'] + end +end \ No newline at end of file diff --git a/app/actions/players/show.rb b/app/actions/players/show.rb new file mode 100644 index 0000000..5d7d81a --- /dev/null +++ b/app/actions/players/show.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module EuchreCamp + module Actions + module Players + class Show < EuchreCamp::Action + include Deps[ repo: 'repositories.players' ] + + def handle(request, response) + requested_player = request.params[:id] + player = repo.by_id(requested_player) + response.render(view, player: player) + end + end + end + end +end diff --git a/app/templates/players/show.html.erb b/app/templates/players/show.html.erb new file mode 100644 index 0000000..aff2552 --- /dev/null +++ b/app/templates/players/show.html.erb @@ -0,0 +1,5 @@ +

EuchreCamp::Views::Players::Show

+ +

<%= player.name %>

+ +

<%= player.rating %>

\ No newline at end of file diff --git a/app/views/players/show.rb b/app/views/players/show.rb new file mode 100644 index 0000000..52f1de9 --- /dev/null +++ b/app/views/players/show.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module EuchreCamp + module Views + module Players + class Show < EuchreCamp::View + expose :player + end + end + end +end diff --git a/config/routes.rb b/config/routes.rb index dc50297..4071a83 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,5 +3,6 @@ module EuchreCamp class Routes < Hanami::Routes # Add your routes here. See https://guides.hanamirb.org/routing/overview/ for details. + get "/players/:id", to: "players.show" end end diff --git a/db/migrate/20240913010237_create_players.rb b/db/migrate/20240913010237_create_players.rb new file mode 100644 index 0000000..545cc8d --- /dev/null +++ b/db/migrate/20240913010237_create_players.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +ROM::SQL.migration do + change do + create_table :players do + primary_key :id + column :name, String, null: false + column :rating, Integer, null: false + end + end +end diff --git a/euchre_camp.db b/euchre_camp.db new file mode 100644 index 0000000..d63e3da Binary files /dev/null and b/euchre_camp.db differ diff --git a/lib/euchre_camp/persistence/players.rb b/lib/euchre_camp/persistence/players.rb new file mode 100644 index 0000000..f1fd95c --- /dev/null +++ b/lib/euchre_camp/persistence/players.rb @@ -0,0 +1,9 @@ +module EuchreCamp + module Persistence + module Relations + class Players < ROM::Relation[:sql] + schema(:players, infer: true) + end + end + end +end diff --git a/lib/euchre_camp/persistence/repositories/player.rb b/lib/euchre_camp/persistence/repositories/player.rb new file mode 100644 index 0000000..78a0920 --- /dev/null +++ b/lib/euchre_camp/persistence/repositories/player.rb @@ -0,0 +1,17 @@ +module EuchreCamp + module Persistence + module Repositories + class Player < ROM::Repository[:players] + commands :create, update: :by_pk, delete: :by_pk + + def all + players.to_a + end + + def find(id) + players.by_pk(id).one! + end + end + end + end +end \ No newline at end of file diff --git a/spec/actions/players/show_spec.rb b/spec/actions/players/show_spec.rb new file mode 100644 index 0000000..cc1c502 --- /dev/null +++ b/spec/actions/players/show_spec.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +RSpec.describe EuchreCamp::Actions::Players::Show do + let(:params) { Hash[] } + + it "works" do + response = subject.call(params) + expect(response).to be_successful + end +end