# encoding: UTF-8 # # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved. # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. require_relative '../rest/resource' module GoodData class AdsOutputStage < Rest::Resource OUTPUT_STAGE_PATH = '/gdc/dataload/projects/%s/outputStage' attr_accessor :client_id, :output_stage_prefix, :schema class << self def [](opts = { client: GoodData.connection, project: GoodData.project }) c, project = GoodData.get_client_and_project(opts) uri = OUTPUT_STAGE_PATH % project.pid data = c.get(uri) c.create(AdsOutputStage, data, opts) end def create(opts = { client: GoodData.connection }) c = GoodData.get_client(opts) [:project, :ads].each do |key| fail "No #{key.inspect} specified" unless opts[key] end schema = (opts[:ads].respond_to?(:schemas) && opts[:ads].schemas) || opts[:ads] schema += '/default' unless schema.end_with?('/default') json = { 'outputStage' => { 'schema' => schema } } output_stage = c.create(AdsOutputStage, json, opts) output_stage.save output_stage end end def initialize(json) super @json = json @schema = data['schema'] @client_id = data['clientId'] @output_stage_prefix = data['outputStagePrefix'] end def sql_diff res = client.get "#{build_output_stage_path}/sqlDiff" ret = client.poll_on_response(res['asyncTask']['link']['poll']) { |body| body['asyncTask'] } ret.freeze end def save data_to_send = GoodData::Helpers.deep_dup(raw_data).tap do |d| d['outputStage']['clientId'] = client_id if client_id d['outputStage']['outputStagePrefix'] = output_stage_prefix if output_stage_prefix d['outputStage']['schema'] = schema end url = build_output_stage_path @json = client.put(url, data_to_send, accept: 'application/json; version=1') end def delete data_to_send = { 'outputStage' => { 'clientId' => '', 'outputStagePrefix' => '' } } url = build_output_stage_path @json = client.put(url, data_to_send, accept: 'application/json; version=1') end private def build_output_stage_path pid = (project.respond_to?(:pid) && project.pid) || project OUTPUT_STAGE_PATH % pid end end end