diff options
author | Heinrich Lee Yu <heinrich@gitlab.com> | 2018-11-28 00:53:16 +0800 |
---|---|---|
committer | Heinrich Lee Yu <hleeyu@gmail.com> | 2018-12-19 17:58:53 +0800 |
commit | 9f9765485e998ece87660aa30a1b4339bb940d14 (patch) | |
tree | 0615fe12d0780847dee1c0dca8c0f0d59674048f /app/serializers | |
parent | 6c79e9307e116d6115f6d76ac796176952fb83cd (diff) | |
download | gitlab-ce-9f9765485e998ece87660aa30a1b4339bb940d14.tar.gz |
Refactor sidebar to use data from serializer
Diffstat (limited to 'app/serializers')
-rw-r--r-- | app/serializers/entity_date_helper.rb | 17 | ||||
-rw-r--r-- | app/serializers/issuable_sidebar_entity.rb | 103 | ||||
-rw-r--r-- | app/serializers/issuable_sidebar_todo_entity.rb | 11 | ||||
-rw-r--r-- | app/serializers/issue_serializer.rb | 6 | ||||
-rw-r--r-- | app/serializers/issue_sidebar_entity.rb | 5 | ||||
-rw-r--r-- | app/serializers/merge_request_serializer.rb | 6 | ||||
-rw-r--r-- | app/serializers/merge_request_sidebar_entity.rb | 7 |
7 files changed, 142 insertions, 13 deletions
diff --git a/app/serializers/entity_date_helper.rb b/app/serializers/entity_date_helper.rb index cc0c2abf863..87bba87a0ed 100644 --- a/app/serializers/entity_date_helper.rb +++ b/app/serializers/entity_date_helper.rb @@ -45,13 +45,16 @@ module EntityDateHelper # If due date is provided, it returns "# days|weeks|months remaining|ago" # If start date is provided and elapsed, with no due date, it returns "# days elapsed" def remaining_days_in_words(entity) - if entity.try(:expired?) + start_date = entity.try(:start_date) || entity.try(:[], :start_date) + due_date = entity.try(:due_date) || entity.try(:[], :due_date) + + if due_date && due_date.past? content_tag(:strong, 'Past due') - elsif entity.try(:upcoming?) + elsif start_date && start_date.future? content_tag(:strong, 'Upcoming') - elsif entity.due_date - is_upcoming = (entity.due_date - Date.today).to_i > 0 - time_ago = time_ago_in_words(entity.due_date) + elsif due_date + is_upcoming = (due_date - Date.today).to_i > 0 + time_ago = time_ago_in_words(due_date) # https://gitlab.com/gitlab-org/gitlab-ce/issues/49440 # @@ -63,8 +66,8 @@ module EntityDateHelper remaining_or_ago = is_upcoming ? _("remaining") : _("ago") "#{content} #{remaining_or_ago}".html_safe - elsif entity.start_date && entity.start_date.past? - days = entity.elapsed_days + elsif start_date && start_date.past? + days = (Date.today - start_date).to_i "#{content_tag(:strong, days)} #{'day'.pluralize(days)} elapsed".html_safe end end diff --git a/app/serializers/issuable_sidebar_entity.rb b/app/serializers/issuable_sidebar_entity.rb index 9af2276b362..11666049959 100644 --- a/app/serializers/issuable_sidebar_entity.rb +++ b/app/serializers/issuable_sidebar_entity.rb @@ -3,6 +3,109 @@ class IssuableSidebarEntity < Grape::Entity include RequestAwareEntity + with_options if: { include_basic: true } do + expose :id + expose :type do |issuable| + issuable.to_ability_name + end + expose :author_id + expose :project_id do |issuable| + issuable.project.id + end + expose :discussion_locked?, as: :discussion_locked + expose :reference do |issuable| + issuable.to_reference(issuable.project, full: true) + end + + expose :current_user, using: UserEntity do |issuable| + request.current_user + end + + # Relationships + expose :todo, using: IssuableSidebarTodoEntity do |issuable| + request.current_user.pending_todo_for(issuable) if request.current_user + end + expose :milestone, using: ::API::Entities::Milestone + expose :labels, using: LabelEntity + + # Permissions + expose :signed_in do |issuable| + request.current_user.present? + end + + expose :can_edit do |issuable| + can?(request.current_user, :"admin_#{issuable.to_ability_name}", issuable.project) + end + + expose :can_move do |issuable| + request.current_user && issuable.can_move?(request.current_user) + end + + expose :can_admin_label do |issuable| + can?(request.current_user, :admin_label, issuable.project) + end + + # Paths + expose :issuable_json_path do |issuable| + if issuable.is_a?(MergeRequest) + project_merge_request_path(issuable.project, issuable.iid, :json) + else + project_issue_path(issuable.project, issuable.iid, :json) + end + end + + expose :namespace_path do |issuable| + issuable.project.namespace.full_path + end + + expose :project_path do |issuable| + issuable.project.path + end + + expose :project_full_path do |issuable| + issuable.project.full_path + end + + expose :project_issuables_path do |issuable| + project = issuable.project + namespace = project.namespace + + if issuable.is_a?(MergeRequest) + namespace_project_merge_requests_path(namespace, project) + else + namespace_project_issues_path(namespace, project) + end + end + + expose :create_todo_path do |issuable| + project_todos_path(issuable.project) + end + + expose :project_milestones_path do |issuable| + project_milestones_path(issuable.project, :json) + end + + expose :project_labels_path do |issuable| + project_labels_path(issuable.project, :json, include_ancestor_groups: true) + end + + expose :toggle_subscription_path do |issuable| + toggle_subscription_path(issuable) + end + + expose :move_issue_path do |issuable| + move_namespace_project_issue_path( + namespace_id: issuable.project.namespace.to_param, + project_id: issuable.project, + id: issuable + ) + end + + expose :projects_autocomplete_path do |issuable| + autocomplete_projects_path(project_id: issuable.project.id) + end + end + with_options if: { include_extras: true } do include TimeTrackableEntity diff --git a/app/serializers/issuable_sidebar_todo_entity.rb b/app/serializers/issuable_sidebar_todo_entity.rb new file mode 100644 index 00000000000..b2c98433f05 --- /dev/null +++ b/app/serializers/issuable_sidebar_todo_entity.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class IssuableSidebarTodoEntity < Grape::Entity + include Gitlab::Routing + + expose :id + + expose :delete_path do |todo| + dashboard_todo_path(todo) if todo + end +end diff --git a/app/serializers/issue_serializer.rb b/app/serializers/issue_serializer.rb index cdb386b83b9..93625ff3afc 100644 --- a/app/serializers/issue_serializer.rb +++ b/app/serializers/issue_serializer.rb @@ -7,9 +7,9 @@ class IssueSerializer < BaseSerializer def represent(issue, opts = {}) entity = case opts[:serializer] - when 'sidebar_extras' - opts[:include_basic] = false - opts[:include_extras] = true + when 'sidebar', 'sidebar_extras' + opts[:include_basic] = (opts[:serializer] == 'sidebar') + opts[:include_extras] = (opts[:serializer] == 'sidebar_extras') IssueSidebarEntity when 'board' IssueBoardEntity diff --git a/app/serializers/issue_sidebar_entity.rb b/app/serializers/issue_sidebar_entity.rb index 1b73ead5cd7..d50e19ad046 100644 --- a/app/serializers/issue_sidebar_entity.rb +++ b/app/serializers/issue_sidebar_entity.rb @@ -1,6 +1,11 @@ # frozen_string_literal: true class IssueSidebarEntity < IssuableSidebarEntity + with_options if: { include_basic: true } do + expose :due_date + expose :confidential + end + with_options if: { include_extras: true } do expose :assignees, using: API::Entities::UserBasic end diff --git a/app/serializers/merge_request_serializer.rb b/app/serializers/merge_request_serializer.rb index e252d9a3501..4d236273d49 100644 --- a/app/serializers/merge_request_serializer.rb +++ b/app/serializers/merge_request_serializer.rb @@ -7,9 +7,9 @@ class MergeRequestSerializer < BaseSerializer def represent(merge_request, opts = {}) entity = case opts[:serializer] - when 'sidebar_extras' - opts[:include_basic] = false - opts[:include_extras] = true + when 'sidebar', 'sidebar_extras' + opts[:include_basic] = (opts[:serializer] == 'sidebar') + opts[:include_extras] = (opts[:serializer] == 'sidebar_extras') MergeRequestSidebarEntity when 'basic' MergeRequestBasicEntity diff --git a/app/serializers/merge_request_sidebar_entity.rb b/app/serializers/merge_request_sidebar_entity.rb index 70607230642..a861f2ea73b 100644 --- a/app/serializers/merge_request_sidebar_entity.rb +++ b/app/serializers/merge_request_sidebar_entity.rb @@ -1,4 +1,11 @@ # frozen_string_literal: true class MergeRequestSidebarEntity < IssuableSidebarEntity + with_options if: { include_basic: true } do + expose :assignee, using: API::Entities::UserBasic + + expose :can_merge do |issuable| + issuable.can_be_merged_by?(issuable.assignee) if issuable.assignee + end + end end |