From 666ef947e0537ac27d1bb6953c26666a3711fb74 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Mon, 27 Nov 2023 11:18:33 -0800 Subject: [PATCH 01/40] Add StandupMeetingComment model --- app/models/standup_meeting.rb | 2 ++ app/models/standup_meeting_comment.rb | 3 +++ .../20231127185636_create_standup_meeting_comments.rb | 10 ++++++++++ db/schema.rb | 11 ++++++++++- spec/factories/standup_meeting_comments.rb | 6 ++++++ spec/models/standup_meeting_comment_spec.rb | 5 +++++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 app/models/standup_meeting_comment.rb create mode 100644 db/migrate/20231127185636_create_standup_meeting_comments.rb create mode 100644 spec/factories/standup_meeting_comments.rb create mode 100644 spec/models/standup_meeting_comment_spec.rb diff --git a/app/models/standup_meeting.rb b/app/models/standup_meeting.rb index 3bcdbc5a..69df6914 100644 --- a/app/models/standup_meeting.rb +++ b/app/models/standup_meeting.rb @@ -23,6 +23,8 @@ class StandupMeeting < ApplicationRecord has_noticed_notifications + has_many :standup_meeting_comments, dependent: :destroy + belongs_to :standup_meeting_group, inverse_of: :standup_meetings belongs_to :user diff --git a/app/models/standup_meeting_comment.rb b/app/models/standup_meeting_comment.rb new file mode 100644 index 00000000..65547611 --- /dev/null +++ b/app/models/standup_meeting_comment.rb @@ -0,0 +1,3 @@ +class StandupMeetingComment < ApplicationRecord + belongs_to :standup_meeting +end diff --git a/db/migrate/20231127185636_create_standup_meeting_comments.rb b/db/migrate/20231127185636_create_standup_meeting_comments.rb new file mode 100644 index 00000000..1514623b --- /dev/null +++ b/db/migrate/20231127185636_create_standup_meeting_comments.rb @@ -0,0 +1,10 @@ +class CreateStandupMeetingComments < ActiveRecord::Migration[7.0] + def change + create_table :standup_meeting_comments do |t| + t.string :name + t.references :standup_meeting, null: false, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 63a1f4ee..544f7fe9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_11_14_200314) do +ActiveRecord::Schema[7.0].define(version: 2023_11_27_185636) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -165,6 +165,14 @@ t.index ["user_id"], name: "index_resumes_on_user_id" end + create_table "standup_meeting_comments", force: :cascade do |t| + t.string "name" + t.bigint "standup_meeting_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["standup_meeting_id"], name: "index_standup_meeting_comments_on_standup_meeting_id" + end + create_table "standup_meeting_groups", force: :cascade do |t| t.string "name", null: false t.boolean "active", default: true, null: false @@ -272,6 +280,7 @@ add_foreign_key "pair_requests", "users", column: "invitee_id" add_foreign_key "profiles", "users" add_foreign_key "resumes", "users" + add_foreign_key "standup_meeting_comments", "standup_meetings" add_foreign_key "standup_meetings", "standup_meeting_groups" add_foreign_key "standup_meetings", "users" add_foreign_key "user_mentee_applications", "user_mentee_application_cohorts" diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb new file mode 100644 index 00000000..fc072670 --- /dev/null +++ b/spec/factories/standup_meeting_comments.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :standup_meeting_comment do + name { "MyString" } + standup_meeting { nil } + end +end diff --git a/spec/models/standup_meeting_comment_spec.rb b/spec/models/standup_meeting_comment_spec.rb new file mode 100644 index 00000000..6fd3b765 --- /dev/null +++ b/spec/models/standup_meeting_comment_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe StandupMeetingComment, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 8fffecc9afd9bec30aaa75993fc955c2fb30a0cc Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Mon, 27 Nov 2023 11:20:39 -0800 Subject: [PATCH 02/40] Add enum for standup_meeting_comment sections --- app/models/standup_meeting_comment.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/models/standup_meeting_comment.rb b/app/models/standup_meeting_comment.rb index 65547611..d70164c6 100644 --- a/app/models/standup_meeting_comment.rb +++ b/app/models/standup_meeting_comment.rb @@ -1,3 +1,9 @@ class StandupMeetingComment < ApplicationRecord belongs_to :standup_meeting + + enum section: { + yesterday_work_description: 0, + today_work_description: 1, + blockers_description: 2 + } end From 2abc9b131334359717e56144c535b461bf65f96b Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 28 Nov 2023 13:32:53 -0800 Subject: [PATCH 03/40] WIP: still need to organize views and controllers --- .../meeting_update_component.html.erb | 5 +++ .../standup_meeting_comments_controller.rb | 45 +++++++++++++++++++ .../standup_meeting_comments_controller.rb | 2 + .../standup_meetings_controller.rb | 9 ++++ .../standup_meeting_comments_helper.rb | 2 + app/models/standup_meeting.rb | 10 +++++ .../standup_meeting_comments/edit.html.erb | 4 ++ .../standup_meeting_comments/index.html.erb | 4 ++ .../standup_meeting_comments/new.html.erb | 13 ++++++ .../standup_meeting_comments/show.html.erb | 9 ++++ app/views/standup_meetings/show.html.erb | 18 ++++++++ config/routes.rb | 9 ++++ .../standup_meeting_comments_helper_spec.rb | 15 +++++++ .../requests/standup_meeting_comments_spec.rb | 32 +++++++++++++ .../edit.html.tailwindcss_spec.rb | 5 +++ .../index.html.tailwindcss_spec.rb | 5 +++ .../new.html.tailwindcss_spec.rb | 5 +++ .../show.html.tailwindcss_spec.rb | 5 +++ 18 files changed, 197 insertions(+) create mode 100644 app/controllers/standup_meeting_comments_controller.rb create mode 100644 app/controllers/standup_meetings/standup_meeting_comments_controller.rb create mode 100644 app/helpers/standup_meeting_comments_helper.rb create mode 100644 app/views/standup_meeting_comments/edit.html.erb create mode 100644 app/views/standup_meeting_comments/index.html.erb create mode 100644 app/views/standup_meeting_comments/new.html.erb create mode 100644 app/views/standup_meeting_comments/show.html.erb create mode 100644 app/views/standup_meetings/show.html.erb create mode 100644 spec/helpers/standup_meeting_comments_helper_spec.rb create mode 100644 spec/requests/standup_meeting_comments_spec.rb create mode 100644 spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb create mode 100644 spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb create mode 100644 spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb create mode 100644 spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb diff --git a/app/components/standup_meeting/meeting_update_component.html.erb b/app/components/standup_meeting/meeting_update_component.html.erb index d2a9f0c7..3bce6433 100644 --- a/app/components/standup_meeting/meeting_update_component.html.erb +++ b/app/components/standup_meeting/meeting_update_component.html.erb @@ -4,4 +4,9 @@
<%= tag.span(standup_content, class: "grow whitespace-pre-line") %> + +<%#= link_to 'New Comment', new_standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, section: @content_type) %> +<%# link_to 'Comment', standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, standup_meeting_comment_id: @standup_meeting_comment.id ) , class:'' %> +<%#= link_to 'View Comment', standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, id: @standup_meeting.standup_meeting_comments.first.id) %> +<%= link_to "View Comments", standup_meeting_path(@standup_meeting) %> diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb new file mode 100644 index 00000000..27a62afb --- /dev/null +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -0,0 +1,45 @@ +class StandupMeetingCommentsController < ApplicationController + before_action :set_standup_meeting + def index; end + + def show + @standup_meeting_comment = StandupMeetingComment.find(params[:id]) + case @standup_meeting_comment.name + when 'yesterday' + @standup_meeting_comment.name = 'Yesterday' + when 'today' + @standup_meeting_comment.name = 'Today' + when 'blockers' + @standup_meeting_comment.name = 'Blockers' + end + end + + def new + @section = params[:section] + + standup_meeting_id = params[:standup_meeting_id] + + @standup_meeting_comment = StandupMeetingComment.new(section: @section, standup_meeting_id:) + end + + def edit; end + + def create + @standup_meeting_comment = @standup_meeting.standup_meeting_comments.new(standup_meeting_comment_params) + if @standup_meeting_comment.save + redirect_to @standup_meeting_comment, notice: 'Comment was successfully created.' + else + render :new + end + end + + private + + def set_standup_meeting + @standup_meeting = StandupMeeting.find(params[:standup_meeting_id]) + end + + def standup_meeting_comment_params + params.require(:standup_meeting_comment).permit(:content, :name, :standup_meeting_id) + end +end diff --git a/app/controllers/standup_meetings/standup_meeting_comments_controller.rb b/app/controllers/standup_meetings/standup_meeting_comments_controller.rb new file mode 100644 index 00000000..e39f6029 --- /dev/null +++ b/app/controllers/standup_meetings/standup_meeting_comments_controller.rb @@ -0,0 +1,2 @@ +class StandupMeeting::MeetingUpdateCommentController < ApplicationController +end diff --git a/app/controllers/standup_meetings_controller.rb b/app/controllers/standup_meetings_controller.rb index 04b5ca04..4c0e417f 100644 --- a/app/controllers/standup_meetings_controller.rb +++ b/app/controllers/standup_meetings_controller.rb @@ -22,7 +22,12 @@ def index ) @completed_meetings = @standup_meetings.filter(&:completed?) end + # rubocop:enable Metrics/AbcSize + def show + @standup_meeting = StandupMeeting.find(params[:id]) + @yesterday_work_description = @standup_meeting.yesterday_work_description + end def edit @standup_meeting = StandupMeeting.includes(:standup_meeting_group).find(params[:id]) @@ -38,6 +43,10 @@ def create meeting_date: params[:meeting_date] ) if @standup_meeting.save + @standup_meeting.standup_meeting_comments.create(name: 'yesterday_work_description') + @standup_meeting.standup_meeting_comments.create(name: 'today_work_description') + @standup_meeting.standup_meeting_comments.create(name: 'blocker_description') + redirect_to edit_standup_meeting_group_standup_meeting_path(@standup_meeting_group, @standup_meeting) else redirect_back_or_to( diff --git a/app/helpers/standup_meeting_comments_helper.rb b/app/helpers/standup_meeting_comments_helper.rb new file mode 100644 index 00000000..4aba5fc4 --- /dev/null +++ b/app/helpers/standup_meeting_comments_helper.rb @@ -0,0 +1,2 @@ +module StandupMeetingCommentsHelper +end diff --git a/app/models/standup_meeting.rb b/app/models/standup_meeting.rb index 69df6914..fb6c4868 100644 --- a/app/models/standup_meeting.rb +++ b/app/models/standup_meeting.rb @@ -28,6 +28,8 @@ class StandupMeeting < ApplicationRecord belongs_to :standup_meeting_group, inverse_of: :standup_meetings belongs_to :user + # after_update :create_default_comments + has_rich_text :yesterday_work_description has_rich_text :today_work_description has_rich_text :blockers_description @@ -44,4 +46,12 @@ class StandupMeeting < ApplicationRecord } scope :for_member, ->(user, group) { where(user:, standup_meeting_group: group) } + + private + + def create_default_comments + standup_meeting_comments.create(name: 'yesterday_work_description') + standup_meeting_comments.create(name: 'today_work_description') + standup_meeting_comments.create(name: 'blockers_description') + end end diff --git a/app/views/standup_meeting_comments/edit.html.erb b/app/views/standup_meeting_comments/edit.html.erb new file mode 100644 index 00000000..e006435c --- /dev/null +++ b/app/views/standup_meeting_comments/edit.html.erb @@ -0,0 +1,4 @@ +
+

StandupMeetingComments#edit

+

Find me in app/views/standup_meeting_comments/edit.html.erb

+
diff --git a/app/views/standup_meeting_comments/index.html.erb b/app/views/standup_meeting_comments/index.html.erb new file mode 100644 index 00000000..b0a8e58b --- /dev/null +++ b/app/views/standup_meeting_comments/index.html.erb @@ -0,0 +1,4 @@ +
+

StandupMeetingComments#index

+

Find me in app/views/standup_meeting_comments/index.html.erb

