refactored a couple of things based on feedback
This commit is contained in:
parent
d747c1c0f9
commit
9b69168858
10 changed files with 19 additions and 25 deletions
|
@ -6,7 +6,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
|
|||
before_action :authorize_read_cycle_analytics!
|
||||
|
||||
def show
|
||||
@cycle_analytics = ::CycleAnalytics.new(@project, from: start_date(cycle_analytics_params), user: current_user)
|
||||
@cycle_analytics = ::CycleAnalytics.new(@project, from: start_date(cycle_analytics_params))
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
|
@ -55,7 +55,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
|
|||
{
|
||||
summary: summary,
|
||||
stats: stats,
|
||||
permissions: @cycle_analytics.permissions
|
||||
permissions: @cycle_analytics.permissions(user: current_user)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
class CycleAnalytics
|
||||
STAGES = %i[issue plan code test review staging production].freeze
|
||||
|
||||
def initialize(project, from:, user:)
|
||||
def initialize(project, from:)
|
||||
@project = project
|
||||
@from = from
|
||||
@user = user
|
||||
@fetcher = Gitlab::CycleAnalytics::MetricsFetcher.new(project: project, from: from, branch: nil)
|
||||
end
|
||||
|
||||
|
@ -12,8 +11,8 @@ class CycleAnalytics
|
|||
@summary ||= Summary.new(@project, from: @from)
|
||||
end
|
||||
|
||||
def permissions
|
||||
Gitlab::CycleAnalytics::Permissions.get(user: @user, project: @project)
|
||||
def permissions(user:)
|
||||
Gitlab::CycleAnalytics::Permissions.get(user: user, project: @project)
|
||||
end
|
||||
|
||||
def issue
|
||||
|
|
|
@ -2,9 +2,12 @@ module Gitlab
|
|||
module CycleAnalytics
|
||||
class Permissions
|
||||
STAGE_PERMISSIONS = {
|
||||
read_build: [:test, :staging],
|
||||
read_issue: [:issue, :production],
|
||||
read_merge_request: [:code, :review]
|
||||
issue: :read_issue,
|
||||
code: :read_merge_request,
|
||||
test: :read_build,
|
||||
review: :read_merge_request,
|
||||
staging: :read_build,
|
||||
production: :read_issue,
|
||||
}.freeze
|
||||
|
||||
def self.get(*args)
|
||||
|
@ -30,15 +33,7 @@ module Gitlab
|
|||
def authorized_stage?(stage)
|
||||
return false unless authorize_project(:read_cycle_analytics)
|
||||
|
||||
permissions_for_stage(stage).keys.each do |permission|
|
||||
return false unless authorize_project(permission)
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
def permissions_for_stage(stage)
|
||||
STAGE_PERMISSIONS.select { |_permission, stages| stages.include?(stage) }
|
||||
STAGE_PERMISSIONS[stage] ? authorize_project(STAGE_PERMISSIONS[stage]) : true
|
||||
end
|
||||
|
||||
def authorize_project(permission)
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#code', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
context 'with deployment' do
|
||||
generate_cycle_analytics_spec(
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#issue', models: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :issue,
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#plan', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :plan,
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#production', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :production,
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#review', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :review,
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#staging', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :staging,
|
||||
|
|
|
@ -6,7 +6,7 @@ describe 'CycleAnalytics#test', feature: true do
|
|||
let(:project) { create(:project) }
|
||||
let(:from_date) { 10.days.ago }
|
||||
let(:user) { create(:user, :admin) }
|
||||
subject { CycleAnalytics.new(project, from: from_date, user: user) }
|
||||
subject { CycleAnalytics.new(project, from: from_date) }
|
||||
|
||||
generate_cycle_analytics_spec(
|
||||
phase: :test,
|
||||
|
|
Loading…
Reference in a new issue