summaryrefslogtreecommitdiff
path: root/app/controllers/concerns
diff options
context:
space:
mode:
authorHeinrich Lee Yu <heinrich@gitlab.com>2019-02-27 01:26:26 +0800
committerHeinrich Lee Yu <heinrich@gitlab.com>2019-03-13 20:33:35 +0800
commit7d5ee4181a63318dd3a981fef9c12ce93e732fdb (patch)
treefb2c05c6beee188c1cf73112d7e4f502e3c87d98 /app/controllers/concerns
parentf06a649ced952bcc439a5b3d36d96df178aabd66 (diff)
downloadgitlab-ce-7d5ee4181a63318dd3a981fef9c12ce93e732fdb.tar.gz
Refactor groups and projects boards actions
Move common functionality to BoardsActions concern
Diffstat (limited to 'app/controllers/concerns')
-rw-r--r--app/controllers/concerns/boards_actions.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/app/controllers/concerns/boards_actions.rb b/app/controllers/concerns/boards_actions.rb
new file mode 100644
index 00000000000..2cf0ba7c086
--- /dev/null
+++ b/app/controllers/concerns/boards_actions.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+module BoardsActions
+ include Gitlab::Utils::StrongMemoize
+ extend ActiveSupport::Concern
+
+ included do
+ include BoardsResponses
+
+ before_action :redirect_to_recent_board, only: :index
+ before_action :boards, only: :index
+ before_action :board, only: :show
+ end
+
+ def index
+ respond_with_boards
+ end
+
+ def show
+ # Add / update the board in the recent visits table
+ Boards::Visits::CreateService.new(parent, current_user).execute(board) if request.format.html?
+
+ respond_with_board
+ end
+
+ private
+
+ def redirect_to_recent_board
+ return if request.format.json?
+
+ if recently_visited = Boards::Visits::LatestService.new(board_parent, current_user).execute
+ board_path = case board_parent
+ when Project
+ namespace_project_board_path(id: recently_visited.board_id)
+ when Group
+ group_board_path(id: recently_visited.board_id)
+ end
+
+ redirect_to board_path
+ end
+ end
+
+ def boards
+ strong_memoize(:boards) do
+ Boards::ListService.new(parent, current_user).execute
+ end
+ end
+
+ def board
+ strong_memoize(:board) do
+ boards.find(params[:id])
+ end
+ end
+end