Class: GoodData::Client
- Inherits:
-
Rest::Resource
- Object
- Rest::Object
- Rest::Resource
- GoodData::Client
- Includes:
- Mixin::Links, Mixin::UriGetter
- Defined in:
- lib/gooddata/models/client.rb
Constant Summary collapse
- CLIENT_TEMPLATE =
{ client: { id: nil, segment: nil, project: nil } }
Instance Attribute Summary collapse
-
#domain ⇒ Object
Returns the value of attribute domain.
Attributes inherited from Rest::Object
Class Method Summary collapse
- .[](id, opts = {}) ⇒ Object
- .base_uri(domain, data_product) ⇒ Object
-
.create(data, options) ⇒ GoodData::Client
(also: associate)
Creates new client from parameters passed.
- .update_setting(name, value, opts = {}) ⇒ Object (also: add_setting)
Instance Method Summary collapse
-
#client_id ⇒ String
Segment id getter for the Segment.
- #client_id=(a_name) ⇒ Object
-
#delete ⇒ GoodData::Client
Deletes a client instance on the API.
-
#dissociate ⇒ Object
Deletes a client but maintain their project.
-
#initialize(data) ⇒ Client
constructor
A new instance of Client.
-
#project ⇒ GoodData::Project
Project this client has set.
-
#project=(a_project) ⇒ GoodData::Cliet
Setter for the project this client has set.
-
#project? ⇒ Boolean
Returns boolean if client has a project provisioned.
-
#project_uri ⇒ String
Project URI this client has set.
-
#reload! ⇒ GoodData::Client
Reloads the client from the URI.
-
#save ⇒ GoodData::Client
Creates or updates a client instance on the API.
-
#segment ⇒ GoodData::Segment
Segment this client is connected to.
-
#segment=(a_segment) ⇒ GoodData::Client
Segment id setter which this client is connected to.
-
#segment_uri ⇒ String
Segment URI this client is connected to.
- #settings ⇒ Object
Methods included from Mixin::UriGetter
Methods included from Mixin::Links
Methods included from Mixin::ObjId
Methods inherited from Rest::Object
client, default_client, #saved?
Methods included from Mixin::DataPropertyReader
Methods included from Mixin::DataPropertyWriter
Methods included from Mixin::MetaPropertyReader
Methods included from Mixin::MetaPropertyWriter
Methods included from Mixin::MetaGetter
Methods included from Mixin::DataGetter
Methods included from Mixin::RootKeyGetter
Methods included from Mixin::ContentGetter
Constructor Details
permalink #initialize(data) ⇒ Client
Returns a new instance of Client.
117 118 119 120 121 |
# File 'lib/gooddata/models/client.rb', line 117 def initialize(data) super(data) @domain = data.delete('domain') @json = data end |
Instance Attribute Details
Class Method Details
permalink .[](id, opts = {}) ⇒ Object
[View source]
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# 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 |
permalink .base_uri(domain, data_product) ⇒ Object
[View source]
107 108 109 110 111 112 113 114 |
# 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 |
permalink .create(data, options) ⇒ GoodData::Client Also known as: associate
Creates new client from parameters passed.
Should not be called directly. Use GoodData::Segment#create_client.
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/gooddata/models/client.rb', line 78 def create(data, ) segment = [: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 |
permalink .update_setting(name, value, opts = {}) ⇒ Object Also known as: add_setting
[View source]
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# 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 |
Instance Method Details
permalink #client_id ⇒ String
Segment id getter for the Segment. Called segment_id since id is a reserved word in ruby world
126 127 128 |
# File 'lib/gooddata/models/client.rb', line 126 def client_id data['id'] end |
permalink #client_id=(a_name) ⇒ Object
[View source]
130 131 132 133 |
# File 'lib/gooddata/models/client.rb', line 130 def client_id=(a_name) data['id'] = a_name self end |
permalink #delete ⇒ GoodData::Client
Deletes a client instance on the API.
215 216 217 218 |
# File 'lib/gooddata/models/client.rb', line 215 def delete project.delete if project && !project.deleted? dissociate end |
permalink #dissociate ⇒ Object
Deletes a client but maintain their project
221 222 223 |
# File 'lib/gooddata/models/client.rb', line 221 def dissociate client.delete(uri) if uri end |
permalink #project ⇒ GoodData::Project
Project this client has set
154 155 156 |
# File 'lib/gooddata/models/client.rb', line 154 def project client.projects(project_uri) if project? end |
permalink #project=(a_project) ⇒ GoodData::Cliet
Setter for the project this client has set
139 140 141 142 |
# 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 |
permalink #project? ⇒ Boolean
Returns boolean if client has a project provisioned
161 162 163 |
# File 'lib/gooddata/models/client.rb', line 161 def project? project_uri != nil end |
permalink #project_uri ⇒ String
Project URI this client has set
147 148 149 |
# File 'lib/gooddata/models/client.rb', line 147 def project_uri data['project'] end |
permalink #reload! ⇒ GoodData::Client
Reloads the client from the URI
168 169 170 171 172 |
# File 'lib/gooddata/models/client.rb', line 168 def reload! res = client.get(uri) @json = res self end |
permalink #save ⇒ GoodData::Client
Creates or updates a client instance on the API.
201 202 203 204 205 206 207 208 209 210 |
# 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 |
permalink #segment ⇒ GoodData::Segment
Segment this client is connected to.
186 187 188 189 |
# File 'lib/gooddata/models/client.rb', line 186 def segment segment_res = client.get(data['segment']) client.create(GoodData::Segment, segment_res) end |
permalink #segment=(a_segment) ⇒ GoodData::Client
Segment id setter which this client is connected to.
178 179 180 181 |
# 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 |
permalink #segment_uri ⇒ String
Segment URI this client is connected to.
194 195 196 |
# File 'lib/gooddata/models/client.rb', line 194 def segment_uri data['segment'] end |
permalink #settings ⇒ Object
[View source]
225 226 227 228 229 230 231 232 233 234 235 236 |
# 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 |