+
diff --git a/app/views/standup_meeting_comments/new.html.erb b/app/views/standup_meeting_comments/new.html.erb new file mode 100644 index 00000000..855d9829 --- /dev/null +++ b/app/views/standup_meeting_comments/new.html.erb @@ -0,0 +1,13 @@ +
+

StandupMeetingComments#new

+ + + <%= form_with model:[@standup_meeting, @standup_meeting_comment] do |form| %> + + <%= form.hidden_field :name, value: @section %> + <%#= form.text_area :body %> + <%= form.submit class:"btn btn-accent"%> + <% end %> + +
+<%= params %> \ No newline at end of file diff --git a/app/views/standup_meeting_comments/show.html.erb b/app/views/standup_meeting_comments/show.html.erb new file mode 100644 index 00000000..16d477f3 --- /dev/null +++ b/app/views/standup_meeting_comments/show.html.erb @@ -0,0 +1,9 @@ +
+

<%= @standup_meeting_comment.name %>

+

test

+ + +
+ test<%= @standup_meeting_comment.name %> + +
diff --git a/app/views/standup_meetings/show.html.erb b/app/views/standup_meetings/show.html.erb new file mode 100644 index 00000000..62725358 --- /dev/null +++ b/app/views/standup_meetings/show.html.erb @@ -0,0 +1,18 @@ +

<%= @standup_meeting.yesterday_work_description %>

+ + +

commments

+<% @standup_meeting.standup_meeting_comments.each do |c| %> + + <%= c.name %>
+<% end %> + + +form +<%= form_with model:[@standup_meeting, StandupMeetingComment.new] do |f| %> + + <%= f.hidden_field :name, value: @standup_meeting.yesterday_work_description %> + <%= f.text_area :body %> + <%= f.submit class:"btn btn-accent"%> +<% end %> + diff --git a/config/routes.rb b/config/routes.rb index 08561626..c1fbb1ef 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,11 @@ require 'admin_constraint' Rails.application.routes.draw do + # get 'standup_meeting_comments/show' + # get 'standup_meeting_comments/new' + # get 'standup_meeting_comments/index' + # get 'standup_meeting_comments/edit' + resources :standup_meeting_comments, only: %i[index show new create edit update] constraints(AdminConstraint) do mount Sidekiq::Web => '/sidekiq' end @@ -69,4 +74,8 @@ scope controller: :static do get :faq end + + resources :standup_meetings do + resources :standup_meeting_comments + end end diff --git a/spec/helpers/standup_meeting_comments_helper_spec.rb b/spec/helpers/standup_meeting_comments_helper_spec.rb new file mode 100644 index 00000000..62370608 --- /dev/null +++ b/spec/helpers/standup_meeting_comments_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the StandupMeetingCommentsHelper. For example: +# +# describe StandupMeetingCommentsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe StandupMeetingCommentsHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/standup_meeting_comments_spec.rb b/spec/requests/standup_meeting_comments_spec.rb new file mode 100644 index 00000000..c7cd1336 --- /dev/null +++ b/spec/requests/standup_meeting_comments_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +RSpec.describe "StandupMeetingComments", type: :request do + describe "GET /show" do + it "returns http success" do + get "/standup_meeting_comments/show" + expect(response).to have_http_status(:success) + end + end + + describe "GET /new" do + it "returns http success" do + get "/standup_meeting_comments/new" + expect(response).to have_http_status(:success) + end + end + + describe "GET /index" do + it "returns http success" do + get "/standup_meeting_comments/index" + expect(response).to have_http_status(:success) + end + end + + describe "GET /edit" do + it "returns http success" do + get "/standup_meeting_comments/edit" + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb new file mode 100644 index 00000000..54e0c968 --- /dev/null +++ b/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "standup_meeting_comments/edit.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb new file mode 100644 index 00000000..5ff57890 --- /dev/null +++ b/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "standup_meeting_comments/index.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb new file mode 100644 index 00000000..c05d2975 --- /dev/null +++ b/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "standup_meeting_comments/new.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb new file mode 100644 index 00000000..1f15b589 --- /dev/null +++ b/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "standup_meeting_comments/show.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end From 1a73ed7ef72f8a1d9c3009e6574bc5af376c4fef Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Wed, 29 Nov 2023 12:01:25 -0800 Subject: [PATCH 04/40] refactor yesterday_work_description to sections controller and added methods to allow it to service requests from the different sections --- .../meeting_update_component.html.erb | 5 +---- .../standup_meetings/sections_controller.rb | 9 +++++++++ app/models/standup_meeting.rb | 17 ++++++++++++++-- app/models/standup_meeting_comment.rb | 12 ++++++----- .../standup_meetings/sections/index.html.erb | 20 +++++++++++++++++++ app/views/standup_meetings/show.html.erb | 18 ----------------- config/routes.rb | 3 +++ 7 files changed, 55 insertions(+), 29 deletions(-) create mode 100644 app/controllers/standup_meetings/sections_controller.rb create mode 100644 app/views/standup_meetings/sections/index.html.erb delete mode 100644 app/views/standup_meetings/show.html.erb diff --git a/app/components/standup_meeting/meeting_update_component.html.erb b/app/components/standup_meeting/meeting_update_component.html.erb index 3bce6433..2470b68f 100644 --- a/app/components/standup_meeting/meeting_update_component.html.erb +++ b/app/components/standup_meeting/meeting_update_component.html.erb @@ -5,8 +5,5 @@
<%= tag.span(standup_content, class: "grow whitespace-pre-line") %> -<%#= link_to 'New Comment', new_standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, section: @content_type) %> -<%# link_to 'Comment', standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, standup_meeting_comment_id: @standup_meeting_comment.id ) , class:'' %> -<%#= link_to 'View Comment', standup_meeting_standup_meeting_comment_path(standup_meeting_id: @standup_meeting.id, id: @standup_meeting.standup_meeting_comments.first.id) %> -<%= link_to "View Comments", standup_meeting_path(@standup_meeting) %> + <%= link_to "Comments", standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class:'' %> diff --git a/app/controllers/standup_meetings/sections_controller.rb b/app/controllers/standup_meetings/sections_controller.rb new file mode 100644 index 00000000..fdf9473b --- /dev/null +++ b/app/controllers/standup_meetings/sections_controller.rb @@ -0,0 +1,9 @@ +class StandupMeetings::SectionsController < ApplicationController + def index + @standup_meeting = StandupMeeting.find(params[:standup_meeting_id]) + @section = params[:section] + @question = @standup_meeting.send(@section) + end + + def create; end +end diff --git a/app/models/standup_meeting.rb b/app/models/standup_meeting.rb index fb6c4868..037b3066 100644 --- a/app/models/standup_meeting.rb +++ b/app/models/standup_meeting.rb @@ -28,8 +28,6 @@ class StandupMeeting < ApplicationRecord belongs_to :standup_meeting_group, inverse_of: :standup_meetings belongs_to :user - # after_update :create_default_comments - has_rich_text :yesterday_work_description has_rich_text :today_work_description has_rich_text :blockers_description @@ -47,6 +45,21 @@ class StandupMeeting < ApplicationRecord scope :for_member, ->(user, group) { where(user:, standup_meeting_group: group) } + def comments(section) + standup_meeting_comments.where(name: section) + end + + def section_content(section) + case section + when 'yesterday_work_description' + yesterday_work_description + when 'today_work_description' + today_work_description + when 'blockers_description' + blockers_description + end + end + private def create_default_comments diff --git a/app/models/standup_meeting_comment.rb b/app/models/standup_meeting_comment.rb index d70164c6..6f5b0fc9 100644 --- a/app/models/standup_meeting_comment.rb +++ b/app/models/standup_meeting_comment.rb @@ -1,9 +1,11 @@ class StandupMeetingComment < ApplicationRecord belongs_to :standup_meeting - enum section: { - yesterday_work_description: 0, - today_work_description: 1, - blockers_description: 2 - } + # enum section: { + # yesterday_work_description: 0, + # today_work_description: 1, + # blockers_description: 2 + # } + + has_rich_text :content end diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb new file mode 100644 index 00000000..84cf0f5b --- /dev/null +++ b/app/views/standup_meetings/sections/index.html.erb @@ -0,0 +1,20 @@ +

<%= @section.humanize.titleize %>

+

<%= @standup_meeting.section_content(@section) %>

+ + +<%= form_with model:[@standup_meeting, StandupMeetingComment.new] do |f| %> + <%= f.hidden_field :name, value: @section %> + +
+ <%= f.label :content %> + <%= f.rich_text_area :content %> +
+ <%= f.submit class:"btn btn-accent"%> +<% end %> + +

Comments

+<%= @standup_meeting.comments(@section).count %> + +<% @standup_meeting.comments(@section).each do |f| %> + <%= f.content %> +<% end %> diff --git a/app/views/standup_meetings/show.html.erb b/app/views/standup_meetings/show.html.erb deleted file mode 100644 index 62725358..00000000 --- a/app/views/standup_meetings/show.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -

<%= @standup_meeting.yesterday_work_description %>

- - -

commments

-<% @standup_meeting.standup_meeting_comments.each do |c| %> - - <%= c.name %>
-<% end %> - - -form -<%= form_with model:[@standup_meeting, StandupMeetingComment.new] do |f| %> - - <%= f.hidden_field :name, value: @standup_meeting.yesterday_work_description %> - <%= f.text_area :body %> - <%= f.submit class:"btn btn-accent"%> -<% end %> - diff --git a/config/routes.rb b/config/routes.rb index c1fbb1ef..71eecfc1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -77,5 +77,8 @@ resources :standup_meetings do resources :standup_meeting_comments + scope module: :standup_meetings do + resources :sections, only: %i[create show index] + end end end From bc0599fb59aae5febca5d8e4de0d0d7d74093909 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Wed, 29 Nov 2023 12:36:37 -0800 Subject: [PATCH 05/40] remove unneded code and files --- .../standup_meeting_comments_controller.rb | 1 - .../standup_meeting_comments_controller.rb | 2 -- app/controllers/standup_meetings_controller.rb | 5 ----- app/models/standup_meeting_comment.rb | 6 ------ app/views/standup_meeting_comments/edit.html.erb | 4 ---- app/views/standup_meeting_comments/index.html.erb | 4 ---- app/views/standup_meeting_comments/new.html.erb | 13 ------------- app/views/standup_meeting_comments/show.html.erb | 9 --------- config/routes.rb | 4 ---- 9 files changed, 48 deletions(-) delete mode 100644 app/controllers/standup_meetings/standup_meeting_comments_controller.rb delete mode 100644 app/views/standup_meeting_comments/edit.html.erb delete mode 100644 app/views/standup_meeting_comments/index.html.erb delete mode 100644 app/views/standup_meeting_comments/new.html.erb delete mode 100644 app/views/standup_meeting_comments/show.html.erb diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index 27a62afb..e1e1fca5 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -1,6 +1,5 @@ class StandupMeetingCommentsController < ApplicationController before_action :set_standup_meeting - def index; end def show @standup_meeting_comment = StandupMeetingComment.find(params[:id]) diff --git a/app/controllers/standup_meetings/standup_meeting_comments_controller.rb b/app/controllers/standup_meetings/standup_meeting_comments_controller.rb deleted file mode 100644 index e39f6029..00000000 --- a/app/controllers/standup_meetings/standup_meeting_comments_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class StandupMeeting::MeetingUpdateCommentController < ApplicationController -end diff --git a/app/controllers/standup_meetings_controller.rb b/app/controllers/standup_meetings_controller.rb index 4c0e417f..5c8ba9bc 100644 --- a/app/controllers/standup_meetings_controller.rb +++ b/app/controllers/standup_meetings_controller.rb @@ -24,11 +24,6 @@ def index end # rubocop:enable Metrics/AbcSize - def show - @standup_meeting = StandupMeeting.find(params[:id]) - @yesterday_work_description = @standup_meeting.yesterday_work_description - end - def edit @standup_meeting = StandupMeeting.includes(:standup_meeting_group).find(params[:id]) @standup_meeting_group = @standup_meeting.standup_meeting_group diff --git a/app/models/standup_meeting_comment.rb b/app/models/standup_meeting_comment.rb index 6f5b0fc9..302d0e1d 100644 --- a/app/models/standup_meeting_comment.rb +++ b/app/models/standup_meeting_comment.rb @@ -1,11 +1,5 @@ class StandupMeetingComment < ApplicationRecord belongs_to :standup_meeting - # enum section: { - # yesterday_work_description: 0, - # today_work_description: 1, - # blockers_description: 2 - # } - has_rich_text :content end diff --git a/app/views/standup_meeting_comments/edit.html.erb b/app/views/standup_meeting_comments/edit.html.erb deleted file mode 100644 index e006435c..00000000 --- a/app/views/standup_meeting_comments/edit.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -
-

