Class: GoodData::LCM2::CollectUsersBrickUsers

Inherits:
BaseAction show all
Defined in:
lib/gooddata/lcm/actions/collect_users_brick_users.rb

Constant Summary collapse

DESCRIPTION =
'Enriches parameters with users from the Users Brick input.'
PARAMS =
define_params(self) do
  description 'Input source of the Users Brick. Needed to prevent ' \
              'deletion of filters for a user that is to be removed.'
  param :users_brick_config, instance_of(Type::UsersBrickConfig), required: true

  description 'Column That Contains Target Project IDs'
  param :multiple_projects_column, instance_of(Type::StringType), required: true

  description 'Input Source'
  param :input_source, instance_of(Type::HashType), required: false

  description 'Synchronization Mode (e.g. sync_one_project_based_on_pid)'
  param :sync_mode, instance_of(Type::StringType), required: false, default: 'sync_project'
end
MULTIPLE_COLUMN_MODES =
%w(
  sync_domain_client_workspaces
  sync_multiple_projects_based_on_custom_id
  sync_multiple_projects_based_on_pid
)

Constants inherited from BaseAction

BaseAction::FAILED_CLIENTS, BaseAction::FAILED_PROJECTS, BaseAction::FAILED_SEGMENTS, BaseAction::SYNC_FAILED_LIST

Constants included from Dsl::Dsl

Dsl::Dsl::DEFAULT_OPTS, Dsl::Dsl::TYPES

Class Method Summary collapse

Methods inherited from BaseAction

add_failed_client, add_failed_project, add_failed_segment, add_new_clients_to_project_client_mapping, check_params, collect_synced_status, continue_on_error, print_result, process_failed_project, process_failed_projects, sync_failed_client, sync_failed_project, sync_failed_segment, without_check

Methods included from Dsl::Dsl

#define_params, #define_type, #process

Class Method Details

.call(params) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/gooddata/lcm/actions/collect_users_brick_users.rb', line 36

def call(params)
  users_brick_users = []
   = params.users_brick_config.&.downcase || 'login'
  users_brick_data_source = GoodData::Helpers::DataSource.new(params.users_brick_config.input_source)

  users_brick_data_source_file = without_check(PARAMS, params) do
    File.open(
      users_brick_data_source.realize(params),
      'r:UTF-8'
    )
  end
  CSV.foreach(users_brick_data_source_file,
              :headers => true,
              :return_headers => false,
              :header_converters => :downcase,
              :encoding => 'utf-8') do |row|
    pid = row[params.multiple_projects_column&.downcase]
    fail "The set multiple_projects_column '#{params.multiple_projects_column}' of the users input is empty" if !pid && MULTIPLE_COLUMN_MODES.include?(params.sync_mode)

    users_brick_users << {
      login: row[].nil? ? nil : row[].strip.downcase,
      pid: pid
    }
  end
  {
    # TODO; TMA-989 return the real results when print of results is fixed for large sets
    results: [{ status: 'ok' }],
    params: {
      users_brick_users: users_brick_users
    }
  }
end