Class: GoodData::Membership

Inherits:
Rest::Resource show all
Defined in:
lib/gooddata/models/membership.rb

Constant Summary collapse

ASSIGNABLE_MEMBERS =
[
  :email,
  :first_name,
  :last_name,
  :login,
  :phone,
  :status,
  :title
]

Instance Attribute Summary collapse

Attributes inherited from Rest::Object

#client, #project

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Rest::Object

client, default_client, #saved?

Methods included from GoodData::Mixin::DataPropertyReader

#data_property_reader

Methods included from GoodData::Mixin::DataPropertyWriter

#data_property_writer

Methods included from GoodData::Mixin::MetaPropertyReader

#metadata_property_reader

Methods included from GoodData::Mixin::MetaPropertyWriter

#metadata_property_writer

Methods included from GoodData::Mixin::RootKeyGetter

#root_key

Constructor Details

#initialize(json) ⇒ Membership

Returns a new instance of Membership.



71
72
73
# File 'lib/gooddata/models/membership.rb', line 71

def initialize(json)
  @json = json
end

Instance Attribute Details

#jsonObject (readonly)

Returns the value of attribute json.



18
19
20
# File 'lib/gooddata/models/membership.rb', line 18

def json
  @json
end

Class Method Details

.create(data, options = { client: GoodData.connection }) ⇒ GoodData::User

Apply changes to object.

def apply(obj, changes) changes.each do |param, val| next unless ASSIGNABLE_MEMBERS.include? param obj.send("#param=", val) end obj end

Parameters:

  • obj (GoodData::User)

    Object to be modified

  • changes (Hash)

    Hash with modifications

Returns:

  • (GoodData::User)

    Modified object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/gooddata/models/membership.rb', line 43

def create(data, options = { client: GoodData.connection })
  c = client(options)
  json = {
    'user' => {
      'content' => {
        'email' => data[:email] || data[:login],
        'login' => data[:login],
        'firstname' => data[:first_name],
        'lastname' => data[:last_name],
        'userRoles' => ['editor'],
        'password' => data[:password],
        'domain' => data[:domain],
        # And following lines are even much more ugly hack
        # 'authentication_modes' => ['sso', 'password']
      },
      'links' => {},
      'meta' => {}
    }
  }
  json['user']['links']['self'] = data[:uri] if data[:uri]
  c.create(self, json)
end

.diff_list(list1, list2) ⇒ Object



66
67
68
# File 'lib/gooddata/models/membership.rb', line 66

def diff_list(list1, list2)
  GoodData::Helpers.diff(list1, list2, key: :login)
end

Instance Method Details

#!=(other) ⇒ Boolean

Checks objects for non-equality

Parameters:

  • right (GoodData::User)

    Project to compare with

Returns:

  • (Boolean)

    True if different else false



95
96
97
# File 'lib/gooddata/models/membership.rb', line 95

def !=(other)
  !(self == other)
end

#==(other) ⇒ Boolean

Checks objects for equality

Parameters:

  • right (GoodData::User)

    Project to compare with

Returns:

  • (Boolean)

    True if same else false



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/gooddata/models/membership.rb', line 79

def ==(other)
  return false unless other.respond_to?(:to_hash)
  to_hash == other.to_hash
  # res = true
  # ASSIGNABLE_MEMBERS.each do |k|
  #   l_val = send("#{k}")
  #   r_val = other.send("#{k}")
  #   res = false if l_val != r_val
  # end
  # res
end

#contentObject



394
395
396
# File 'lib/gooddata/models/membership.rb', line 394

def content
  data['content'] || {}
end

#contributorString

Gets the contributor

Returns:

  • (String)

    Contributor



110
111
112
113
114
# File 'lib/gooddata/models/membership.rb', line 110

def contributor
  url = @json['user']['meta']['contributor']
  data = client.get url
  client.create(GoodData::Membership, data)
end

#createdDateTime

Gets date when created

Returns:

  • (DateTime)

    Created date



119
120
121
# File 'lib/gooddata/models/membership.rb', line 119

def created
  Time.parse(@json['user']['meta']['created'])
end

#dataObject



377
378
379
380
# File 'lib/gooddata/models/membership.rb', line 377

def data
  data = @json || {}
  data['user'] || {}
end

#deleted?Boolean

Is the member deleted?

Returns:

  • (Boolean)

    true if he is deleted



126
127
128
# File 'lib/gooddata/models/membership.rb', line 126

def deleted?
  !( =~ /^deleted-/).nil?
end

#diff(user) ⇒ Hash

Gets hash representing diff of users