StandupMeetingComments#edit

-

Find me in app/views/standup_meeting_comments/edit.html.erb

-
diff --git a/app/views/standup_meeting_comments/index.html.erb b/app/views/standup_meeting_comments/index.html.erb deleted file mode 100644 index b0a8e58b..00000000 --- a/app/views/standup_meeting_comments/index.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -
-

StandupMeetingComments#index

-

Find me in app/views/standup_meeting_comments/index.html.erb

-
diff --git a/app/views/standup_meeting_comments/new.html.erb b/app/views/standup_meeting_comments/new.html.erb deleted file mode 100644 index 855d9829..00000000 --- a/app/views/standup_meeting_comments/new.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -
-

StandupMeetingComments#new

- - - <%= form_with model:[@standup_meeting, @standup_meeting_comment] do |form| %> - - <%= form.hidden_field :name, value: @section %> - <%#= form.text_area :body %> - <%= form.submit class:"btn btn-accent"%> - <% end %> - -
-<%= params %> \ No newline at end of file diff --git a/app/views/standup_meeting_comments/show.html.erb b/app/views/standup_meeting_comments/show.html.erb deleted file mode 100644 index 16d477f3..00000000 --- a/app/views/standup_meeting_comments/show.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -
-

<%= @standup_meeting_comment.name %>

-

test

- - -
- test<%= @standup_meeting_comment.name %> - -
diff --git a/config/routes.rb b/config/routes.rb index 71eecfc1..5362762d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,10 +2,6 @@ require 'admin_constraint' Rails.application.routes.draw do - # get 'standup_meeting_comments/show' - # get 'standup_meeting_comments/new' - # get 'standup_meeting_comments/index' - # get 'standup_meeting_comments/edit' resources :standup_meeting_comments, only: %i[index show new create edit update] constraints(AdminConstraint) do mount Sidekiq::Web => '/sidekiq' From f8748ae466c0a7da53a73c701391839feb371dcf Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Wed, 29 Nov 2023 13:21:57 -0800 Subject: [PATCH 06/40] removes unneded code --- app/controllers/standup_meetings_controller.rb | 5 +---- app/models/standup_meeting.rb | 8 -------- app/views/standup_meetings/sections/index.html.erb | 1 - 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/controllers/standup_meetings_controller.rb b/app/controllers/standup_meetings_controller.rb index 5c8ba9bc..1b4dd9b7 100644 --- a/app/controllers/standup_meetings_controller.rb +++ b/app/controllers/standup_meetings_controller.rb @@ -24,6 +24,7 @@ def index end # rubocop:enable Metrics/AbcSize + def edit @standup_meeting = StandupMeeting.includes(:standup_meeting_group).find(params[:id]) @standup_meeting_group = @standup_meeting.standup_meeting_group @@ -38,10 +39,6 @@ def create meeting_date: params[:meeting_date] ) if @standup_meeting.save - @standup_meeting.standup_meeting_comments.create(name: 'yesterday_work_description') - @standup_meeting.standup_meeting_comments.create(name: 'today_work_description') - @standup_meeting.standup_meeting_comments.create(name: 'blocker_description') - redirect_to edit_standup_meeting_group_standup_meeting_path(@standup_meeting_group, @standup_meeting) else redirect_back_or_to( diff --git a/app/models/standup_meeting.rb b/app/models/standup_meeting.rb index 037b3066..72edefbe 100644 --- a/app/models/standup_meeting.rb +++ b/app/models/standup_meeting.rb @@ -59,12 +59,4 @@ def section_content(section) blockers_description end end - - private - - def create_default_comments - standup_meeting_comments.create(name: 'yesterday_work_description') - standup_meeting_comments.create(name: 'today_work_description') - standup_meeting_comments.create(name: 'blockers_description') - end end diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 84cf0f5b..603a5386 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -1,7 +1,6 @@

<%= @section.humanize.titleize %>

<%= @standup_meeting.section_content(@section) %>

- <%= form_with model:[@standup_meeting, StandupMeetingComment.new] do |f| %> <%= f.hidden_field :name, value: @section %> From d30f07c4b6a6974ebee82177309a8f84c3dab39d Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Wed, 29 Nov 2023 13:27:42 -0800 Subject: [PATCH 07/40] rubocop fixes --- spec/factories/standup_meeting_comments.rb | 2 +- .../standup_meeting_comments_helper_spec.rb | 2 +- spec/models/standup_meeting_comment_spec.rb | 2 +- .../requests/standup_meeting_comments_spec.rb | 27 +++++++++---------- .../edit.html.tailwindcss_spec.rb | 2 +- .../index.html.tailwindcss_spec.rb | 2 +- .../new.html.tailwindcss_spec.rb | 2 +- .../show.html.tailwindcss_spec.rb | 2 +- 8 files changed, 20 insertions(+), 21 deletions(-) diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb index fc072670..31cec5ff 100644 --- a/spec/factories/standup_meeting_comments.rb +++ b/spec/factories/standup_meeting_comments.rb @@ -1,6 +1,6 @@ FactoryBot.define do factory :standup_meeting_comment do - name { "MyString" } + name { 'MyString' } standup_meeting { nil } end end diff --git a/spec/helpers/standup_meeting_comments_helper_spec.rb b/spec/helpers/standup_meeting_comments_helper_spec.rb index 62370608..5f41a2b8 100644 --- a/spec/helpers/standup_meeting_comments_helper_spec.rb +++ b/spec/helpers/standup_meeting_comments_helper_spec.rb @@ -10,6 +10,6 @@ # end # end # end -RSpec.describe StandupMeetingCommentsHelper, type: :helper do +RSpec.describe StandupMeetingCommentsHelper do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/models/standup_meeting_comment_spec.rb b/spec/models/standup_meeting_comment_spec.rb index 6fd3b765..2dcb0c76 100644 --- a/spec/models/standup_meeting_comment_spec.rb +++ b/spec/models/standup_meeting_comment_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe StandupMeetingComment, type: :model do +RSpec.describe StandupMeetingComment do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/requests/standup_meeting_comments_spec.rb b/spec/requests/standup_meeting_comments_spec.rb index c7cd1336..1f830fd9 100644 --- a/spec/requests/standup_meeting_comments_spec.rb +++ b/spec/requests/standup_meeting_comments_spec.rb @@ -1,32 +1,31 @@ require 'rails_helper' -RSpec.describe "StandupMeetingComments", type: :request do - describe "GET /show" do - it "returns http success" do - get "/standup_meeting_comments/show" +RSpec.describe 'StandupMeetingComments' do + describe 'GET /show' do + it 'returns http success' do + get '/standup_meeting_comments/show' expect(response).to have_http_status(:success) end end - describe "GET /new" do - it "returns http success" do - get "/standup_meeting_comments/new" + describe 'GET /new' do + it 'returns http success' do + get '/standup_meeting_comments/new' expect(response).to have_http_status(:success) end end - describe "GET /index" do - it "returns http success" do - get "/standup_meeting_comments/index" + describe 'GET /index' do + it 'returns http success' do + get '/standup_meeting_comments/index' expect(response).to have_http_status(:success) end end - describe "GET /edit" do - it "returns http success" do - get "/standup_meeting_comments/edit" + describe 'GET /edit' do + it 'returns http success' do + get '/standup_meeting_comments/edit' expect(response).to have_http_status(:success) end end - end diff --git a/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb index 54e0c968..30db15f7 100644 --- a/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb +++ b/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "standup_meeting_comments/edit.html.tailwindcss", type: :view do +RSpec.describe 'standup_meeting_comments/edit.html.tailwindcss' do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb index 5ff57890..455ebb99 100644 --- a/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb +++ b/spec/views/standup_meeting_comments/index.html.tailwindcss_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "standup_meeting_comments/index.html.tailwindcss", type: :view do +RSpec.describe 'standup_meeting_comments/index.html.tailwindcss' do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb index c05d2975..d176443f 100644 --- a/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb +++ b/spec/views/standup_meeting_comments/new.html.tailwindcss_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "standup_meeting_comments/new.html.tailwindcss", type: :view do +RSpec.describe 'standup_meeting_comments/new.html.tailwindcss' do pending "add some examples to (or delete) #{__FILE__}" end diff --git a/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb index 1f15b589..16e371de 100644 --- a/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb +++ b/spec/views/standup_meeting_comments/show.html.tailwindcss_spec.rb @@ -1,5 +1,5 @@ require 'rails_helper' -RSpec.describe "standup_meeting_comments/show.html.tailwindcss", type: :view do +RSpec.describe 'standup_meeting_comments/show.html.tailwindcss' do pending "add some examples to (or delete) #{__FILE__}" end From 36e84311f7a71d6361724dd59e78f7e88c38973d Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Thu, 30 Nov 2023 16:43:25 -0800 Subject: [PATCH 08/40] Style Standup comment section --- .../standup_meetings/sections/index.html.erb | 55 ++++++++++++++----- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 603a5386..f4044b11 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -1,19 +1,44 @@ -

<%= @section.humanize.titleize %>

-

<%= @standup_meeting.section_content(@section) %>

+

<%= @section.humanize.titleize %>

+

<%= @standup_meeting.section_content(@section) %>

-<%= form_with model:[@standup_meeting, StandupMeetingComment.new] do |f| %> - <%= f.hidden_field :name, value: @section %> +
+
+
<%= %>
+
-
- <%= f.label :content %> - <%= f.rich_text_area :content %> -
- <%= f.submit class:"btn btn-accent"%> -<% end %> -

Comments

-<%= @standup_meeting.comments(@section).count %> +
+ <% @standup_meeting.comments(@section).each do |comment| %> +
+
+ Username 2 hours ago +
+ +
+

+ <%= comment.content %> +

