class GoodData::Client
Constants
- CLIENT_TEMPLATE
Attributes
Public Class Methods
# File lib/gooddata/models/client.rb, line 32 def [](id, opts = {}) domain = opts[:domain] segment = opts[:segment] fail ArgumentError, 'No :domain specified' if domain.nil? client = domain.client fail ArgumentError, 'No client specified' if client.nil? data_product = opts[:data_product] || (segment ? segment.data_product : nil) if id == :all tenants_uri = base_uri(domain, data_product) tenants_uri += "?segment=#{CGI.escape(segment.segment_id)}" if segment all_clients = [] loop do res = client.get tenants_uri res['clients']['paging']['next'] res['clients']['items'].each do |i| p = i['client']['project'] tenant = client.create(GoodData::Client, i.merge('domain' => domain)) tenant.project = p all_clients << tenant end url = res['clients']['paging']['next'] break unless url end all_clients else id = id.respond_to?(:client_id) ? id.client_id : id tenant_uri = base_uri(domain, data_product) data = client.get(tenant_uri + "/#{CGI.escape(id)}") client.create(GoodData::Client, data.merge('domain' => domain)) end end
# File lib/gooddata/models/client.rb, line 107 def base_uri(domain, data_product) if data_product uri = GoodData::DataProduct::ONE_DATA_PRODUCT_PATH % { domain_name: domain.name, id: data_product.data_product_id } else uri = domain.segments_uri end uri + '/clients' end
Creates new client from parameters passed.
Should not be called directly. Use GoodData::Segment#create_client
.
@param data [Hash] Data
required to create the client @option data id [String] @option data project [GoodData::Project] @param options [Hash] Options @option options segment [GoodData::Segment] @option options client [GoodData::Rest::Client] @return [GoodData::Client] New GoodData::Client
instance
# File lib/gooddata/models/client.rb, line 78 def create(data, options) segment = options[:segment] domain = segment.domain tenant = client.create(GoodData::Client, GoodData::Helpers.stringify_keys(CLIENT_TEMPLATE.merge(domain: domain)), domain: domain) tenant.tap do |s| s.project = data[:project] s.client_id = data[:id] s.segment = segment.uri end end
# File lib/gooddata/models/client.rb, line 117 def initialize(data) super(data) @domain = data.delete('domain') @json = data end
# File lib/gooddata/models/client.rb, line 90 def update_setting(name, value, opts = {}) return nil unless value domain = opts[:domain] client_id = opts[:client_id] data_product_id = opts[:data_product_id] uri = data_product_id ? GoodData::DataProduct::ONE_DATA_PRODUCT_PATH % { domain_name: domain.name, id: data_product_id } : domain.segments_uri body = { setting: { name: "#{name}", value: "#{value}" } } domain.client.put(uri + "/clients/#{client_id}/settings/#{name}", body) nil end
Public Instance Methods
# File lib/gooddata/models/client.rb, line 130 def client_id=(a_name) data['id'] = a_name self end
Deletes a client instance on the API.
@return [GoodData::Client] Segment
instance
# File lib/gooddata/models/client.rb, line 215 def delete project.delete if project && !project.deleted? dissociate end
Deletes a client but maintain their project
# File lib/gooddata/models/client.rb, line 221 def dissociate client.delete(uri) if uri end
Project
this client has set
@return [GoodData::Project] Returns the instance of the client’s project
# File lib/gooddata/models/client.rb, line 154 def project client.projects(project_uri) if project? end
Setter for the project this client has set
@param a_project [String|GoodData::Project] Id or an instance of a project @return [GoodData::Cliet] Returns the instance of the client
# File lib/gooddata/models/client.rb, line 139 def project=(a_project) data['project'] = a_project.respond_to?(:uri) ? a_project.uri : a_project self end
Returns boolean if client has a project provisioned
@return [Boolean] Returns true if client has a project provisioned. False otherwise
# File lib/gooddata/models/client.rb, line 161 def project? project_uri != nil end
Project
URI this client has set
@return [String] Returns the URI of the project this client has set
# File lib/gooddata/models/client.rb, line 147 def project_uri data['project'] end
Reloads the client from the URI
@return [GoodData::Client] Returns the updated client object
# File lib/gooddata/models/client.rb, line 168 def reload! res = client.get(uri) @json = res self end
Creates or updates a client instance on the API.
@return [GoodData::Client] Client
instance
# File lib/gooddata/models/client.rb, line 201 def save if uri client.put(uri, json) else data_product = segment.data_product res = client.post(self.class.base_uri(domain, data_product), json) @json = res end self end
Segment
id setter which this client is connected to.
@param a_segment [String] Id of the segment. @return [GoodData::Client] Returns the instance of the client
# File lib/gooddata/models/client.rb, line 178 def segment=(a_segment) data['segment'] = a_segment.respond_to?(:uri) ? a_segment.uri : a_segment self end
# File lib/gooddata/models/client.rb, line 225 def settings data_product = segment.data_product res = client.get(self.class.base_uri(domain, data_product) + "/#{client_id}/settings") settings = GoodData::Helpers.get_path(res, %w(settingsList items)) settings.map do |setting| setting = setting['setting'] { name: setting['name'], value: setting['value'] } end end