refactored a couple of things based on feedback

This commit is contained in:
James Lopez 2016-11-21 14:09:26 +01:00
parent d747c1c0f9
commit 9b69168858
10 changed files with 19 additions and 25 deletions

View File

@ -6,7 +6,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
before_action :authorize_read_cycle_analytics! before_action :authorize_read_cycle_analytics!
def show 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| respond_to do |format|
format.html format.html
@ -55,7 +55,7 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
{ {
summary: summary, summary: summary,
stats: stats, stats: stats,
permissions: @cycle_analytics.permissions permissions: @cycle_analytics.permissions(user: current_user)
} }
end end
end end

View File

@ -1,10 +1,9 @@
class CycleAnalytics class CycleAnalytics
STAGES = %i[issue plan code test review staging production].freeze STAGES = %i[issue plan code test review staging production].freeze
def initialize(project, from:, user:) def initialize(project, from:)
@project = project @project = project
@from = from @from = from
@user = user
@fetcher = Gitlab::CycleAnalytics::MetricsFetcher.new(project: project, from: from, branch: nil) @fetcher = Gitlab::CycleAnalytics::MetricsFetcher.new(project: project, from: from, branch: nil)
end end
@ -12,8 +11,8 @@ class CycleAnalytics
@summary ||= Summary.new(@project, from: @from) @summary ||= Summary.new(@project, from: @from)
end end
def permissions def permissions(user:)
Gitlab::CycleAnalytics::Permissions.get(user: @user, project: @project) Gitlab::CycleAnalytics::Permissions.get(user: user, project: @project)
end end
def issue def issue

View File

@ -2,9 +2,12 @@ module Gitlab
module CycleAnalytics module CycleAnalytics
class Permissions class Permissions
STAGE_PERMISSIONS = { STAGE_PERMISSIONS = {
read_build: [:test, :staging], issue: :read_issue,
read_issue: [:issue, :production], code: :read_merge_request,
read_merge_request: [:code, :review] test: :read_build,
review: :read_merge_request,
staging: :read_build,
production: :read_issue,
}.freeze }.freeze
def self.get(*args) def self.get(*args)
@ -30,15 +33,7 @@ module Gitlab
def authorized_stage?(stage) def authorized_stage?(stage)
return false unless authorize_project(:read_cycle_analytics) return false unless authorize_project(:read_cycle_analytics)
permissions_for_stage(stage).keys.each do |permission| STAGE_PERMISSIONS[stage] ? authorize_project(STAGE_PERMISSIONS[stage]) : true
return false unless authorize_project(permission)
end
true
end
def permissions_for_stage(stage)
STAGE_PERMISSIONS.select { |_permission, stages| stages.include?(stage) }
end end
def authorize_project(permission) def authorize_project(permission)

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#code', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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 context 'with deployment' do
generate_cycle_analytics_spec( generate_cycle_analytics_spec(

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#issue', models: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :issue, phase: :issue,

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#plan', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :plan, phase: :plan,

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#production', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :production, phase: :production,

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#review', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :review, phase: :review,

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#staging', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :staging, phase: :staging,

View File

@ -6,7 +6,7 @@ describe 'CycleAnalytics#test', feature: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:from_date) { 10.days.ago } let(:from_date) { 10.days.ago }
let(:user) { create(:user, :admin) } 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( generate_cycle_analytics_spec(
phase: :test, phase: :test,