+
+ +
+
Edit
+
Delete
+
+
+ <% end %> + -<% @standup_meeting.comments(@section).each do |f| %> - <%= f.content %> -<% end %> +
+
Add a comment
+ <%= form_with model:[@standup_meeting, StandupMeetingComment.new], html: { class: 'border rounded-lg mt-4 p-2' } do |f| %> + <%= f.hidden_field :name, value: @section %> + +
+ <%= f.rich_text_area :content, class:"textarea textarea-bordered" %> +
+
+ <%= f.submit class:"btn btn-primary btn-sm mx-auto"%> +
+ <% end %> +
+
\ No newline at end of file From 0cc40e05eb455b39c9e04cf219e79e548928b5e5 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Thu, 30 Nov 2023 17:04:41 -0800 Subject: [PATCH 09/40] Adds user reference to standup meeting comments --- .../standup_meeting_comments_controller.rb | 1 + app/models/standup_meeting_comment.rb | 22 ++++++++++++++++++ app/models/user.rb | 2 ++ .../standup_meetings/sections/index.html.erb | 2 +- ...04_add_user_to_standup_meeting_comments.rb | 5 ++++ db/schema.rb | 5 +++- erd.pdf | Bin 50059 -> 49757 bytes spec/factories/standup_meeting_comments.rb | 21 +++++++++++++++++ spec/models/standup_meeting_comment_spec.rb | 21 +++++++++++++++++ 9 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20231201004804_add_user_to_standup_meeting_comments.rb diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index e1e1fca5..b3f7eeb1 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -25,6 +25,7 @@ def edit; end def create @standup_meeting_comment = @standup_meeting.standup_meeting_comments.new(standup_meeting_comment_params) + @standup_meeting_comment.user = current_user if @standup_meeting_comment.save redirect_to @standup_meeting_comment, notice: 'Comment was successfully created.' else diff --git a/app/models/standup_meeting_comment.rb b/app/models/standup_meeting_comment.rb index 302d0e1d..1fc11d79 100644 --- a/app/models/standup_meeting_comment.rb +++ b/app/models/standup_meeting_comment.rb @@ -1,5 +1,27 @@ +# == Schema Information +# +# Table name: standup_meeting_comments +# +# id :bigint not null, primary key +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# standup_meeting_id :bigint not null +# user_id :bigint not null +# +# Indexes +# +# index_standup_meeting_comments_on_standup_meeting_id (standup_meeting_id) +# index_standup_meeting_comments_on_user_id (user_id) +# +# Foreign Keys +# +# fk_rails_... (standup_meeting_id => standup_meetings.id) +# fk_rails_... (user_id => users.id) +# class StandupMeetingComment < ApplicationRecord belongs_to :standup_meeting + belongs_to :user has_rich_text :content end diff --git a/app/models/user.rb b/app/models/user.rb index b1514a20..be9f636e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -80,6 +80,8 @@ class User < ApplicationRecord has_one :current_resume, -> { where(current: true) }, class_name: 'Resume', dependent: nil # rubocop:enable Rails/InverseOf + has_many :standup_meeting_comments, dependent: :destroy + validates :first_name, presence: true validates :last_name, presence: true diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index f4044b11..1c3bc630 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -11,7 +11,7 @@ <% @standup_meeting.comments(@section).each do |comment| %>
- Username 2 hours ago + <%= comment.user.first_name %> <%= time_ago_in_words(comment.created_at) %>
diff --git a/db/migrate/20231201004804_add_user_to_standup_meeting_comments.rb b/db/migrate/20231201004804_add_user_to_standup_meeting_comments.rb new file mode 100644 index 00000000..4a43a3be --- /dev/null +++ b/db/migrate/20231201004804_add_user_to_standup_meeting_comments.rb @@ -0,0 +1,5 @@ +class AddUserToStandupMeetingComments < ActiveRecord::Migration[7.0] + def change + add_reference :standup_meeting_comments, :user, null: false, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 544f7fe9..44776992 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_11_27_185636) do +ActiveRecord::Schema[7.0].define(version: 2023_12_01_004804) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -170,7 +170,9 @@ t.bigint "standup_meeting_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.bigint "user_id", null: false t.index ["standup_meeting_id"], name: "index_standup_meeting_comments_on_standup_meeting_id" + t.index ["user_id"], name: "index_standup_meeting_comments_on_user_id" end create_table "standup_meeting_groups", force: :cascade do |t| @@ -281,6 +283,7 @@ add_foreign_key "profiles", "users" add_foreign_key "resumes", "users" add_foreign_key "standup_meeting_comments", "standup_meetings" + add_foreign_key "standup_meeting_comments", "users" add_foreign_key "standup_meetings", "standup_meeting_groups" add_foreign_key "standup_meetings", "users" add_foreign_key "user_mentee_applications", "user_mentee_application_cohorts" diff --git a/erd.pdf b/erd.pdf index 7625d454a4da08bb448294e39e6017e931ddb108..1c92991fccbecad4c3c9108ed0062794e2618937 100644 GIT binary patch delta 21772 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 B;otxO delta 22064 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

E5*j4q8 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 bl~~wlIwyd|=I^x#j*@>QnV76{U9Ipx>;jCt diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb index 31cec5ff..ba1ebe2e 100644 --- a/spec/factories/standup_meeting_comments.rb +++ b/spec/factories/standup_meeting_comments.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: standup_meeting_comments +# +# id :bigint not null, primary key +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# standup_meeting_id :bigint not null +# user_id :bigint not null +# +# Indexes +# +# index_standup_meeting_comments_on_standup_meeting_id (standup_meeting_id) +# index_standup_meeting_comments_on_user_id (user_id) +# +# Foreign Keys +# +# fk_rails_... (standup_meeting_id => standup_meetings.id) +# fk_rails_... (user_id => users.id) +# FactoryBot.define do factory :standup_meeting_comment do name { 'MyString' } diff --git a/spec/models/standup_meeting_comment_spec.rb b/spec/models/standup_meeting_comment_spec.rb index 2dcb0c76..832a5437 100644 --- a/spec/models/standup_meeting_comment_spec.rb +++ b/spec/models/standup_meeting_comment_spec.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: standup_meeting_comments +# +# id :bigint not null, primary key +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# standup_meeting_id :bigint not null +# user_id :bigint not null +# +# Indexes +# +# index_standup_meeting_comments_on_standup_meeting_id (standup_meeting_id) +# index_standup_meeting_comments_on_user_id (user_id) +# +# Foreign Keys +# +# fk_rails_... (standup_meeting_id => standup_meetings.id) +# fk_rails_... (user_id => users.id) +# require 'rails_helper' RSpec.describe StandupMeetingComment do From 101518006a679fae50509c7233e8839e2e0d2fcb Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Thu, 30 Nov 2023 17:21:37 -0800 Subject: [PATCH 10/40] resize comment container --- .../standup_meetings/sections/index.html.erb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 1c3bc630..9ced5365 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -1,13 +1,15 @@ -

<%= @section.humanize.titleize %>

-

<%= @standup_meeting.section_content(@section) %>

+

<%= @section.humanize.titleize %>

+
-
-
-
<%= %>
-
+

<%= @standup_meeting.section_content(@section) %>

