1# frozen_string_literal: true 2 3module Analytics 4 module CycleAnalytics 5 class ProjectLevel 6 attr_reader :project, :options 7 8 def initialize(project:, options:) 9 @project = project 10 @options = options.merge(project: project) 11 end 12 13 def summary 14 @summary ||= ::Gitlab::CycleAnalytics::StageSummary.new(project, 15 options: options, 16 current_user: options[:current_user]).data 17 end 18 19 def permissions(user:) 20 Gitlab::CycleAnalytics::Permissions.get(user: user, project: project) 21 end 22 23 def stats 24 @stats ||= default_stage_names.map do |stage_name| 25 self[stage_name].as_json 26 end 27 end 28 29 def [](stage_name) 30 ::CycleAnalytics::ProjectLevelStageAdapter.new(build_stage(stage_name), options) 31 end 32 33 private 34 35 def build_stage(stage_name) 36 stage_params = stage_params_by_name(stage_name).merge(project: project) 37 Analytics::CycleAnalytics::ProjectStage.new(stage_params) 38 end 39 40 def stage_params_by_name(name) 41 Gitlab::Analytics::CycleAnalytics::DefaultStages.find_by_name!(name) 42 end 43 44 def default_stage_names 45 Gitlab::Analytics::CycleAnalytics::DefaultStages.symbolized_stage_names 46 end 47 end 48 end 49end 50Analytics::CycleAnalytics::ProjectLevel.prepend_mod_with('Analytics::CycleAnalytics::ProjectLevel') 51