class GoodData::LCM2::CollectTaggedObjects

Constants

DESCRIPTION
PARAMS

Public Class Methods

call(params) click to toggle source
# File lib/gooddata/lcm/actions/collect_tagged_objects.rb, line 36
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