+
+
+
<%= %>
+
+
-
+
<% @standup_meeting.comments(@section).each do |comment| %>
From 47052d9a727dcc5bd7dd1de375897d5319b743f1 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Thu, 30 Nov 2023 17:38:15 -0800 Subject: [PATCH 11/40] Add comment font-awesome icon to link_to --- .../standup_meeting/meeting_update_component.html.erb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/components/standup_meeting/meeting_update_component.html.erb b/app/components/standup_meeting/meeting_update_component.html.erb index 2470b68f..11f5b739 100644 --- a/app/components/standup_meeting/meeting_update_component.html.erb +++ b/app/components/standup_meeting/meeting_update_component.html.erb @@ -5,5 +5,9 @@
<%= tag.span(standup_content, class: "grow whitespace-pre-line") %> - <%= link_to "Comments", standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class:'' %> +<%= link_to standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class: '' do %> + Comments +<% end %> + +
From a0cafb67b2e4b970c7cc78cd303d4e3342f756ee Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 09:53:56 -0800 Subject: [PATCH 12/40] refactor standup_meeting creation to persist standup_meeting to be able to utilize standup_meeting.id in test --- .../components/standup_meeting/meeting_update_component_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/components/standup_meeting/meeting_update_component_spec.rb b/spec/components/standup_meeting/meeting_update_component_spec.rb index 61c016b8..c0650ee4 100644 --- a/spec/components/standup_meeting/meeting_update_component_spec.rb +++ b/spec/components/standup_meeting/meeting_update_component_spec.rb @@ -9,7 +9,7 @@ let(:yesterday_work_description) { 'Lorem ipsum' } let(:today_work_description) { 'Sit amet' } let(:standup_meeting) do - build(:standup_meeting, yesterday_work_description:, today_work_description:) + create(:standup_meeting, yesterday_work_description:, today_work_description:) end it "renders yesterday's content when passed the yesterday content type" do From a6ba1ca23af106c623b7b5e35fff6cdefd61692c Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 10:46:27 -0800 Subject: [PATCH 13/40] remove unneded actions and add destroy action --- .../standup_meeting_comments_controller.rb | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index b3f7eeb1..81633325 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -1,26 +1,5 @@ class StandupMeetingCommentsController < ApplicationController - before_action :set_standup_meeting - - def show - @standup_meeting_comment = StandupMeetingComment.find(params[:id]) - case @standup_meeting_comment.name - when 'yesterday' - @standup_meeting_comment.name = 'Yesterday' - when 'today' - @standup_meeting_comment.name = 'Today' - when 'blockers' - @standup_meeting_comment.name = 'Blockers' - end - end - - def new - @section = params[:section] - - standup_meeting_id = params[:standup_meeting_id] - - @standup_meeting_comment = StandupMeetingComment.new(section: @section, standup_meeting_id:) - end - + before_action :set_standup_meeting, only: %i[create] def edit; end def create @@ -33,6 +12,19 @@ def create end end + def destroy + @standup_meeting_comment = StandupMeetingComment.find(params[:id]) + respond_to do |format| + if @standup_meeting_comment.destroy + format.html do + redirect_back(fallback_location: root_path, notice: 'Comment was successfully deleted.') + end + else + format.html { render :show, status: :unprocessable_entity } + end + end + end + private def set_standup_meeting From d275920a8014711426121f51f82694c4dc0cb2a1 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 10:49:32 -0800 Subject: [PATCH 14/40] Adds a delete comment link --- .../standup_meeting/meeting_update_component.html.erb | 8 +++----- app/views/standup_meetings/sections/index.html.erb | 4 +++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/components/standup_meeting/meeting_update_component.html.erb b/app/components/standup_meeting/meeting_update_component.html.erb index 11f5b739..8df7fd1e 100644 --- a/app/components/standup_meeting/meeting_update_component.html.erb +++ b/app/components/standup_meeting/meeting_update_component.html.erb @@ -5,9 +5,7 @@
<%= tag.span(standup_content, class: "grow whitespace-pre-line") %> -<%= link_to standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class: '' do %> - Comments -<% end %> - - + <%= link_to standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class: '' do %> + Comments + <% end %>
diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 9ced5365..e1f42c19 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -24,7 +24,9 @@
Edit
-
Delete
+
<%#= link_to "Delete", standup_meeting_standup_meeting_comment(comment), method: %>
+ <%= link_to 'Delete', standup_meeting_standup_meeting_comment_path(@standup_meeting, comment), method: :delete, data: { turbo_method: :delete } %> +
<% end %> From 15b42f37717dbc1def8fad0802e633847d7dc121 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 10:50:46 -0800 Subject: [PATCH 15/40] modify routes --- config/routes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index 5362762d..48989e97 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -72,7 +72,7 @@ end resources :standup_meetings do - resources :standup_meeting_comments + resources :standup_meeting_comments, only: %i[create update destroy] scope module: :standup_meetings do resources :sections, only: %i[create show index] end From 82ff3b1ba03528807e36ee241e5c63eec1333c89 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 11:29:27 -0800 Subject: [PATCH 16/40] WIP: Adding request spec for standup_meeting_comments destroy action --- .../requests/standup_meeting_comments_spec.rb | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/spec/requests/standup_meeting_comments_spec.rb b/spec/requests/standup_meeting_comments_spec.rb index 1f830fd9..9c843617 100644 --- a/spec/requests/standup_meeting_comments_spec.rb +++ b/spec/requests/standup_meeting_comments_spec.rb @@ -1,31 +1,30 @@ require 'rails_helper' RSpec.describe 'StandupMeetingComments' do - describe 'GET /show' do - it 'returns http success' do - get '/standup_meeting_comments/show' - expect(response).to have_http_status(:success) - end - end + let!(:user) { create(:user) } + let!(:standup_meeting) { create(:standup_meeting) } + let!(:standup_meeting_comment) { create(:standup_meeting_comment, user:, standup_meeting:) } - describe 'GET /new' do - it 'returns http success' do - get '/standup_meeting_comments/new' - expect(response).to have_http_status(:success) - end + before do + sign_in user end - describe 'GET /index' do + describe 'GET /edit' do it 'returns http success' do - get '/standup_meeting_comments/index' + get '/standup_meeting_comments/edit' expect(response).to have_http_status(:success) end end - describe 'GET /edit' do - it 'returns http success' do - get '/standup_meeting_comments/edit' - expect(response).to have_http_status(:success) + describe 'DELETE /standup_meeting_comments/:id' do + it 'deletes the standup meeting comment' do + expect { + delete standup_meeting_standup_meeting_comment_path(standup_meeting.id, standup_meeting_comment) + }.to change(StandupMeetingComment, :count).by(-1) + + expect(response).to have_http_status(:redirect) + follow_redirect! + expect(response.body).to include('Comment was successfully deleted.') end end end From 01e3471e885e2f25e765cd2b7c44e5f66c8871fa Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 15:30:19 -0800 Subject: [PATCH 17/40] create action request test working --- spec/requests/standup_meeting_comments_spec.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spec/requests/standup_meeting_comments_spec.rb b/spec/requests/standup_meeting_comments_spec.rb index 9c843617..7d8efd7f 100644 --- a/spec/requests/standup_meeting_comments_spec.rb +++ b/spec/requests/standup_meeting_comments_spec.rb @@ -9,12 +9,12 @@ sign_in user end - describe 'GET /edit' do - it 'returns http success' do - get '/standup_meeting_comments/edit' - expect(response).to have_http_status(:success) - end - end + # describe 'GET /edit' do + # it 'returns http success' do + # get '/standup_meeting_comments/edit' + # expect(response).to have_http_status(:success) + # end + # end describe 'DELETE /standup_meeting_comments/:id' do it 'deletes the standup meeting comment' do @@ -24,7 +24,7 @@ expect(response).to have_http_status(:redirect) follow_redirect! - expect(response.body).to include('Comment was successfully deleted.') + expect(flash[:notice]).to eq 'Comment was successfully deleted.' end end end From 363fb0b88053744e0ffa762b9116433e2fc81bff Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 1 Dec 2023 16:20:10 -0800 Subject: [PATCH 18/40] Fix standup_meeting_comment facotory bot --- spec/factories/standup_meeting_comments.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb index ba1ebe2e..c7244793 100644 --- a/spec/factories/standup_meeting_comments.rb +++ b/spec/factories/standup_meeting_comments.rb @@ -22,6 +22,7 @@ FactoryBot.define do factory :standup_meeting_comment do name { 'MyString' } - standup_meeting { nil } + standup_meeting + user end end From eab9d4c48522b85fa98840f98dac46c254bf7d5f Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 09:44:11 -0800 Subject: [PATCH 19/40] Add standup_meeting_comment_policy --- .../standup_meeting_comments_controller.rb | 1 + .../standup_meeting_comment_policy.rb | 11 ++++++++ .../standup_meeting_comment_policy_spec.rb | 27 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 app/policies/standup_meeting_comment_policy.rb create mode 100644 spec/policies/standup_meeting_comment_policy_spec.rb diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index 81633325..aea8a5ed 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -14,6 +14,7 @@ def create def destroy @standup_meeting_comment = StandupMeetingComment.find(params[:id]) + authorize @standup_meeting_comment respond_to do |format| if @standup_meeting_comment.destroy format.html do diff --git a/app/policies/standup_meeting_comment_policy.rb b/app/policies/standup_meeting_comment_policy.rb new file mode 100644 index 00000000..161d0d29 --- /dev/null +++ b/app/policies/standup_meeting_comment_policy.rb @@ -0,0 +1,11 @@ +class StandupMeetingCommentPolicy < ApplicationPolicy + def destroy? + user == record.user + end + + class Scope < Scope + def resolve + scope.all + end + end +end diff --git a/spec/policies/standup_meeting_comment_policy_spec.rb b/spec/policies/standup_meeting_comment_policy_spec.rb new file mode 100644 index 00000000..affb9e95 --- /dev/null +++ b/spec/policies/standup_meeting_comment_policy_spec.rb @@ -0,0 +1,27 @@ +require 'rails_helper' + +RSpec.describe StandupMeetingCommentPolicy, type: :policy do + let(:user) { User.new } + + subject { described_class } + + permissions ".scope" do + pending "add some examples to (or delete) #{__FILE__}" + end + + permissions :show? do + pending "add some examples to (or delete) #{__FILE__}" + end + + permissions :create? do + pending "add some examples to (or delete) #{__FILE__}" + end + + permissions :update? do + pending "add some examples to (or delete) #{__FILE__}" + end + + permissions :destroy? do + pending "add some examples to (or delete) #{__FILE__}" + end +end From 4060e57c803d0252360064cdd4f52b956dcfb1c2 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 15:00:02 -0800 Subject: [PATCH 20/40] Rubocop --- spec/policies/standup_meeting_comment_policy_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/policies/standup_meeting_comment_policy_spec.rb b/spec/policies/standup_meeting_comment_policy_spec.rb index affb9e95..4f2c96b3 100644 --- a/spec/policies/standup_meeting_comment_policy_spec.rb +++ b/spec/policies/standup_meeting_comment_policy_spec.rb @@ -1,11 +1,11 @@ require 'rails_helper' RSpec.describe StandupMeetingCommentPolicy, type: :policy do - let(:user) { User.new } - subject { described_class } - permissions ".scope" do + let(:user) { User.new } + + permissions '.scope' do pending "add some examples to (or delete) #{__FILE__}" end From f9b21ee09bcb2a76faaf3764abda54fdff5f10c4 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 15:18:33 -0800 Subject: [PATCH 21/40] Add policy test specs for standup_meeting_comment destroy? --- .../standup_meeting_comment_policy_spec.rb | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/spec/policies/standup_meeting_comment_policy_spec.rb b/spec/policies/standup_meeting_comment_policy_spec.rb index 4f2c96b3..259dcfcc 100644 --- a/spec/policies/standup_meeting_comment_policy_spec.rb +++ b/spec/policies/standup_meeting_comment_policy_spec.rb @@ -3,25 +3,23 @@ RSpec.describe StandupMeetingCommentPolicy, type: :policy do subject { described_class } - let(:user) { User.new } + let(:member) { build(:user) } + # let(:not_author_member) { build(:user) } - permissions '.scope' do - pending "add some examples to (or delete) #{__FILE__}" - end - - permissions :show? do - pending "add some examples to (or delete) #{__FILE__}" - end - - permissions :create? do - pending "add some examples to (or delete) #{__FILE__}" - end + let(:not_owned_comment) { build(:standup_meeting_comment) } + let(:authored_comment) { build(:standup_meeting_comment, user: member) } permissions :update? do pending "add some examples to (or delete) #{__FILE__}" end permissions :destroy? do - pending "add some examples to (or delete) #{__FILE__}" + it 'denies access if user is not author of comment' do + expect(subject).not_to permit(member, not_owned_comment) + end + + it 'grants access if user is author of comment' do + expect(subject).to permit(member, authored_comment) + end end end From fdc424cd838ea5718879f656c67f0a46f3042e12 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 15:23:14 -0800 Subject: [PATCH 22/40] . --- spec/policies/standup_meeting_comment_policy_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/policies/standup_meeting_comment_policy_spec.rb b/spec/policies/standup_meeting_comment_policy_spec.rb index 259dcfcc..f2bb298c 100644 --- a/spec/policies/standup_meeting_comment_policy_spec.rb +++ b/spec/policies/standup_meeting_comment_policy_spec.rb @@ -4,7 +4,6 @@ subject { described_class } let(:member) { build(:user) } - # let(:not_author_member) { build(:user) } let(:not_owned_comment) { build(:standup_meeting_comment) } let(:authored_comment) { build(:standup_meeting_comment, user: member) } From f54b76524a8375b5f0fcdc868bd1fd74ba1027ea Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 15:26:42 -0800 Subject: [PATCH 23/40] Fix delete link style --- app/views/standup_meetings/sections/index.html.erb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index e1f42c19..b2ad3da1 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -24,9 +24,7 @@
Edit
-
<%#= link_to "Delete", standup_meeting_standup_meeting_comment(comment), method: %>
- <%= link_to 'Delete', standup_meeting_standup_meeting_comment_path(@standup_meeting, comment), method: :delete, data: { turbo_method: :delete } %> - +
<%= link_to 'Delete', standup_meeting_standup_meeting_comment_path(@standup_meeting, comment), method: :delete, data: { turbo_method: :delete } %>
<% end %> From 09bdb6b1076dab50a980a733f032e37bcbe80327 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Sat, 2 Dec 2023 15:56:50 -0800 Subject: [PATCH 24/40] Update section index view style --- app/views/standup_meetings/sections/index.html.erb | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index b2ad3da1..9dc4df13 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -1,14 +1,8 @@

<%= @section.humanize.titleize %>

- -

<%= @standup_meeting.section_content(@section) %>

-
-
-
<%= %>
-
+

<%= @standup_meeting.section_content(@section) %>

