class GoodData::Membership

Constants

ASSIGNABLE_MEMBERS

Attributes

json[R]

Public Class Methods

create(data, options = { client: GoodData.connection }) click to toggle source

Apply changes to object.

@param obj [GoodData::User] Object to be modified @param changes [Hash] Hash with modifications @return [GoodData::User] Modified object def apply(obj, changes)

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

end

# 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) click to toggle source
# File lib/gooddata/models/membership.rb, line 66
def diff_list(list1, list2)
  GoodData::Helpers.diff(list1, list2, key: :login)
end
new(json) click to toggle source
# File lib/gooddata/models/membership.rb, line 71
def initialize(json)
  @json = json
end

Public Instance Methods

!=(other) click to toggle source

Checks objects for non-equality

@param right [GoodData::User] Project to compare with @return [Boolean] True if different else false

# File lib/gooddata/models/membership.rb, line 95
def !=(other)
  !(self == other)
end
==(other) click to toggle source

Checks objects for equality

@param right [GoodData::User] Project to compare with @return [Boolean] True if same else false

# 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
content() click to toggle source
# File lib/gooddata/models/membership.rb, line 394
def content
  data['content'] || {}
end
contributor() click to toggle source

Gets the contributor

@return [String] Contributor

# 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
created() click to toggle source

Gets date when created

@return [DateTime] Created date

# File lib/gooddata/models/membership.rb, line 119
def created
  Time.parse(@json['user']['meta']['created'])
end
data() click to toggle source
# File lib/gooddata/models/membership.rb, line 377
def data
  data = @json || {}
  data['user'] || {}
end
deleted?() click to toggle source

Is the member deleted?

@return [Boolean] true if he is deleted

# File lib/gooddata/models/membership.rb, line 126
def deleted?
  !(login =~ /^deleted-/).nil?
end
diff(user) click to toggle source

Gets hash representing diff of users

@param user [GoodData::User] Another profile to compare with @return [Hash] Hash representing diff

# File lib/gooddata/models/membership.rb, line 134
def diff(user)
  GoodData::User.diff(self, user)
end
disable() click to toggle source

Disables membership

@return [GoodData::Membership] returns self

# File lib/gooddata/models/membership.rb, line 365
def disable
  self.status = 'DISABLED'
  self
end
disabled?() click to toggle source

Is the member enabled?

@return [Boolean] true if it is disabled

# File lib/gooddata/models/membership.rb, line 373
def disabled?
  !enabled?
end
email() click to toggle source

Gets the email

@return [String] Email address

# File lib/gooddata/models/membership.rb, line 141
def email
  @json['user']['content']['email'] || ''
end
email=(new_email) click to toggle source

Sets the email

@param new_email [String] New email to be assigned

# File lib/gooddata/models/membership.rb, line 148
def email=(new_email)
  @json['user']['content']['email'] = new_email
end
enable() click to toggle source

Enables membership

@return [GoodData::Membership] returns self

# File lib/gooddata/models/membership.rb, line 350
def enable
  self.status = 'ENABLED'
  self
end
enabled?() click to toggle source

Is the member enabled?

@return [Boolean] true if it is enabled

# File lib/gooddata/models/membership.rb, line 358
def enabled?
  status == 'ENABLED'
end
first_name() click to toggle source

Gets the first name

@return [String] First name

# File lib/gooddata/models/membership.rb, line 155
def first_name
  @json['user']['content']['firstname'] || ''
end
first_name=(new_first_name) click to toggle source

Sets the first name

@param new_first_name [String] New first name to be assigned

# File lib/gooddata/models/membership.rb, line 162
def first_name=(new_first_name)
  @json['user']['content']['firstname'] = new_first_name
end
full_name() click to toggle source

Get full name

@return String Full Name NOTE: This can be tricky to implement correctly for i18n

# File lib/gooddata/models/membership.rb, line 170
def full_name
  "#{first_name} #{last_name}"
end
invitations() click to toggle source

Gets the invitations

@return [Array<GoodData::Invitation>] List of invitations

# 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_name() click to toggle source

Gets the last name

@return [String] Last name

# File lib/gooddata/models/membership.rb, line 191
def last_name
  @json['user']['content']['lastname'] || ''
end
last_name=(new_last_name) click to toggle source

Sets the last name

@param new_last_name [String] New last name to be assigned

# File lib/gooddata/models/membership.rb, line 198
def last_name=(new_last_name)
  @json['user']['content']['lastname'] = new_last_name
