From 5585f74e8110d460e8308621799e3d7faa0531c1 Mon Sep 17 00:00:00 2001 From: Jeffrey Hardy Date: Tue, 17 Sep 2024 11:35:27 -0400 Subject: [PATCH] Stub a projects controller and views --- app/controllers/projects_controller.rb | 41 ++++++++++++++++++++ app/helpers/projects_helper.rb | 2 + app/models/account.rb | 3 ++ app/models/current.rb | 2 + app/models/project.rb | 11 +++++- app/views/projects/edit.html.erb | 6 +++ app/views/projects/index.html.erb | 9 +++++ app/views/projects/new.html.erb | 6 +++ app/views/projects/show.html.erb | 2 + config/routes.rb | 2 + db/migrate/20240916191616_create_projects.rb | 2 +- test/controllers/projects_controller_test.rb | 7 ++++ 12 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 app/controllers/projects_controller.rb create mode 100644 app/helpers/projects_helper.rb create mode 100644 app/views/projects/edit.html.erb create mode 100644 app/views/projects/index.html.erb create mode 100644 app/views/projects/new.html.erb create mode 100644 app/views/projects/show.html.erb create mode 100644 test/controllers/projects_controller_test.rb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb new file mode 100644 index 000000000..efb80c99e --- /dev/null +++ b/app/controllers/projects_controller.rb @@ -0,0 +1,41 @@ +class ProjectsController < ApplicationController + before_action :set_project, except: %i[ index new create ] + + def index + @projects = Current.user.projects.all + end + + def new + @project = Current.account.projects.build + end + + def create + @project = Current.account.projects.create!(project_params) + redirect_to @project + end + + def show + end + + def edit + end + + def update + @project.update!(project_params) + redirect_to @project + end + + def destroy + @project.destroy + redirect_to projects_url + end + + private + def set_project + @project = Current.user.projects.find(params[:id]) + end + + def project_params + params.require(:project).permit(:name) + end +end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb new file mode 100644 index 000000000..db5c5ce1a --- /dev/null +++ b/app/helpers/projects_helper.rb @@ -0,0 +1,2 @@ +module ProjectsHelper +end diff --git a/app/models/account.rb b/app/models/account.rb index 325beea79..97bf11278 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,3 +1,6 @@ class Account < ApplicationRecord has_many :users, dependent: :destroy + + has_many :projects, dependent: :destroy + has_many :bubbles, through: :projects end diff --git a/app/models/current.rb b/app/models/current.rb index 2bef56dad..e5546b93b 100644 --- a/app/models/current.rb +++ b/app/models/current.rb @@ -1,4 +1,6 @@ class Current < ActiveSupport::CurrentAttributes attribute :session + delegate :user, to: :session, allow_nil: true + delegate :account, to: :user, allow_nil: true end diff --git a/app/models/project.rb b/app/models/project.rb index 010b99a08..deb6b4d31 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,6 +1,13 @@ class Project < ApplicationRecord - belongs_to :creator, class_name: "User" - belongs_to :account, default: -> { creator&.account } + belongs_to :account + belongs_to :creator, class_name: "User", default: -> { Current.user } has_many :accesses, dependent: :destroy + has_many :users, through: :accesses + + has_many :bubbles, dependent: :destroy + + after_create do + accesses.create!(user: creator) + end end diff --git a/app/views/projects/edit.html.erb b/app/views/projects/edit.html.erb new file mode 100644 index 000000000..3ae220332 --- /dev/null +++ b/app/views/projects/edit.html.erb @@ -0,0 +1,6 @@ +

Edit Project

+ +<%= form_with model: @project do |form| %> +

Name:
<%= form.text_field :name %>

+

<%= form.submit %> +<% end %> diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb new file mode 100644 index 000000000..5d76b7a4f --- /dev/null +++ b/app/views/projects/index.html.erb @@ -0,0 +1,9 @@ +

Projects

+ +

<%= link_to "New", new_project_path %>

+ + diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb new file mode 100644 index 000000000..96c3354cc --- /dev/null +++ b/app/views/projects/new.html.erb @@ -0,0 +1,6 @@ +

New Project

+ +<%= form_with model: @project do |form| %> +

Name:
<%= form.text_field :name %>

+

<%= form.submit %> +<% end %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb new file mode 100644 index 000000000..6d74ea985 --- /dev/null +++ b/app/views/projects/show.html.erb @@ -0,0 +1,2 @@ +

Project: <%= @project.name %>

+

<%= link_to "Edit", edit_project_path(@project) %> diff --git a/config/routes.rb b/config/routes.rb index 7cafc501d..54b203fcd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,6 +3,8 @@ Rails.application.routes.draw do resource :session + resources :projects + resources :bubbles do resource :image, controller: "bubbles/images" diff --git a/db/migrate/20240916191616_create_projects.rb b/db/migrate/20240916191616_create_projects.rb index 6bed67b48..5e3e27ca2 100644 --- a/db/migrate/20240916191616_create_projects.rb +++ b/db/migrate/20240916191616_create_projects.rb @@ -8,6 +8,6 @@ class CreateProjects < ActiveRecord::Migration[8.0] t.timestamps end - Project.create!(name: "Writebook", creator: User.first) + Account.first.projects.create! name: "Writebook", account: , creator: User.first end end diff --git a/test/controllers/projects_controller_test.rb b/test/controllers/projects_controller_test.rb new file mode 100644 index 000000000..bc11e96bb --- /dev/null +++ b/test/controllers/projects_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class ProjectsControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end +end