Parameters:

  • user (GoodData::User)

    Another profile to compare with

Returns:

  • (Hash)

    Hash representing diff



134
135
136
# File 'lib/gooddata/models/membership.rb', line 134

def diff(user)
  GoodData::User.diff(self, user)
end

#disableGoodData::Membership

Disables membership

Returns:



365
366
367
368
# File 'lib/gooddata/models/membership.rb', line 365

def disable
  self.status = 'DISABLED'
  self
end

#disabled?Boolean

Is the member enabled?

Returns:

  • (Boolean)

    true if it is disabled



373
374
375
# File 'lib/gooddata/models/membership.rb', line 373

def disabled?
  !enabled?
end

#emailString

Gets the email

Returns:

  • (String)

    Email address



141
142
143
# File 'lib/gooddata/models/membership.rb', line 141

def email
  @json['user']['content']['email'] || ''
end

#email=(new_email) ⇒ Object

Sets the email

Parameters:

  • new_email (String)

    New email to be assigned



148
149
150
# File 'lib/gooddata/models/membership.rb', line 148

def email=(new_email)
  @json['user']['content']['email'] = new_email
end

#enableGoodData::Membership

Enables membership

Returns:



350
351
352
353
# File 'lib/gooddata/models/membership.rb', line 350

def enable
  self.status = 'ENABLED'
  self
end

#enabled?Boolean

Is the member enabled?

Returns:

  • (Boolean)

    true if it is enabled



358
359
360
# File 'lib/gooddata/models/membership.rb', line 358

def enabled?
  status == 'ENABLED'
end

#first_nameString

Gets the first name

Returns:

  • (String)

    First name



155
156
157
# File 'lib/gooddata/models/membership.rb', line 155

def first_name
  @json['user']['content']['firstname'] || ''
end

#first_name=(new_first_name) ⇒ Object

Sets the first name

Parameters:

  • new_first_name (String)

    New first name to be assigned



162
163
164
# File 'lib/gooddata/models/membership.rb', line 162

def first_name=(new_first_name)
  @json['user']['content']['firstname'] = new_first_name
end

#full_nameObject

Get full name

NOTE: This can be tricky to implement correctly for i18n

Returns:

  • String Full Name



170
171
172
# File 'lib/gooddata/models/membership.rb', line 170

def full_name
  "#{first_name} #{last_name}"
end

#invitationsArray<GoodData::Invitation>

Gets the invitations

Returns:



177
178
179
180
181
182
183
184
185
186
# File 'lib/gooddata/models/membership.rb', line 177

def invitations
  res = []

  tmp = client.get @json['user']['links']['invitations']
  tmp['invitations'].each do |_invitation|
    # TODO: Something is missing here
  end

  res
end

#last_nameString

Gets the last name

Returns:

  • (String)

    Last name



191
192
193
# File 'lib/gooddata/models/membership.rb', line 191

def last_name
  @json['user']['content']['lastname'] || ''
end

#last_name=(new_last_name) ⇒ Object

Sets the last name

Parameters:

  • new_last_name (String)

    New last name to be assigned



198
199
200
# File 'lib/gooddata/models/membership.rb', line 198

def last_name=(new_last_name)
  @json['user']['content']['lastname'] = new_last_name
end


390
391
392
# File 'lib/gooddata/models/membership.rb', line 390

def links
  data['links'] || {}
end

#loginString

Gets the login

Returns:

  • (String)

    Login



205
206
207
# File 'lib/gooddata/models/membership.rb', line 205

def 
  @json['user']['content']['login'] || ''
end

#login=(new_login) ⇒ Object

Sets the last name

Parameters:

  • new_login (String)

    New login to be assigned



212
213
214
# File 'lib/gooddata/models/membership.rb', line 212

def login=()
  @json['user']['content']['login'] = 
end

#metaObject



386
387
388
# File 'lib/gooddata/models/membership.rb', line 386

def meta
  data['meta'] || {}
end

#nameObject



382
383
384
# File 'lib/gooddata/models/membership.rb', line 382

def name
  (first_name || '') + (last_name || '')
end

#obj_idString

Gets user raw object ID

Returns:

  • (String)

    Raw Object ID



219
220
221
# File 'lib/gooddata/models/membership.rb', line 219

def obj_id
  uri.split('/').last
end

#permissionsHash

Gets the permissions

Returns:

  • (Hash)

    Hash with permissions



226
227
228
229
230
231
232
233
234
235
# File 'lib/gooddata/models/membership.rb', line 226

