class GoodData::LCM2::SynchronizeUserGroups

Constants

DESCRIPTION
PARAMS

Public Class Methods

call(params) click to toggle source
# File lib/gooddata/lcm/actions/synchronize_user_groups.rb, line 42
def call(params)
  results = ThreadSafe::Array.new
  collect_synced_status = collect_synced_status(params)
  failed_projects = ThreadSafe::Array.new

  client = params.gdc_gd_client
  development_client = params.development_client

  params.synchronize.peach do |info|
    from_project = info.from
    to_projects = info.to

    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

    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

      begin
        params.gdc_logger.info "Transferring User Groups, from project: '#{from.title}', PID: '#{from.pid}', to project: '#{to_project.title}', PID: '#{to_project.pid}'"
        results += GoodData::Project.transfer_user_groups(from, to_project)
      rescue StandardError => err
        process_failed_project(pid, err.message, failed_projects, collect_synced_status)
      end
    end
  end

  process_failed_projects(failed_projects, short_name, params) if collect_synced_status
  results.uniq
end