class GoodData::DataSource
Constants
- ADS
- BIGQUERY
- DATA_SOURCES_URL
- ERROR_MESSAGE_NO_SCHEMA
- GENERIC
- REDSHIFT
- S3
- SNOWFLAKE
Attributes
Public Class Methods
Source
# File lib/gooddata/models/data_source.rb, line 28 def [](id = :all, options = { client: GoodData.client }) c = GoodData.get_client(options) if id == :all data = c.get(DATA_SOURCES_URL) data['dataSources']['items'].map do |ds_data| c.create(DataSource, ds_data) end else c.create(DataSource, c.get(DATA_SOURCES_URL + '/' + id)) end end
Get all data sources or get a specify data source from data source identify Expected parameter value:
-
:all return all data sources
-
:data_source_id return a data source with the specify data source identify
Source
# File lib/gooddata/models/data_source.rb, line 64 def all(options = { client: GoodData.client }) DataSource[:all, options] end
Get all data sources
Source
# File lib/gooddata/models/data_source.rb, line 75 def create(opts) ds_name = opts[:name] ds_alias = opts[:alias] ds_prefix = opts[:prefix] ds_connection_info = opts[:connectionInfo] GoodData.logger.info "Creating data source '#{ds_name}'" fail ArgumentError, 'Data source name has to be provided' if ds_name.nil? || ds_name.blank? fail ArgumentError, 'Data source connection info has to be provided' if ds_connection_info.nil? json = { 'dataSource' => { 'name' => ds_name, 'connectionInfo' => ds_connection_info } } json['dataSource']['alias'] = ds_alias if ds_alias json['dataSource']['prefix'] = ds_prefix if ds_prefix # Create data source c = GoodData.get_client(opts) res = c.post(DATA_SOURCES_URL, json) # create the public facing object c.create(DataSource, res) end
Create data source from json Expected keys:
-
:name (mandatory)
-
:alias (optional)
-
:prefix (optional)
-
:connectionInfo (mandatory)
-
:client (mandatory)
Source
# File lib/gooddata/models/data_source.rb, line 53 def from_alias(data_source_alias, options = { client: GoodData.client }) data_sources = all(options) result = data_sources.find do |data_source| data_source.alias == data_source_alias end fail "Data source alias '#{data_source_alias}' has not found" unless result result end
Get a specify data source from data source alias
@param [String] data_source_alias Data
source alias @return [DataSource] Data
source corresponding in backend or throw exception if the data source alias doesn’t exist
Source
# File lib/gooddata/models/data_source.rb, line 45 def from_id(id, options = { client: GoodData.client }) DataSource[id, options] end
Get a specify data source from data source identify
@param [String] id Data
source identify @return [DataSource] Data
source corresponding in backend or throw exception if the data source identify doesn’t exist
Source
# File lib/gooddata/models/data_source.rb, line 133 def initialize(json) super @json = json validate @connection_info = build_connection_info end
Public Instance Methods
Source
# File lib/gooddata/models/data_source.rb, line 152 def alias @json['dataSource']['alias'] end
Source
# File lib/gooddata/models/data_source.rb, line 156 def alias=(new_alias) @json['dataSource']['alias'] = new_alias end
Source
# File lib/gooddata/models/data_source.rb, line 129 def delete saved? ? client.delete(uri) : nil end
Source
# File lib/gooddata/models/data_source.rb, line 176 def is(type) @json['dataSource']['connectionInfo'][type] end
Source
# File lib/gooddata/models/data_source.rb, line 144 def name @json['dataSource']['name'] end
Source
# File lib/gooddata/models/data_source.rb, line 148 def name=(new_name) @json['dataSource']['name'] = new_name end
Source
# File lib/gooddata/models/data_source.rb, line 160 def prefix @json['dataSource']['prefix'] end
Source
# File lib/gooddata/models/data_source.rb, line 164 def prefix=(new_prefix) @json['dataSource']['prefix'] = new_prefix end
Source
# File lib/gooddata/models/data_source.rb, line 113 def save validate validate_connection_info if saved? update_obj_json = client.put(uri, to_update_payload) @json = update_obj_json else res = client.post(DATA_SOURCES_URL, to_update_payload) fail 'Unable to create new Data Source' if res.nil? @json = res end @connection_info = build_connection_info self end
Save data source to backend. The saving will validate existing data source name and connection info. So need set values for them.
Input info:
-
:name (mandatory)
-
:alias (optional)
-
:prefix (optional)
-
:connectionInfo (mandatory)
Return: create data source in backend and return data source object corresponding with data source in backend.
Source
# File lib/gooddata/models/data_source.rb, line 180 def type @json['dataSource']['connectionInfo'].first[0].upcase end
Source
# File lib/gooddata/models/data_source.rb, line 168 def uri @json['dataSource']['links']['self'] if @json && @json['dataSource'] && @json['dataSource']['links'] end
Private Instance Methods
Source
# File lib/gooddata/models/data_source.rb, line 233 def ads_connection_info return nil unless is(ADS) AdsConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 215 def bigquery_connection_info return nil unless is(BIGQUERY) BigQueryConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 186 def build_connection_info return snowflake_connection_info if is(SNOWFLAKE) return redshift_connection_info if is(REDSHIFT) return bigquery_connection_info if is(BIGQUERY) return generic_connection_info if is(GENERIC) return s3_connection_info if is(S3) return ads_connection_info if is(ADS) # In case don't know data source type then support get or set directly json data for connection info ConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 221 def generic_connection_info return nil unless is(GENERIC) GenericConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 209 def redshift_connection_info return nil unless is(REDSHIFT) RedshiftConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 227 def s3_connection_info return nil unless is(S3) S3ConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 203 def snowflake_connection_info return nil unless is(SNOWFLAKE) SnowflakeConnectionInfo.new(@json['dataSource']['connectionInfo']) end
Source
# File lib/gooddata/models/data_source.rb, line 198 def support_connection_info(connection_info) [SnowflakeConnectionInfo, RedshiftConnectionInfo, BigQueryConnectionInfo, GenericConnectionInfo, S3ConnectionInfo, AdsConnectionInfo].include? connection_info.class end
Source
# File lib/gooddata/models/data_source.rb, line 239 def to_update_payload json_data = { 'dataSource' => { 'name' => name, 'connectionInfo' => @connection_info.to_update_payload } } json_data['dataSource']['alias'] = self.alias if self.alias json_data['dataSource']['prefix'] = prefix if prefix json_data end
Source
# File lib/gooddata/models/data_source.rb, line 251 def validate fail 'Invalid data source json data' unless @json['dataSource'] fail 'Data source connection info has to be provided' unless @json['dataSource']['connectionInfo'] fail 'Data source name has to be provided' if name.nil? || name.blank? end
Source
# File lib/gooddata/models/data_source.rb, line 257 def validate_connection_info @connection_info.validate end