-
<% @standup_meeting.comments(@section).each do |comment| %>
@@ -29,7 +23,6 @@
<% end %> -
Add a comment
<%= form_with model:[@standup_meeting, StandupMeetingComment.new], html: { class: 'border rounded-lg mt-4 p-2' } do |f| %> From ec90999f6e5b251f40190dccdbaf361d0a9c6eaa Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Mon, 4 Dec 2023 09:55:51 -0800 Subject: [PATCH 25/40] remove create action --- app/controllers/standup_meetings/sections_controller.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/controllers/standup_meetings/sections_controller.rb b/app/controllers/standup_meetings/sections_controller.rb index fdf9473b..44574977 100644 --- a/app/controllers/standup_meetings/sections_controller.rb +++ b/app/controllers/standup_meetings/sections_controller.rb @@ -4,6 +4,4 @@ def index @section = params[:section] @question = @standup_meeting.send(@section) end - - def create; end end From 56ca3f52a917ee529566208955d353aec35ee31d Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Mon, 4 Dec 2023 12:58:25 -0800 Subject: [PATCH 26/40] Add comments spec for comments method) --- spec/models/standup_meeting_spec.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/spec/models/standup_meeting_spec.rb b/spec/models/standup_meeting_spec.rb index ef2f0f8e..6c4fdfdb 100644 --- a/spec/models/standup_meeting_spec.rb +++ b/spec/models/standup_meeting_spec.rb @@ -23,5 +23,25 @@ require 'rails_helper' RSpec.describe StandupMeeting do - pending "add some examples to (or delete) #{__FILE__}" + describe '#comments' do + let(:standup_meeting) { create(:standup_meeting) } + let(:yesterday_section) { 'yesterday_work_description' } + let(:today_section) { 'today_work_description' } + + before do + create_list(:standup_meeting_comment, 2, standup_meeting: standup_meeting, name: yesterday_section) + create_list(:standup_meeting_comment, 3, standup_meeting: standup_meeting, name: 'today_section') + end + + it 'returns the comments for the given section' do + comments = standup_meeting.comments(yesterday_section) + expect(comments.count).to eq(2) + expect(comments.all? { |comment| comment.name == yesterday_section }).to be true + end + + it 'does not return comments for other sections' do + comments = standup_meeting.comments(yesterday_section) + expect(comments.all? { |comment| comment.name == today_section }).to be false + end + end end From e6f5907aa43f7200a121d220b130573bf0909390 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 5 Dec 2023 09:42:20 -0800 Subject: [PATCH 27/40] rubocop --- db/schema.rb | 11 ++++++++++- erd.pdf | Bin 49757 -> 49732 bytes spec/models/standup_meeting_spec.rb | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 44776992..ad903462 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_12_01_004804) do +ActiveRecord::Schema[7.0].define(version: 2023_12_04_183915) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -204,6 +204,14 @@ t.index ["user_id"], name: "index_standup_meetings_on_user_id" end + create_table "text_reactions", force: :cascade do |t| + t.string "rich_text_id" + t.bigint "user_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_text_reactions_on_user_id" + end + create_table "user_mentee_application_cohorts", force: :cascade do |t| t.daterange "active_date_range", null: false t.boolean "active", default: true, null: false @@ -286,6 +294,7 @@ add_foreign_key "standup_meeting_comments", "users" add_foreign_key "standup_meetings", "standup_meeting_groups" add_foreign_key "standup_meetings", "users" + add_foreign_key "text_reactions", "users" add_foreign_key "user_mentee_applications", "user_mentee_application_cohorts" add_foreign_key "user_mentee_applications", "users" end diff --git a/erd.pdf b/erd.pdf index 1c92991fccbecad4c3c9108ed0062794e2618937..7c0016e6d091b6feef6c338492f2e9907e385c68 100644 GIT binary patch delta 10034 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 IB}Gq03d*f{kpKVy delta 10037 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 Date: Tue, 5 Dec 2023 10:29:19 -0800 Subject: [PATCH 28/40] Add spec for section_content method --- spec/models/standup_meeting_spec.rb | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/spec/models/standup_meeting_spec.rb b/spec/models/standup_meeting_spec.rb index 7081fd9f..e3d2d609 100644 --- a/spec/models/standup_meeting_spec.rb +++ b/spec/models/standup_meeting_spec.rb @@ -23,11 +23,11 @@ require 'rails_helper' RSpec.describe StandupMeeting do - describe '#comments' do - let(:standup_meeting) { create(:standup_meeting) } - let(:yesterday_section) { 'yesterday_work_description' } - let(:today_section) { 'today_work_description' } + let(:standup_meeting) { create(:standup_meeting) } + let(:yesterday_section) { 'yesterday_work_description' } + let(:today_section) { 'today_work_description' } + describe '#comments' do before do create_list(:standup_meeting_comment, 2, standup_meeting:, name: yesterday_section) create_list(:standup_meeting_comment, 3, standup_meeting:, name: 'today_section') @@ -44,4 +44,16 @@ expect(comments.all? { |comment| comment.name == today_section }).to be false end end + + describe '#section_content' do + it 'returns the rich text content for the given section' do + content = standup_meeting.section_content(yesterday_section) + expect(content).to eq(standup_meeting.yesterday_work_description) + end + + it 'does not return content for other sections' do + content = standup_meeting.section_content(yesterday_section) + expect(content).not_to eq(standup_meeting.today_work_description) + end + end end From f178b4f74d43724bd56c9d86e2df3f5d5bb424f4 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 5 Dec 2023 10:37:06 -0800 Subject: [PATCH 29/40] Complete section_content specs for all sections --- spec/models/standup_meeting_spec.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spec/models/standup_meeting_spec.rb b/spec/models/standup_meeting_spec.rb index e3d2d609..d0045a01 100644 --- a/spec/models/standup_meeting_spec.rb +++ b/spec/models/standup_meeting_spec.rb @@ -46,11 +46,21 @@ end describe '#section_content' do - it 'returns the rich text content for the given section' do + it 'returns the rich text content for yesterday_work_description' do content = standup_meeting.section_content(yesterday_section) expect(content).to eq(standup_meeting.yesterday_work_description) end + it 'returns the rich text content for today_work_description' do + content = standup_meeting.section_content(today_section) + expect(content).to eq(standup_meeting.today_work_description) + end + + it 'returns the rich text content for blockers_description' do + content = standup_meeting.section_content('blockers_description') + expect(content).to eq(standup_meeting.blockers_description) + end + it 'does not return content for other sections' do content = standup_meeting.section_content(yesterday_section) expect(content).not_to eq(standup_meeting.today_work_description) From b6519f1689d7eec10753d57a226ab9cd7f8ef1ba Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Mon, 8 Jan 2024 15:01:04 -0800 Subject: [PATCH 30/40] Add policy to comment links --- app/controllers/standup_meeting_comments_controller.rb | 1 + app/policies/standup_meeting_comment_policy.rb | 8 +++++++- app/views/standup_meetings/sections/index.html.erb | 8 ++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index aea8a5ed..b5ab6fdc 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -1,5 +1,6 @@ class StandupMeetingCommentsController < ApplicationController before_action :set_standup_meeting, only: %i[create] + def edit; end def create diff --git a/app/policies/standup_meeting_comment_policy.rb b/app/policies/standup_meeting_comment_policy.rb index 161d0d29..eca51e20 100644 --- a/app/policies/standup_meeting_comment_policy.rb +++ b/app/policies/standup_meeting_comment_policy.rb @@ -1,6 +1,12 @@ class StandupMeetingCommentPolicy < ApplicationPolicy + alias_method :standup_meeting_comment, :record + def destroy? - user == record.user + user == standup_meeting_comment.user + end + + def edit? + user == standup_meeting_comment.user end class Scope < Scope diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 9dc4df13..763bde1a 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -17,8 +17,12 @@

-
Edit
-
<%= link_to 'Delete', standup_meeting_standup_meeting_comment_path(@standup_meeting, comment), method: :delete, data: { turbo_method: :delete } %>
+ <% if policy(comment).edit? %> +
Edit
+ <% end %> + <% if policy(comment).destroy? %> +
<%= link_to 'Delete', standup_meeting_standup_meeting_comment_path(@standup_meeting, comment), method: :delete, data: { turbo_method: :delete } %>
+ <% end %>
<% end %> From bb8e9684922232306d375483ebf8d20faf568fe3 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 9 Jan 2024 09:31:36 -0800 Subject: [PATCH 31/40] Add StandupMeetingCommentPolicy edit? spec --- spec/policies/standup_meeting_comment_policy_spec.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spec/policies/standup_meeting_comment_policy_spec.rb b/spec/policies/standup_meeting_comment_policy_spec.rb index f2bb298c..5fe92780 100644 --- a/spec/policies/standup_meeting_comment_policy_spec.rb +++ b/spec/policies/standup_meeting_comment_policy_spec.rb @@ -8,8 +8,14 @@ let(:not_owned_comment) { build(:standup_meeting_comment) } let(:authored_comment) { build(:standup_meeting_comment, user: member) } - permissions :update? do - pending "add some examples to (or delete) #{__FILE__}" + permissions :edit? do + it 'denies access if user is not author of comment' do + expect(subject).not_to permit(member, not_owned_comment) + end + + it 'grants access if user is author of comment' do + expect(subject).to permit(member, authored_comment) + end end permissions :destroy? do From df521613bcda26ed992ce74c3893d9326abf6014 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 16 Jan 2024 13:48:20 -0800 Subject: [PATCH 32/40] Re set migratioin --- db/schema.rb | 11 +---------- erd.pdf | Bin 49732 -> 49687 bytes 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index ad903462..44776992 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_12_04_183915) do +ActiveRecord::Schema[7.0].define(version: 2023_12_01_004804) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -204,14 +204,6 @@ t.index ["user_id"], name: "index_standup_meetings_on_user_id" end - create_table "text_reactions", force: :cascade do |t| - t.string "rich_text_id" - t.bigint "user_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["user_id"], name: "index_text_reactions_on_user_id" - end - create_table "user_mentee_application_cohorts", force: :cascade do |t| t.daterange "active_date_range", null: false t.boolean "active", default: true, null: false @@ -294,7 +286,6 @@ add_foreign_key "standup_meeting_comments", "users" add_foreign_key "standup_meetings", "standup_meeting_groups" add_foreign_key "standup_meetings", "users" - add_foreign_key "text_reactions", "users" add_foreign_key "user_mentee_applications", "user_mentee_application_cohorts" add_foreign_key "user_mentee_applications", "users" end diff --git a/erd.pdf b/erd.pdf index 7c0016e6d091b6feef6c338492f2e9907e385c68..97f6b3bbd65bf8af5888a2b0b0d74574f2a44ee5 100644 GIT binary patch delta 9948 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 From 3ab668e8d2f95cd3214264885fe19ac480525abb Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 16 Jan 2024 14:24:28 -0800 Subject: [PATCH 33/40] update standup_meeting_comments attribute name to sesction_name --- ...7185636_create_standup_meeting_comments.rb | 2 +- db/schema.rb | 2 +- erd.pdf | Bin 49687 -> 49736 bytes spec/factories/standup_meeting_comments.rb | 2 +- spec/models/standup_meeting_comment_spec.rb | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db/migrate/20231127185636_create_standup_meeting_comments.rb b/db/migrate/20231127185636_create_standup_meeting_comments.rb index 1514623b..9924a8c8 100644 --- a/db/migrate/20231127185636_create_standup_meeting_comments.rb +++ b/db/migrate/20231127185636_create_standup_meeting_comments.rb @@ -1,7 +1,7 @@ class CreateStandupMeetingComments < ActiveRecord::Migration[7.0] def change create_table :standup_meeting_comments do |t| - t.string :name + t.string :section_name, null: false t.references :standup_meeting, null: false, foreign_key: true t.timestamps diff --git a/db/schema.rb b/db/schema.rb index 44776992..123fba4a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -166,7 +166,7 @@ end create_table "standup_meeting_comments", force: :cascade do |t| - t.string "name" + t.string "section_name", null: false t.bigint "standup_meeting_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false diff --git a/erd.pdf b/erd.pdf index 97f6b3bbd65bf8af5888a2b0b0d74574f2a44ee5..8eff7a5da3d4511c034a1a00135befcea718fc09 100644 GIT binary patch delta 10003 zcmV+uC+yglgagQg1CULBeOr%QIdbOv`4#!70#<3>FAHOUmEkqkz%0D(9>0tS4RuO= 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.UM;JQi_0v=hcXYA_~~cNroOBdniYYWbFxb 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 delta 9981 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 HMNdWwXVGAR diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb index c7244793..8eeefff4 100644 --- a/spec/factories/standup_meeting_comments.rb +++ b/spec/factories/standup_meeting_comments.rb @@ -3,7 +3,7 @@ # Table name: standup_meeting_comments # # id :bigint not null, primary key -# name :string +# section_name :string not null # created_at :datetime not null # updated_at :datetime not null # standup_meeting_id :bigint not null diff --git a/spec/models/standup_meeting_comment_spec.rb b/spec/models/standup_meeting_comment_spec.rb index 832a5437..1ea3bbca 100644 --- a/spec/models/standup_meeting_comment_spec.rb +++ b/spec/models/standup_meeting_comment_spec.rb @@ -3,7 +3,7 @@ # Table name: standup_meeting_comments # # id :bigint not null, primary key -# name :string +# section_name :string not null # created_at :datetime not null # updated_at :datetime not null # standup_meeting_id :bigint not null From fe4d9c59d7c6a56b9491a9d6d687be506cc046d9 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 16 Jan 2024 15:26:58 -0800 Subject: [PATCH 34/40] Update specs to reflect latest migration --- spec/factories/standup_meeting_comments.rb | 2 +- spec/models/standup_meeting_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/factories/standup_meeting_comments.rb b/spec/factories/standup_meeting_comments.rb index 8eeefff4..3c4e28c3 100644 --- a/spec/factories/standup_meeting_comments.rb +++ b/spec/factories/standup_meeting_comments.rb @@ -21,7 +21,7 @@ # FactoryBot.define do factory :standup_meeting_comment do - name { 'MyString' } + section_name { 'MyString' } standup_meeting user end diff --git a/spec/models/standup_meeting_spec.rb b/spec/models/standup_meeting_spec.rb index d0045a01..feb4e724 100644 --- a/spec/models/standup_meeting_spec.rb +++ b/spec/models/standup_meeting_spec.rb @@ -29,19 +29,19 @@ describe '#comments' do before do - create_list(:standup_meeting_comment, 2, standup_meeting:, name: yesterday_section) - create_list(:standup_meeting_comment, 3, standup_meeting:, name: 'today_section') + create_list(:standup_meeting_comment, 2, standup_meeting:, section_name: yesterday_section) + create_list(:standup_meeting_comment, 3, standup_meeting:, section_name: 'today_section') end it 'returns the comments for the given section' do comments = standup_meeting.comments(yesterday_section) expect(comments.count).to eq(2) - expect(comments.all? { |comment| comment.name == yesterday_section }).to be true + expect(comments.all? { |comment| comment.section_name == yesterday_section }).to be true end it 'does not return comments for other sections' do comments = standup_meeting.comments(yesterday_section) - expect(comments.all? { |comment| comment.name == today_section }).to be false + expect(comments.all? { |comment| comment.section_name == today_section }).to be false end end From 4f928a0a4c7113d9b528f8c9d557c7c64884c0c2 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Tue, 16 Jan 2024 15:34:11 -0800 Subject: [PATCH 35/40] Address PR feedback --- app/controllers/standup_meetings/sections_controller.rb | 8 +++++++- app/models/standup_meeting.rb | 8 +++++++- .../edit.html.tailwindcss_spec.rb | 5 ----- 3 files changed, 14 insertions(+), 7 deletions(-) delete mode 100644 spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb diff --git a/app/controllers/standup_meetings/sections_controller.rb b/app/controllers/standup_meetings/sections_controller.rb index 44574977..77fc3db6 100644 --- a/app/controllers/standup_meetings/sections_controller.rb +++ b/app/controllers/standup_meetings/sections_controller.rb @@ -2,6 +2,12 @@ class StandupMeetings::SectionsController < ApplicationController def index @standup_meeting = StandupMeeting.find(params[:standup_meeting_id]) @section = params[:section] - @question = @standup_meeting.send(@section) + + if @standup_meeting.allowed_section?(@section) + @question = @standup_meeting.send(@section) + else + flash[:alert] = 'Invalid section' + redirect_to standup_meeting_group_standup_meetings_path(@standup_meeting.group) + end end end diff --git a/app/models/standup_meeting.rb b/app/models/standup_meeting.rb index 72edefbe..5bcf3d12 100644 --- a/app/models/standup_meeting.rb +++ b/app/models/standup_meeting.rb @@ -36,6 +36,8 @@ class StandupMeeting < ApplicationRecord validates :meeting_date, presence: true + ALLOWED_SECTIONS = %w[yesterday_work_description today_work_description blockers_description].freeze + enum status: { draft: 0, completed: 1, @@ -46,7 +48,7 @@ class StandupMeeting < ApplicationRecord scope :for_member, ->(user, group) { where(user:, standup_meeting_group: group) } def comments(section) - standup_meeting_comments.where(name: section) + standup_meeting_comments.where(section_name: section) end def section_content(section) @@ -59,4 +61,8 @@ def section_content(section) blockers_description end end + + def allowed_section?(secion_name) + ALLOWED_SECTIONS.include?(secion_name) + end end diff --git a/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb b/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb deleted file mode 100644 index 30db15f7..00000000 --- a/spec/views/standup_meeting_comments/edit.html.tailwindcss_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'rails_helper' - -RSpec.describe 'standup_meeting_comments/edit.html.tailwindcss' do - pending "add some examples to (or delete) #{__FILE__}" -end From de4903dcd167e99415792e478e59da05c61095ca Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 19 Jan 2024 09:21:00 -0800 Subject: [PATCH 36/40] update branch --- db/schema.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/db/schema.rb b/db/schema.rb index ee9c95a2..6727f471 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -175,6 +175,16 @@ t.index ["user_id"], name: "index_rich_text_reactions_on_user_id" end + create_table "standup_meeting_comments", force: :cascade do |t| + t.string "section_name", null: false + t.bigint "standup_meeting_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "user_id", null: false + t.index ["standup_meeting_id"], name: "index_standup_meeting_comments_on_standup_meeting_id" + t.index ["user_id"], name: "index_standup_meeting_comments_on_user_id" + end + create_table "standup_meeting_groups", force: :cascade do |t| t.string "name", null: false t.boolean "active", default: true, null: false @@ -284,6 +294,8 @@ add_foreign_key "resumes", "users" add_foreign_key "rich_text_reactions", "action_text_rich_texts", column: "rich_text_id" add_foreign_key "rich_text_reactions", "users" + add_foreign_key "standup_meeting_comments", "standup_meetings" + add_foreign_key "standup_meeting_comments", "users" add_foreign_key "standup_meetings", "standup_meeting_groups" add_foreign_key "standup_meetings", "users" add_foreign_key "user_mentee_applications", "user_mentee_application_cohorts" From 86ce39776dca54790fd727187bbba1d5a8790d36 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 19 Jan 2024 10:55:02 -0800 Subject: [PATCH 37/40] fixed content_type into an instance variable to fix failed tests in latest commit --- app/components/standup_meetings/update_component.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/standup_meetings/update_component.html.erb b/app/components/standup_meetings/update_component.html.erb index 0debc748..6d58b892 100644 --- a/app/components/standup_meetings/update_component.html.erb +++ b/app/components/standup_meetings/update_component.html.erb @@ -7,7 +7,7 @@ <%= tag.span(standup_content, class: "grow whitespace-pre-line") %> - <%= link_to standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: content_type), class: '' do %> + <%= link_to standup_meeting_sections_path(standup_meeting_id: @standup_meeting.id, section: @content_type), class: '' do %> Comments <% end %>
From 93e616514bf147b21e12254e5d28ee2b66baff02 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 19 Jan 2024 15:51:09 -0800 Subject: [PATCH 38/40] fixed bug caused by section_name variable changes --- .../standup_meeting_comments_controller.rb | 2 +- .../standup_meetings/sections/index.html.erb | 2 +- erd.pdf | Bin 50093 -> 50032 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/standup_meeting_comments_controller.rb b/app/controllers/standup_meeting_comments_controller.rb index b5ab6fdc..cb2314a4 100644 --- a/app/controllers/standup_meeting_comments_controller.rb +++ b/app/controllers/standup_meeting_comments_controller.rb @@ -34,6 +34,6 @@ def set_standup_meeting end def standup_meeting_comment_params - params.require(:standup_meeting_comment).permit(:content, :name, :standup_meeting_id) + params.require(:standup_meeting_comment).permit(:content, :section_name, :standup_meeting_id) end end diff --git a/app/views/standup_meetings/sections/index.html.erb b/app/views/standup_meetings/sections/index.html.erb index 763bde1a..1c1b88b8 100644 --- a/app/views/standup_meetings/sections/index.html.erb +++ b/app/views/standup_meetings/sections/index.html.erb @@ -30,7 +30,7 @@
Add a comment
<%= form_with model:[@standup_meeting, StandupMeetingComment.new], html: { class: 'border rounded-lg mt-4 p-2' } do |f| %> - <%= f.hidden_field :name, value: @section %> + <%= f.hidden_field :section_name, value: @section %>
<%= f.rich_text_area :content, class:"textarea textarea-bordered" %> diff --git a/erd.pdf b/erd.pdf index f41a7255f00b929a85ded8abfee2eab48783686a..ef874ec78d72bc31cbfab9a6f8c8405d9e777cb2 100644 GIT binary patch delta 10297 zcmZ9yWm6mq6K>1k5L|5Zv8^2hKiko%`kfgs$r9 zUhCy`0B+G^SfO6d_;Py!+HL;Dp*=-xL3(87_-$_a%G^vPlOvwveBUje)zDQg1F9{ywg88kV5}GU+!KT zMhvxyD6sbC76V7W_PBL;Gs~KcsK{BMkCK)keGeO2MPJ;8_}=Ra;v;xHzh<4r&3;^7 zbu`Wz&MUoKymcMluElxGmiRq>eti!ZAiMf__}iDCQ9b?f;qegGhrj3X!n%o2(c$?R zO4NIthwjkY=R~!X$x>_kW<&F=qKB-=+sn+tT~a_Q zCUd!mhpO<~tD>!hT*R+WgUa{q_fHX3xgguXOr;0VI^OPDUHK#6hf11Wuh^-GHGk-X z*VTo9U zMMD(iWUS7DDs%07vjr9OGL>7(r$}6Yn-AM_24YG0H$pBz7(sZWPx1h1ithD3N$&@; z2vg>B})kUN#$F}%{kb51|CpQK*>=&iDGG!D{6Z@BF zT&2MX=R=wSQA2#z>t@{#^LRh3DR(6{ zjK)MS9D`wx<5CYty)z`ESN-K{BI7EMBeHceidAhm!jc<3j><2%lDpuy;Gta7)YbJN zQ+$Ve6;P$n^g+6;xrpRekX0Uh39W2GV2e0(vMIrgwgW1MOzFB=!J72rrs?mb^h8Bt z8n5G6T|}}2?h!WFDiBQG$c;xyNNu7cc`QK6pn+4w36?dw4 zu0-76&42-r%!*&~aCVUP^}c1|a#uT~>~oe*M*tZPXc7^l^Sn{L32H-_&T4YM;87Y= zxb7eBUxzU%%{i(-OH^bZ&Ry_p9?S3IK%%woFN4nTROZTjjUdP2rO$x{^nT0ufvbsU z^PoGfSc)UPyQ+7nSh~cJ;UT#j+E}h|6whGh`hnT$((I`1OohRb2t!0T?CA2P;if-`Td;m13=K;r#7>ID zQcB`{rRpX2@&aGd-?%+Bru4J21*Jo2ivL9S_~T}?+5X8CIkYYI%kFq;yqC_rR(;$` z6fJNp91SWcY0_fkuUtZ_Nv#M>a$(739ytTJh9o{49|GcIr9|n?hI@D zm5?Hg{>$G)7^}p1EKKd!Rh!B99+dVw5s)d%u!DKg%BNkM$F^lD<$dhYk9U#xbKHzb zbxU;jJ{vVzUH}+ko5RlvY{pXiWQnU_dm($a$_y|{1nZ0O2*y14p&RC@vGEMjue{7) z#Fp%~i+A2lKAub6K2r<9Y=zm6iiBNCxd>-+eV&(Gw1@=RgtUgF40t2Ja;xx%&do;3(aJ<-;~gb? zTGSrBJf;)B-XGLnpRlb-^IoSQo4cN;&DgiL_MOlGe_l%6u{;s`n)8MH$6DTNJ*-TY z+qgo%4W+iGlwL{oL-1FS|IEw=TshP?;VR^kE(U_Rw!6Y5%(X}p4sxn=0CrpE&^jM4 zU`g7Fq{R;sPR>A9=X#8~qg%ya4*12#X?zwj&oH7&KSgVrov{gQ$UonUe42F*yxQX#3JS(GOMSp*na<22Bi?f4$I?cH&E-RYZr`4Qn;zISP|9U zEFcTCLwFA8rUeRkq5P^pm6L08Ml7?9EMw&Zc7i5;2D^thJr^-De!pvDIY1G*dR&3(LZtrdI`!a8;;Fw*gAz{ z!1g$#I4WapHVvaeMclex-YIsQKzvd0I>N4}=4W`1H#qbuJPLC;=4qC%$EwJNr{GR3 z?;m7pU^{V&REXiL~O@^niq@O!w`TvfVl)^kxjt%cNkKh zg8aXV_NOkk79Z%1g6yTsi7Y(c_Q`t6`Z}{PC|5VA9IN6EaL;ZnkCY&Ph#vc)_3us` z%NdB7PNW6mc%o!WnB*i`^Elt znOt_ub|FIcXzmjA3^LeKzXFROHi$fTxdphVTscJ6UBF=sx-)j~KuNcU`6hLPRv&hH zG3MyQRF1Et*!179icrSrU}7TBR48kLM?9N(9=v?h1si-Q2F2c}F$6#SpSR52LH?pH zxqjULZu8Nuln`M12N97$6*MUlcQO(-)3xe*uhlaQW=TTXc-WYgcp5tp`2XfOTC5)c z{_htasftu#VsY`tKz%Bw)9esu0@O(A>md~XcoqBgn!5;mIM--hsR(_knMtnwjtQs= zi-9{gLVz!JLE>G4x6sK+BL|k{|G*>})T$B;a))=a8I=pG;B%u}MmEtDiL;?=J&Rya zJFQjzk^klgvKQhcf~>nX7dcoTe$EP1qi-;KeVt)BdT=kexoCJGN=&5q_ax(+ zK;aRPt}V2k%dR-8W_upZvQ}q&wTY@)Mr+W0vnp|PNV^cV+)f1{n#E#OE<%_hx3$t>4O(rSUpQ4aAPda-(TEC#M!ART4k?+YSG<(ZrdaUbo1j?D*p<#CV zs-(RN<>N8uKs)WQ`d5f|@(@#{F;t*n5EyTwI929XXfROyfz5`(k|43r9VUge`UY{q zf|TJ7RA!=T2GqyZJEtYHX9xV!B6fmgkUfJlUiNDJ^bEe%oqx0P89|o=eJ2UV=~Kqb^s{e5RH*?0SY<)e>==N#k2zF z7@K`&$}eZE#T;NC_UNr~{PNF}cgCGi`3}{2D;fQnG0$AKJj>Q9@A|sbWq7v^r!Ijp zcHadOW7>e&hrE&# zgG~YB*OR0)`g>=5J7AX9#Qr;uMB_2@bG?5(dqmCC`60I0&xWI823@V7&uV*n8xB!f z0!>#m2oaP4_Sbd5e*)X=(ZTfp2`uFQ8Z5Y(GaRi!_lckmp3XBSUX?|HXtHHQ{Z!4H z`GKg+nD>)IH-#!IHZaEN%humI`)beac4b56NA*FC<7KlG7|_ z-usVlWST}_&k<4$*&QB_(Zy*sEe&++>XBVH_w?6$)7KAX=ys7qTz0<6C?k_E+q0hE zPbOs6)3zRaHo^rtxY{Paf424gQbn_cmy^J>qD9IR){r;Ph#gwaCu$pE=VJQIGL$xkt7}jLk|+YT6=p z&B$E%?AxYD5KCj$Ru&e`#PZC)6;ZJ=(K_gQE|~dOv>iA`WLLNYl5{tuH&m$dg=F zD|UO4vK9GOW4tH`rh-t%Sr7sYus3ARDB2SiJ05g9cDem+`BCi+fo_N6kiRjVi=r3* zkb)~ZJ1%~mQ?G{+R!o^*o|Ex&aubzm|87vJ(vN+f6{z|nRCbXs;&ECK+u;3qW-c=G zg73t9*?4_@x%1P@<5EIZw04jcsP0Kb$?O$Ix*?m ztp{p~@&(M&{ZB@WoI;(#6D=dIRpKE?c)tnAYfZi2wFb4VvG!iOs+TXNu&P!>S)mvr zY<1Ji;5)-t4)iTQke}|{?|P+j>^f(s-q>K}`h7apar%V8+Kn7?1T+4&Q%N00$<7&Ideup*~^!3Q>mno?s`NEL6C3}JvV z_qiGACf!-T9qv9P{M7O%af9)XsX|21XU;|30i@f)Rj9#X9!uq%&jL!UZ4P(4GbYvG zn(|TGPo4SJNqDhpc}dhcS|t zw_v%^=RgMTWZBlHyx* zW`Wb7Pv945X!hUo7MbHUYSc$)RRH!nhQp`uQOByuhJ8A=#*0~`~re-wfa$#SI&IA!**EKm6sYtkH+*;eEVYHL}RT;qp8 zCCxs9KjOuIm|b;l_-%&Do{@|_xx;o@#!54b(~J^42si!7rz*sEa2@(&4l7MgNiO~~ zX$lGRHX7OZ!~f+?S#Jk@QJ1`)5IUf)nhj24xWD6;`;S>#xd&bh4Y!dIh}7=bDR)G{ zDbD9|V%@%9n3!czZw3^20BDN3Resi3YVW${1Nq<6OJhHI-MzsxNcx2r>Q^sjGXqHi za^%^K@dzxQGufeqccK}d?r~UPYV~LLIU#&qrl&@6bS7kwdKQ_8_($B?wgt*RljvXw z4XKJ#@8?Ecez0r2CL4bFH%kB87ZD`w5Ydd$`30;??fg@(F5upx_uYQDz46a)=t79C z^FZ~CT;PSEwjMq!JgCHAt9xVUhriwWTDCI&yv;1lZJbXmgZHw2(VM5W$W6^$epX3B zi@;tvsfFCZlAP}C;6pYm?7rGOr<^NvtkSHzaIy2kO6@lR=kVf~h@fJWXD3G_F$`VD z8Jby|K^b{btmGhWllC5a+(InqOAsVeSW<~+&3v;TumoLfy`4o*-hLkK#Wt01s>%m0EK!Sb>C7A!&Ikfa&a>BC4 zTB|42ISRf&!u)7Xn9|&@HLBnK->UdWp~SF+f5p?`C+D!7sNPdipm@Q{vPvZ>=QyFb z?{Nxz8myZ`R0)>gh2+I0qN%zO2(&&sD@Y56hT@bZpEYVsQ_9rhg0J%UUN(_@Vd?VsoD-o##&~*x&aO82H?EsN|J@=5o5F>EPMQ z>?~5a+jsGp`tChX`A6y>>tf@1R^K#~*uS-H5fe0oB;6I6Th@~};@aUbL|RL+;Q>lo z+`vIZ_|o_-G6u_si;C@WLD0|O7oy5T53=9v(GOh35a+;@OqJJr1uViNN%zJyu__f(}Pkoy+ILr zAm;`L@5)qmQsavAT&i$`b3wa$)uJl zGE)SiKn-IV=eG1e(79@eeJyz1lDzDOCWHi1l|!HLotu%6u-lf1*DrX{obqwLl|at` zbvDy9r}Mt|wW>dtb;*Qa)lyj4beT(~$mX`}h50pNpCGY%NU!J5*Y&-B*lHjqThE_6 z`w0IEjylnA#M@N=$>7Mr%DhW{< z4ySqrX7c{Lm1!43{5hjeMG}*o>^katRXyR!QfqqEvvNDWtm(R*BjL;nAGbIbU3i~+ z2qJ&3?}x`6A&d;XRoS->)o8epNk^vSoRoq4ue<>Re3Z6 zpr#b9Nx!cKtfMBeI>JQvaXb176mt-|aFa6#__zxb5JY%Xn{Mu#GN&_LB|p!SQ^f+m^VA4HPkQiHjqMbz6B) z_x$zPV=toz8gF*fkWaJ1R1)$pp30!(0od!0^Rw%gWJg06%%086s4e0nf!-L!vi<5dul+@7WW9@e6Z0mS?xS@S zw`NMs5A`L}qqEo^fPXytJYuPvp@4PyT$8quD=f3gBa1#3ZSKjLH(OOof9WxiG5?RJ zbgWW==l$W-1~U&G;-Q9$(X)qxXryL+MKl1~mQBZuX-;6?dIlG|IfQ#`#>DC!uE+dc z4s;!Q`N3ogOgA*bDDJDz|5tzwt2G^tb@p~}JnB?(b4V~TBUt}Jo%nBQ&ozTzDZ=H_ z;oMEjv3#r1m#X9J1LV1coqiNAk`>d{$J6LMZD;E`D1x;Q86%M4b#I&L63D+zYHLp1 zrDuACj_4YOTl{+u^yqpae&zi=Ejy`jG;e>;y@J%&ef6zfe<|HYgR@t}7rBNZmD$&U zuMa7p7^A3({a;LXPXD!}FaKjnR6fhNLPc80!XZjU>D6yY}PdRm+@zv`ln-y{}? z@3WilGe;US*88Lzq#1<4Gh^@BybcG>PAG03T%#^zHx^RQl+aVt33*LN7y6kWq-ud7 zixdkLEN5&aT&k41zTtt?mBYR&Lo?<6zo8;uFp)4?PsXu4 z0l=@YkkINi#(C6fT(S)<&w!<9m{Eb|cNb=paDU17C_YA*K%^wbDHb|;uy~mbDuP@T zGx^Ucq&;=aIv3hAnFE2L1K@^nv|fXXKI-f|g*FrHqb4wK!SeXH>sm#oVHP1iy{Jf2 zcknRKlT4XGTb!0v4HV8WJUDk3{k~E|sfsKPnXF+_>n{8+9sSK4S>UNpQBa|kFDFm0 zIS1>kRS}^<;S~(-&+<;~_5W%#)3mb;W=qf|$87)djuw8r$hwGSlU9mwfSX_AJUq4`El(+sRtVcDJ6;PcHk5xK&thjnX$R zH@%B!`8sVSzj%kxHaM-AUr=(G=F_mm?iv|XTlOC4gqCIYZQO3+z+W&w0zcWg0XiT> z6dRwhp>t>2NXOu0&eScVpJl?oWuHF_g4SB6Wh%OiX|d)J!E53sTN|EJMRJ8Ze7a+Q z;FCixBo4i*g?~-KRfLVIIR_)+9``I496`^QeX}maBg{v=2gPPGX}JSxmo(!di@=zf z5X(bsre5EnH>oG%8-6*z$($dfCZ)@ZLFskr{%eEiHqMlDZcIgy6_pqkYtV59nKL{# zFsG~a~EMzvl5CXrK!Eh0%KGPIM*bUvCB5j#IX2R1@)wbtgqam4AoFU_3 zD?R62%yOj0W{4H5Aecw;e0xa@aqqJ3ph3XxqnaU*<){3ueIeGXGKx9Gb7*sfXwpSO zA)g$?N$P50fIWn$Or!FI$lxEbhFABXS_0Ln**=wUUfj!HoB<#h zKuQ1A1#0@g90CRVG$#x>7YzpuQo8WFGd|mchT7^-h$>;vBmUJ*_SE314|YL?A(iX+$KZa^LUvcGn!Z3!rdqd9JxD&H6OFu1h4(f)NH$=Zd-o%A!@>T&O~<=J0wd_;&q%i9+OusPCEuZ!-uhI)Y?*u@<&t#(Z-%MDXBdk?7%rH%$+OQcAY8ASs0{$gQu)xXEX+qb4&h%O7K zm^IvrHLHkVL8GTx5{Rlc0DT%qPcdZ8$S;q@3GZ5QmyIu>Tbwb+R$tFA*BPRqe~0P- zsrxMfC<_5=7VE+IOVR>VCX{1&5&xA&LGeqPq^bmf^OdxENX zz*DLnDQC$VEXRhmI?&>mdl@nTB#MS?5fQ7W%L3Y_Vfb!{aL?_ix5`f&-Dj&r%=#$Bti_SCf_K#XleZRk5sc#V%h| z9*;Hd3OOI+V?yJDfouOn)w~MUR{o1 z{A2GfnZyL1?~iGkYb89>rp|Ap@epv$mF+2_a}TDxdGtLuK9k%%ZL7DrJ$uOe@?cOL z+D8xKIV0-m;&slz6JUE8?j(AG%-NGFtH>c8(K#gl`Igq%x> z^iIWRxET~Kg%qvjhfN0Hl?UK;A%JY+Y=Ev&`gkgdm%-!Q;UB@rrIrkBA3E68Xf|)B zHwXV8bhf1snW&{7eu?B%>!G&48xh>mT}E4l6UW z8tfb|Dn_VJeLAwD%;=zLYa_9MgIY7M8fDgw^a!zjaprR}oVEwLF`IwWACpVx=lQY~ z=n}biK35^u2{`7w!3pY8YWE8bqMTxlLVGBR{7+z*x5!(mSI7(2)ur?Y-DQ@HOsudu zqD*lgISNtUG{!@Bsp*b(z_3;<`ot2hatHa#IIK=3s1AucRVj6vZE<@r>)TFw_#&pz z=$H)!K40d9u*^7_iALWanYI607MXrz?B GBmW;6=i4Lz delta 10362 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 From dca22a93aab52d45fd31fb89a728572149189259 Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 19 Jan 2024 16:14:39 -0800 Subject: [PATCH 39/40] Added spec for the allowed_section method --- spec/models/standup_meeting_spec.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/models/standup_meeting_spec.rb b/spec/models/standup_meeting_spec.rb index feb4e724..f56fe661 100644 --- a/spec/models/standup_meeting_spec.rb +++ b/spec/models/standup_meeting_spec.rb @@ -66,4 +66,14 @@ expect(content).not_to eq(standup_meeting.today_work_description) end end + + describe '#allowed_section?' do + it 'returns true for allowed section' do + expect(standup_meeting.allowed_section?(yesterday_section)).to be true + end + + it 'returns false for disallowed section' do + expect(standup_meeting.allowed_section?('invalid_section')).to be false + end + end end From 12c8a346bbc750b234b6960aaa4ecc178767ea1e Mon Sep 17 00:00:00 2001 From: Gustavo Valenzuela Date: Fri, 19 Jan 2024 16:20:58 -0800 Subject: [PATCH 40/40] remove uneeded scope --- app/policies/standup_meeting_comment_policy.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/policies/standup_meeting_comment_policy.rb b/app/policies/standup_meeting_comment_policy.rb index eca51e20..0dac9d72 100644 --- a/app/policies/standup_meeting_comment_policy.rb +++ b/app/policies/standup_meeting_comment_policy.rb @@ -8,10 +8,4 @@ def destroy? def edit? user == standup_meeting_comment.user end - - class Scope < Scope - def resolve - scope.all - end - end end