def call(params)
results = []
segments_to_tags = Helpers.segment_production_tags(params.segments)
transfer_all = GoodData::Helpers.to_boolean(params.transfer_all)
return results unless params.production_tags || params.production_tag || segments_to_tags.any? || transfer_all
development_client = params.development_client
synchronize = params.synchronize.pmap do |info|
from = info.from
from_project = development_client.projects(from) || fail("Invalid 'from' project specified - '#{from}'")
segment_tags = segments_to_tags[info.segment]
production_tags = Helpers.parse_production_tags(params.production_tags || params.production_tag, segment_tags)
objects = []
if transfer_all
vizs = MdObject.query('visualizationObject', MdObject, client: development_client, project: from_project)
viz_widgets = MdObject.query('visualizationWidget', MdObject, client: development_client, project: from_project)
theme = MdObject.query('theme', MdObject, client: development_client, project: from_project)
objects = (from_project.reports.to_a + from_project.metrics.to_a + from_project.variables.to_a + vizs.to_a + viz_widgets.to_a + theme.to_a).map(&:uri)
elsif production_tags.any?
objects = from_project.find_by_tag(production_tags)
end
info[:transfer_uris] ||= []
info[:transfer_uris] += objects
results += objects.map do |uri|
{
project: from,
transfer_uri: uri
}
end
info
end
{
results: results,
params: {
synchronize: synchronize
}
}
end