end
login() click to toggle source

Gets the login

@return [String] Login

# File lib/gooddata/models/membership.rb, line 205
def login
  @json['user']['content']['login'] || ''
end
login=(new_login) click to toggle source

Sets the last name

@param new_login [String] New login to be assigned

# File lib/gooddata/models/membership.rb, line 212
def login=(new_login)
  @json['user']['content']['login'] = new_login
end
meta() click to toggle source
# File lib/gooddata/models/membership.rb, line 386
def meta
  data['meta'] || {}
end
name() click to toggle source
# File lib/gooddata/models/membership.rb, line 382
def name
  (first_name || '') + (last_name || '')
end
obj_id() click to toggle source

Gets user raw object ID

@return [String] Raw Object ID

# File lib/gooddata/models/membership.rb, line 219
def obj_id
  uri.split('/').last
end
permissions() click to toggle source

Gets the permissions

@return [Hash] Hash with permissions

# 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
phone() click to toggle source

Gets the phone number

@return [String] Phone number

# File lib/gooddata/models/membership.rb, line 240
def phone
  @json['user']['content']['phonenumber'] || ''
end
phone=(new_phone_number) click to toggle source

Sets the phone number

@param new_phone_number [String] New phone number to be assigned

# File lib/gooddata/models/membership.rb, line 247
def phone=(new_phone_number)
  @json['user']['content']['phonenumber'] = new_phone_number
end
profile() click to toggle source

Gets profile of this membership

# File lib/gooddata/models/membership.rb, line 252
def profile
  raw = client.get @json['user']['links']['self']
  client.create(GoodData::Profile, raw)
end
profile_url() click to toggle source

Gets URL of profile membership

# File lib/gooddata/models/membership.rb, line 258
def profile_url
  @json['user']['links']['self']
end
project_id() click to toggle source

Gets project id

# File lib/gooddata/models/membership.rb, line 269
def project_id
  @json['user']['links']['roles'].split('/')[3]
end
project_url() click to toggle source

Gets project url

# File lib/gooddata/models/membership.rb, line 274
def project_url
  @json['user']['links']['roles'].split('/')[0..3].join('/')
end
projects() click to toggle source

Gets the projects of user

@return [Array<GoodData::Project>] Array of projets

# 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
role() click to toggle source

Gets first role

@return [GoodData::ProjectRole] Array of project roles

# File lib/gooddata/models/membership.rb, line 293
def role
  roles && roles.first
end
roles() click to toggle source

Gets the project roles of user

@return [Array<GoodData::ProjectRole>] Array of project roles

# 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
status() click to toggle source

Gets the status

@return [String] Status

# File lib/gooddata/models/membership.rb, line 315
def status
  @json['user']['content']['status'] || ''
end
title() click to toggle source

Gets the title

@return [String] User title

# File lib/gooddata/models/membership.rb, line 322
def title
  @json['user']['meta']['title'] || ''
end
title=(new_title) click to toggle source

Sets the title

@param new_title [String] New title to be assigned

# File lib/gooddata/models/membership.rb, line 329
def title=(new_title)
  @json['user']['content']['title'] = new_title
end
to_hash() click to toggle source
# 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
updated() click to toggle source

Gets the date when updated

@return [DateTime] Date of last update

# File lib/gooddata/models/membership.rb, line 336
def updated
  DateTime.parse(@json['user']['meta']['updated'])
end
uri() click to toggle source

Gets the object URI

@return [String] Object URI

# File lib/gooddata/models/membership.rb, line 343
def uri
  links['self']
end
user_groups() click to toggle source
# File lib/gooddata/models/membership.rb, line 415
def user_groups
  project.user_groups(:all, user: obj_id)
end

Private Instance Methods

status=(new_status) click to toggle source

Sets status to ‘ENABLED’ or ‘DISABLED’

# File lib/gooddata/models/membership.rb, line 422
def status=(new_status)
  payload = {
    'user' => {
      'content' => {
        'status' => new_status.to_s.upcase,
        'userRoles' => @json['user']['content']['userRoles']
      },
      'links' => {
        'self' => uri
      }
    }
  }

  res = client.post("/gdc/projects/#{project_id}/users", payload)
  fail 'Update failed' unless res['projectUsersUpdateResult']['failed'].empty?
  @json['user']['content']['status'] = new_status.to_s.upcase
  self
end