def permissions
  res = {}

  tmp = client.get @json['user']['links']['permissions']
  tmp['associatedPermissions']['permissions'].each do |permission_name, permission_value|
    res[permission_name] = permission_value
  end

  res
end

#phoneString

Gets the phone number

Returns:

  • (String)

    Phone number



240
241
242
# File 'lib/gooddata/models/membership.rb', line 240

def phone
  @json['user']['content']['phonenumber'] || ''
end

#phone=(new_phone_number) ⇒ Object

Sets the phone number

Parameters:

  • new_phone_number (String)

    New phone number to be assigned



247
248
249
# File 'lib/gooddata/models/membership.rb', line 247

def phone=(new_phone_number)
  @json['user']['content']['phonenumber'] = new_phone_number
end

#profileObject

Gets profile of this membership



252
253
254
255
# File 'lib/gooddata/models/membership.rb', line 252

def profile
  raw = client.get @json['user']['links']['self']
  client.create(GoodData::Profile, raw)
end

#profile_urlObject

Gets URL of profile membership



258
259
260
# File 'lib/gooddata/models/membership.rb', line 258

def profile_url
  @json['user']['links']['self']
end

#project_idObject

Gets project id



269
270
271
# File 'lib/gooddata/models/membership.rb', line 269

def project_id
  @json['user']['links']['roles'].split('/')[3]
end

#project_urlObject

Gets project url



274
275
276
# File 'lib/gooddata/models/membership.rb', line 274

def project_url
  @json['user']['links']['roles'].split('/')[0..3].join('/')
end

#projectsArray<GoodData::Project>

Gets the projects of user

Returns:



281
282
283
284
285
286
287
288
# File 'lib/gooddata/models/membership.rb', line 281

def projects
  tmp = client.get @json['user']['links']['projects']
  tmp['projects'].map do |project_meta|
    project_uri = project_meta['project']['links']['self']
    project = client.get project_uri
    client.create(GoodData::Project, project)
  end
end

#roleGoodData::ProjectRole

Gets first role

Returns:



293
294
295
# File 'lib/gooddata/models/membership.rb', line 293

def role
  roles && roles.first
end

#rolesArray<GoodData::ProjectRole>

Gets the project roles of user

Returns:



300
301
302
303
304
305
306
307
308
309
310
# File 'lib/gooddata/models/membership.rb', line 300

def roles
  # TODO: Implement getting roles in project and cache them there
  # See: https://jira.intgdc.com/browse/TMA-112
  roles_link = GoodData::Helpers.get_path(@json, %w(user links roles))
  return unless roles_link
  tmp = client.get roles_link
  tmp['associatedRoles']['roles'].pmap do |role_uri|
    role = client.get role_uri
    client.create(GoodData::ProjectRole, role)
  end
end

#statusString

Gets the status

Returns:

  • (String)

    Status



315
316
317
# File 'lib/gooddata/models/membership.rb', line 315

def status
  @json['user']['content']['status'] || ''
end

#titleString

Gets the title

Returns:

  • (String)

    User title



322
323
324
# File 'lib/gooddata/models/membership.rb', line 322

def title
  @json['user']['meta']['title'] || ''
end

#title=(new_title) ⇒ Object

Sets the title

Parameters:

  • new_title (String)

    New title to be assigned



329
330
331
# File 'lib/gooddata/models/membership.rb', line 329

def title=(new_title)
  @json['user']['content']['title'] = new_title
end

#to_hashObject



398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
# File 'lib/gooddata/models/membership.rb', line 398

def to_hash
  tmp = GoodData::Helpers.symbolize_keys(content.merge(meta).merge('uri' => uri))
  [
    [:userRoles, :role],
    [:companyName, :company_name],
    [:phoneNumber, :phone_number],
    [:firstname, :first_name],
    [:lastname, :last_name],
    [:authenticationModes, :authentication_modes]
  ].each do |vals|
    wire, rb = vals
    tmp[rb] = tmp[wire]
    tmp.delete(wire)
  end
  tmp
end

#updatedDateTime

Gets the date when updated

Returns:

  • (DateTime)

    Date of last update



336
337
338
# File 'lib/gooddata/models/membership.rb', line 336

def updated
  DateTime.parse(@json['user']['meta']['updated'])
end

#uriString

Gets the object URI

Returns:

  • (String)

    Object URI



343
344
345
# File 'lib/gooddata/models/membership.rb', line 343

def uri
  links['self']
end

#user_groupsObject



415
416
417
# File 'lib/gooddata/models/membership.rb', line 415

def user_groups
  project.user_groups(:all, user: obj_id)
end