class GoodData::LCM2::AssociateClients

Constants

DELETE_MODES
DESCRIPTION
PARAMS
RESULT_HEADER

Public Class Methods

call(params) click to toggle source
# File lib/gooddata/lcm/actions/associate_clients.rb, line 57
def call(params)
  unless DELETE_MODES.include?(params.delete_mode) || params.delete_mode.nil?
    fail "The parameter \"delete_mode\" has to have one of the values #{DELETE_MODES.map(&:to_s).join(', ')} or has to be empty."
  end

  case params.delete_mode
  when 'delete_projects'
    delete_projects = true
    delete_extra = true
  when 'delete_extra'
    delete_projects = false
    delete_extra = true
  else
    # Usage of the depracated params
    delete_projects = GoodData::Helpers.to_boolean(params.delete_projects)
    delete_extra = GoodData::Helpers.to_boolean(params.delete_extra)
  end

  if delete_projects && !delete_extra
    GoodData.logger.warn("Parameter `delete_projects` is set to true and parameter `delete_extra` is set to false (which is default) this action will not delete anything!")
  end

  client = params.gdc_gd_client

  domain_name = params.organization || params.domain
  fail "Either organisation or domain has to be specified in params" unless domain_name
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
  data_product = params.data_product

  segments = {}

  params.clients.group_by { |data| data[:segment] }.each do |segment_name, clients|
    segment = domain.segments(segment_name, data_product)
    segments[segment_name] = segment
    (clients.map(&:id) - segment.clients.map(&:id)).each do |c|
      segment.create_client(id: c)
    end
  end

  params.clients.map! do |data|
    data[:data_product_id] = segments[data[:segment]].data_product.data_product_id
    data
  end

  domain.update_clients_settings(params.clients)
  options = { delete_projects: delete_projects }
  options.merge!(delete_extra_option(params, delete_extra)) if delete_extra

  results = domain.update_clients(params.clients, options)
  # Update status to CREATED if the client has no project
  results&.each do |r|
    r[:status] = 'CREATED' if r[:originalProject].nil?
    r[:project] = r[:originalProject]
  end
  results
end

Private Class Methods

delete_extra_option(params, delete_extra) click to toggle source
# File lib/gooddata/lcm/actions/associate_clients.rb, line 116
def delete_extra_option(params, delete_extra)
  if params.segments_filter && params.segments_filter.any?
    { delete_extra_in_segments: params.segments_filter }
  else
    { delete_extra: GoodData::Helpers.to_boolean(delete_extra) }
  end
end