class GoodData::LCM2::SynchronizePPDashboardPermissions
Constants
- DESCRIPTION
- PARAMS
Public Class Methods
call(params)
click to toggle source
# File lib/gooddata/lcm/actions/synchronize_pp_dashboard_permission.rb, line 48 def call(params) results = [] disable_pp_dashboard_permission = GoodData::Helpers.to_boolean(params.disable_pp_dashboard_permission) collect_synced_status = collect_synced_status(params) failed_projects = ThreadSafe::Array.new if disable_pp_dashboard_permission params.gdc_logger.info "Skip synchronize Pixel Perfect dashboard permission." else client = params.gdc_gd_client development_client = params.development_client failed_projects = ThreadSafe::Array.new params.synchronize.peach do |info| from_project = info.from to_projects = info.to sync_success = false from = development_client.projects(from_project) unless from process_failed_project(from_project, "Invalid 'from' project specified - '#{from_project}'", failed_projects, collect_synced_status) next end source_dashboards = from.dashboards params.gdc_logger.info "Transferring Pixel Perfect Dashboard permission, from project: '#{from.title}', PID: '#{from.pid}' for dashboard(s): #{source_dashboards.map { |d| "#{d.title.inspect}" }.join(', ')}" # rubocop:disable Metrics/LineLength to_projects.peach do |entry| pid = entry[:pid] next if sync_failed_project(pid, params) to_project = client.projects(pid) unless to_project process_failed_project(pid, "Invalid 'to' project specified - '#{pid}'", failed_projects, collect_synced_status) next end target_dashboards = to_project.dashboards begin GoodData::Project.transfer_dashboard_permission(from, to_project, source_dashboards, target_dashboards) sync_success = true rescue StandardError => err process_failed_project(pid, err.message, failed_projects, collect_synced_status) end end results << { from_project_name: from.title, from_project_pid: from.pid, status: 'ok' } if sync_success end end process_failed_projects(failed_projects, short_name, params) if collect_synced_status results end