Class: GoodData::Profile
- Inherits:
-
Rest::Resource
- Object
- Rest::Object
- Rest::Resource
- GoodData::Profile
- Defined in:
- lib/gooddata/models/profile.rb
Constant Summary collapse
- EMPTY_OBJECT =
{ 'accountSetting' => { 'companyName' => nil, 'country' => nil, 'created' => nil, 'firstName' => nil, 'lastName' => nil, 'login' => nil, 'phoneNumber' => nil, 'position' => nil, 'timezone' => nil, 'updated' => nil, 'links' => { 'projects' => nil, 'self' => nil }, 'email' => nil, 'authenticationModes' => [] } }
- ASSIGNABLE_MEMBERS =
[ :company, :country, :email, :login, :first_name, :last_name, :phone, :position, :timezone ]
- PROFILE_PATH =
'/gdc/account/profile/%s'
Instance Attribute Summary collapse
-
#json ⇒ Object
readonly
Returns the value of attribute json.
-
#user ⇒ Object
readonly
Returns the value of attribute user.
Attributes inherited from Rest::Object
Class Method Summary collapse
-
.[](id, opts = { client: GoodData.connection }) ⇒ Object
Get profile by ID or URI.
-
.create(attributes) ⇒ GoodData::Profile
Creates new instance from hash with attributes.
- .create_object(attributes) ⇒ Object
-
.current ⇒ GoodData::Profile
Gets user currently logged in.
- .diff(item1, item2) ⇒ Object
- .diff_list(list1, list2) ⇒ Object
Instance Method Summary collapse
-
#!=(other) ⇒ Boolean
Checks objects for non-equality.
-
#==(other) ⇒ Boolean
Checks objects for equality.
- #authentication_modes ⇒ Object
- #authentication_modes=(modes) ⇒ Object
- #channels ⇒ Object
-
#company ⇒ String
Gets the company name.
-
#company=(val) ⇒ Object
Set the company name.
- #content ⇒ Object
-
#country ⇒ String
Gets the country.
-
#country=(val) ⇒ Object
Set the country.
- #create_channel ⇒ Object
-
#created ⇒ DateTime
Gets date when created.
- #data ⇒ Object
-
#delete ⇒ Object
Deletes this account settings.
-
#diff(user) ⇒ Hash
Gets hash representing diff of profiles.
-
#email ⇒ String
Gets the email.
-
#email=(val) ⇒ Object
Set the email.
-
#first_name ⇒ String
Gets the first name.
-
#first_name=(val) ⇒ Object
Set the first name.
-
#full_name ⇒ Object
(also: #title)
Get full name.
-
#initialize(json) ⇒ Profile
constructor
Creates new instance.
-
#last_name ⇒ String
Gets the last name.
-
#last_name=(val) ⇒ Object
Set the last name.
- #links ⇒ Object
-
#login ⇒ String
Gets the login.
-
#login=(val) ⇒ Object
Set the login.
- #name ⇒ Object
-
#obj_id ⇒ String
(also: #account_setting_id)
Gets the resource identifier.
- #password ⇒ Object
- #password=(a_password) ⇒ Object
-
#phone ⇒ String
(also: #phone_number)
Gets the phone.
-
#phone=(val) ⇒ Object
(also: #phone_number=)
Set the phone.
-
#position ⇒ String
Gets the position in company.
-
#position=(val) ⇒ Object
Set the position.
-
#projects ⇒ Array<GoodData::Project>
Gets the array of projects.
-
#save! ⇒ Object
Saves object if dirty, clears dirty flag.
- #sso_provider ⇒ Object
- #sso_provider=(an_sso_provider) ⇒ Object
-
#timezone ⇒ String
Gets the preferred timezone.
-
#timezone=(val) ⇒ Object
Set the timezone.
- #to_hash ⇒ Object
-
#updated ⇒ DateTime
Gets the date when updated.
-
#uri ⇒ String
Gets the resource REST URI.
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::RootKeyGetter
Constructor Details
#initialize(json) ⇒ Profile
Creates new instance
116 117 118 119 |
# File 'lib/gooddata/models/profile.rb', line 116 def initialize(json) @json = json @dirty = false end |
Instance Attribute Details
#json ⇒ Object (readonly)
Returns the value of attribute json.
15 16 17 |
# File 'lib/gooddata/models/profile.rb', line 15 def json @json end |
#user ⇒ Object (readonly)
Returns the value of attribute user.
15 16 17 |
# File 'lib/gooddata/models/profile.rb', line 15 def user @user end |
Class Method Details
.[](id, opts = { client: GoodData.connection }) ⇒ Object
Get profile by ID or URI
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/gooddata/models/profile.rb', line 59 def [](id, opts = { client: GoodData.connection }) return id if id.instance_of?(GoodData::Profile) || id.respond_to?(:profile?) && id.profile? if id.to_s !~ %r{^(\/gdc\/account\/profile\/)?[a-zA-Z\d]+$} fail(ArgumentError, 'wrong type of argument. Should be either profile ID or path') end id = id.match(/[a-zA-Z\d]+$/)[0] if id =~ %r{/} c = client(opts) fail ArgumentError, 'No :client specified' if c.nil? response = c.get(PROFILE_PATH % id) c.factory.create(Profile, response) end |
.create(attributes) ⇒ GoodData::Profile
Creates new instance from hash with attributes
79 80 81 82 83 |
# File 'lib/gooddata/models/profile.rb', line 79 def create(attributes) res = create_object(attributes) res.save! res end |
.create_object(attributes) ⇒ Object
85 86 87 88 89 90 91 92 93 94 |
# File 'lib/gooddata/models/profile.rb', line 85 def create_object(attributes) json = GoodData::Helpers.deep_dup(EMPTY_OBJECT) json['accountSetting']['links']['self'] = attributes[:uri] if attributes[:uri] res = client.create(GoodData::Profile, json) attributes.each do |k, v| res.send("#{k}=", v) if ASSIGNABLE_MEMBERS.include? k end res end |
.current ⇒ GoodData::Profile
Gets user currently logged in
108 109 110 |
# File 'lib/gooddata/models/profile.rb', line 108 def current client.user end |
.diff(item1, item2) ⇒ Object
96 97 98 99 100 |
# File 'lib/gooddata/models/profile.rb', line 96 def diff(item1, item2) x = diff_list([item1], [item2]) return {} if x[:changed].empty? x[:changed].first[:diff] end |
Instance Method Details
#!=(other) ⇒ Boolean
Checks objects for non-equality
134 135 136 |
# File 'lib/gooddata/models/profile.rb', line 134 def !=(other) !(self == other) end |
#==(other) ⇒ Boolean
Checks objects for equality
125 126 127 128 |
# File 'lib/gooddata/models/profile.rb', line 125 def ==(other) return false unless other.respond_to?(:to_hash) to_hash == other.to_hash end |
#authentication_modes ⇒ Object
399 400 401 |
# File 'lib/gooddata/models/profile.rb', line 399 def authentication_modes @json['accountSetting']['authenticationModes'].map { |x| x.downcase.to_sym } end |
#authentication_modes=(modes) ⇒ Object
403 404 405 406 407 |
# File 'lib/gooddata/models/profile.rb', line 403 def authentication_modes=(modes) modes = Array(modes) @dirty = true @json['accountSetting']['authenticationModes'] = modes.map { |x| x.to_s.upcase } end |
#channels ⇒ Object
430 431 432 |
# File 'lib/gooddata/models/profile.rb', line 430 def channels GoodData::ChannelConfiguration.all(client: client) end |
#company ⇒ String
Gets the company name
149 150 151 |
# File 'lib/gooddata/models/profile.rb', line 149 def company @json['accountSetting']['companyName'] || '' end |
#company=(val) ⇒ Object
Set the company name
156 157 158 159 |
# File 'lib/gooddata/models/profile.rb', line 156 def company=(val) @dirty ||= company != val @json['accountSetting']['companyName'] = val end |
#content ⇒ Object
372 373 374 375 |
# File 'lib/gooddata/models/profile.rb', line 372 def content keys = (data.keys - ['links']) data.slice(*keys) end |
#country ⇒ String
Gets the country
164 165 166 |
# File 'lib/gooddata/models/profile.rb', line 164 def country @json['accountSetting']['country'] || '' end |
#country=(val) ⇒ Object
Set the country
171 172 173 174 |
# File 'lib/gooddata/models/profile.rb', line 171 def country=(val) @dirty ||= country != val @json['accountSetting']['country'] = val end |
#create_channel ⇒ Object
426 427 428 |
# File 'lib/gooddata/models/profile.rb', line 426 def create_channel GoodData::ChannelConfiguration.create(to: email, title: email, client: client) end |
#created ⇒ DateTime
Gets date when created
179 180 181 |
# File 'lib/gooddata/models/profile.rb', line 179 def created DateTime.parse(@json['accountSetting']['created']) end |
#data ⇒ Object
363 364 365 366 |
# File 'lib/gooddata/models/profile.rb', line 363 def data data = @json || {} data['accountSetting'] || {} end |
#delete ⇒ Object
Deletes this account settings
184 185 186 |
# File 'lib/gooddata/models/profile.rb', line 184 def delete client.delete uri end |
#diff(user) ⇒ Hash
Gets hash representing diff of profiles
192 193 194 |
# File 'lib/gooddata/models/profile.rb', line 192 def diff(user) GoodData::Profile.diff(self, user) end |
#email ⇒ String
Gets the email
199 200 201 |
# File 'lib/gooddata/models/profile.rb', line 199 def email @json['accountSetting']['email'] || '' end |
#email=(val) ⇒ Object
Set the email
206 207 208 209 |
# File 'lib/gooddata/models/profile.rb', line 206 def email=(val) @dirty ||= email != val @json['accountSetting']['email'] = val end |
#first_name ⇒ String
Gets the first name
214 215 216 |
# File 'lib/gooddata/models/profile.rb', line 214 def first_name @json['accountSetting']['firstName'] || '' end |
#first_name=(val) ⇒ Object
Set the first name
221 222 223 224 |
# File 'lib/gooddata/models/profile.rb', line 221 def first_name=(val) @dirty ||= first_name != val @json['accountSetting']['firstName'] = val end |
#full_name ⇒ Object Also known as: title
Get full name
NOTE: This can be tricky to implement correctly for i18n
230 231 232 |
# File 'lib/gooddata/models/profile.rb', line 230 def full_name "#{first_name} #{last_name}" end |
#last_name ⇒ String
Gets the last name
239 240 241 |
# File 'lib/gooddata/models/profile.rb', line 239 def last_name @json['accountSetting']['lastName'] || '' end |
#last_name=(val) ⇒ Object
Set the last name
246 247 248 249 |
# File 'lib/gooddata/models/profile.rb', line 246 def last_name=(val) @dirty ||= last_name != val @json['accountSetting']['lastName'] = val end |
#links ⇒ Object
368 369 370 |
# File 'lib/gooddata/models/profile.rb', line 368 def links data['links'] || {} end |
#login ⇒ String
Gets the login
254 255 256 |
# File 'lib/gooddata/models/profile.rb', line 254 def login @json['accountSetting']['login'] || '' end |
#login=(val) ⇒ Object
Set the login
261 262 263 264 |
# File 'lib/gooddata/models/profile.rb', line 261 def login=(val) @dirty ||= login != val @json['accountSetting']['login'] = val end |
#name ⇒ Object
377 378 379 |
# File 'lib/gooddata/models/profile.rb', line 377 def name (first_name || '') + (last_name || '') end |
#obj_id ⇒ String Also known as: account_setting_id
Gets the resource identifier
269 270 271 |
# File 'lib/gooddata/models/profile.rb', line 269 def obj_id uri.split('/').last end |
#password ⇒ Object
381 382 383 |
# File 'lib/gooddata/models/profile.rb', line 381 def password @json['accountSetting']['password'] end |
#password=(a_password) ⇒ Object
385 386 387 388 |
# File 'lib/gooddata/models/profile.rb', line 385 def password=(a_password) @dirty = true @json['accountSetting']['password'] = a_password end |
#phone ⇒ String Also known as: phone_number
Gets the phone
278 279 280 |
# File 'lib/gooddata/models/profile.rb', line 278 def phone @json['accountSetting']['phoneNumber'] || '' end |
#phone=(val) ⇒ Object Also known as: phone_number=
Set the phone
287 288 289 290 |
# File 'lib/gooddata/models/profile.rb', line 287 def phone=(val) @dirty ||= phone != val @json['accountSetting']['phoneNumber'] = val end |
#position ⇒ String
Gets the position in company
297 298 299 |
# File 'lib/gooddata/models/profile.rb', line 297 def position @json['accountSetting']['position'] || '' end |
#position=(val) ⇒ Object
Set the position
304 305 306 307 |
# File 'lib/gooddata/models/profile.rb', line 304 def position=(val) @dirty ||= position != val @json['accountSetting']['position'] = val end |
#projects ⇒ Array<GoodData::Project>
Gets the array of projects
312 313 314 315 316 317 |
# File 'lib/gooddata/models/profile.rb', line 312 def projects projects = client.get @json['accountSetting']['links']['projects'] projects['projects'].map do |project| client.create(GoodData::Project, project) end end |
#save! ⇒ Object
Saves object if dirty, clears dirty flag
320 321 322 323 324 325 326 327 328 329 330 331 332 |
# File 'lib/gooddata/models/profile.rb', line 320 def save! if @dirty raw = @json.dup raw['accountSetting'].delete('login') if uri && !uri.empty? url = "/gdc/account/profile/#{obj_id}" @json = client.put url, raw @dirty = false end end self end |
#sso_provider ⇒ Object
390 391 392 |
# File 'lib/gooddata/models/profile.rb', line 390 def sso_provider @json['accountSetting']['ssoProvider'] end |
#sso_provider=(an_sso_provider) ⇒ Object
394 395 396 397 |
# File 'lib/gooddata/models/profile.rb', line 394 def sso_provider=(an_sso_provider) @dirty = true @json['accountSetting']['ssoProvider'] = an_sso_provider end |
#timezone ⇒ String
Gets the preferred timezone
337 338 339 |
# File 'lib/gooddata/models/profile.rb', line 337 def timezone @json['accountSetting']['timezone'] || '' end |
#timezone=(val) ⇒ Object
Set the timezone
344 345 346 347 |
# File 'lib/gooddata/models/profile.rb', line 344 def timezone=(val) @dirty ||= timezone != val @json['accountSetting']['timezone'] = val end |
#to_hash ⇒ Object
409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 |
# File 'lib/gooddata/models/profile.rb', line 409 def to_hash tmp = GoodData::Helpers.symbolize_keys(content.merge(uri: uri)) [ [:companyName, :company], [:phoneNumber, :phone], [:firstName, :first_name], [:lastName, :last_name], [:authenticationModes, :authentication_modes], [:ssoProvider, :sso_provider] ].each do |vals| wire, rb = vals tmp[rb] = tmp[wire] tmp.delete(wire) end tmp end |
#updated ⇒ DateTime
Gets the date when updated
352 353 354 |
# File 'lib/gooddata/models/profile.rb', line 352 def updated DateTime.parse(@json['accountSetting']['updated']) end |