Class: GoodData::LCM2::MigrateGdcDateDimension
- Inherits:
-
BaseAction
show all
- Defined in:
- lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb
Constant Summary
collapse
- DESCRIPTION =
'Migrate Gdc Date Dimension'
- DATE_DIMENSION_CUSTOM_V2 =
'urn:custom_v2:date'
- DATE_DIMENSION_OLD =
%w[urn:gooddata:date urn:custom:date]
- PARAMS =
define_params(self) do
description 'Client Used for Connecting to GD'
param :gdc_gd_client, instance_of(Type::GdClientType), required: true
description 'Specifies how to synchronize LDM and resolve possible conflicts'
param :synchronize_ldm, instance_of(Type::SynchronizeLDM), required: false, default: 'diff_against_master_with_fallback'
description 'Synchronization Info'
param :synchronize, array_of(instance_of(Type::SynchronizationInfoType)), required: true, generated: true
end
%i[from to status]
Constants included
from Dsl::Dsl
Dsl::Dsl::DEFAULT_OPTS, Dsl::Dsl::TYPES
Class Method Summary
collapse
Methods inherited from BaseAction
check_params, without_check
Methods included from Dsl::Dsl
#define_params, #define_type, #process
Class Method Details
.call(params) ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 27
def call(params)
results = []
params.synchronize.map do |segment_info|
result = migrate_date_dimension(params, segment_info)
results.concat(result)
end
{
results: results
}
end
|
.contain_v2?(blueprint) ⇒ Boolean
103
104
105
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 103
def contain_v2?(blueprint)
get_date_dimensions(blueprint).any? { |e| e[:urn] == DATE_DIMENSION_CUSTOM_V2 }
end
|
.get_date_dimension(blueprint, id) ⇒ Object
.get_date_dimensions(blueprint) ⇒ Object
.get_upgrade_dates(src_blueprint, dest_blueprint) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 71
def get_upgrade_dates(src_blueprint, dest_blueprint)
dest_dates = get_date_dimensions(dest_blueprint) if dest_blueprint
src_dates = get_date_dimensions(src_blueprint) if src_blueprint
upgrade_datasets = []
return upgrade_datasets if dest_dates.empty? || src_dates.empty?
dest_dates.each do |dest|
src_dim = get_date_dimension(src_blueprint, dest[:id])
next unless src_dim
upgrade_datasets << src_dim[:identifier] if upgrade?(src_dim, dest) && src_dim[:identifier]
end
upgrade_datasets
end
|
.get_upgrade_message(upgrade_datasets) ⇒ Object
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 88
def get_upgrade_message(upgrade_datasets)
{
upgrade: {
dateDatasets: {
upgrade: "exact",
datasets: upgrade_datasets
}
}
}
end
|
.migrate_date_dimension(params, segment_info) ⇒ Object
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
68
69
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 39
def migrate_date_dimension(params, segment_info)
results = []
client = params.gdc_gd_client
latest_blueprint = segment_info[:from_blueprint]
return results unless contain_v2?(latest_blueprint)
previous_blueprint = segment_info[:previous_master]&.blueprint
master_upgrade_datasets = get_upgrade_dates(latest_blueprint, previous_blueprint) if params[:synchronize_ldm].downcase == 'diff_against_master' && previous_blueprint
unless master_upgrade_datasets&.empty?
segment_info[:to].pmap do |entry|
pid = entry[:pid]
to_project = client.projects(pid) || fail("Invalid 'to' project specified - '#{pid}'")
GoodData.logger.info "Migrating date dimension, project: '#{to_project.title}', PID: #{pid}"
to_blueprint = to_project.blueprint
upgrade_datasets = get_upgrade_dates(latest_blueprint, to_blueprint)
next if upgrade_datasets.empty?
message = get_upgrade_message(upgrade_datasets)
results << {
from: segment_info[:from],
to: pid,
status: to_project.upgrade_custom_v2(message)
}
end
end
results
end
|
.upgrade?(src_dim, dest_dim) ⇒ Boolean
99
100
101
|
# File 'lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb', line 99
def upgrade?(src_dim, dest_dim)
src_dim[:urn] == DATE_DIMENSION_CUSTOM_V2 && DATE_DIMENSION_OLD.any? { |e| dest_dim[:urn] == e }
end
|