Class: Attio::WorkspaceMember

Inherits:
APIResource show all
Defined in:
lib/attio/resources/workspace_member.rb

Overview

Represents a workspace member in Attio (read-only)

Constant Summary

Constants inherited from APIResource

APIResource::SKIP_KEYS

Instance Attribute Summary collapse

Attributes inherited from APIResource

#created_at, #id, #metadata

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from APIResource

#==, #[], #[]=, api_operations, attr_attio, #changed, #changed?, #changed_attributes, #changes, #each, execute_request, #fetch, #hash, id_param_name, #inspect, #key?, #keys, #persisted?, prepare_params_for_create, prepare_params_for_update, #reset_changes!, resource_name, #resource_path, #revert!, #to_json, #update_attributes, #update_from, validate_id!, #values

Constructor Details

#initialize(attributes = {}, opts = {}) ⇒ WorkspaceMember



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/attio/resources/workspace_member.rb', line 20

def initialize(attributes = {}, opts = {})
  super
  normalized_attrs = normalize_attributes(attributes)
  @email_address = normalized_attrs[:email_address]
  @first_name = normalized_attrs[:first_name]
  @last_name = normalized_attrs[:last_name]
  @avatar_url = normalized_attrs[:avatar_url]
  @access_level = normalized_attrs[:access_level]
  @status = normalized_attrs[:status]
  @invited_at = parse_timestamp(normalized_attrs[:invited_at])
  @last_accessed_at = parse_timestamp(normalized_attrs[:last_accessed_at])
end

Instance Attribute Details

#access_levelObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def access_level
  @access_level
end

#avatar_urlObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def avatar_url
  @avatar_url
end

#email_addressObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def email_address
  @email_address
end

#first_nameObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def first_name
  @first_name
end

#invited_atObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def invited_at
  @invited_at
end

#last_accessed_atObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def last_accessed_at
  @last_accessed_at
end

#last_nameObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def last_name
  @last_name
end

#statusObject (readonly)

Read-only attributes - workspace members are immutable via API



17
18
19
# File 'lib/attio/resources/workspace_member.rb', line 17

def status
  @status
end

Class Method Details

.active(**opts) ⇒ Object

List active members only



126
127
128
# File 'lib/attio/resources/workspace_member.rb', line 126

def active(**opts)
  list(**opts).select(&:active?)
end

.admins(**opts) ⇒ Object

List admin members only



131
132
133
# File 'lib/attio/resources/workspace_member.rb', line 131

def admins(**opts)
  list(**opts).select(&:admin?)
end

.createObject

This resource doesn't support creation, updates, or deletion

Raises:

  • (NotImplementedError)


136
137
138
# File 'lib/attio/resources/workspace_member.rb', line 136

def create(*)
  raise NotImplementedError, "Workspace members cannot be created via API"
end

.deleteObject

Raises:

  • (NotImplementedError)


144
145
146
# File 'lib/attio/resources/workspace_member.rb', line 144

def delete(*)
  raise NotImplementedError, "Workspace members cannot be deleted via API"
end

.find_by(**conditions) ⇒ Object

Find member by attribute using Rails-style syntax



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/attio/resources/workspace_member.rb', line 107

def find_by(**conditions)
  # Extract any opts that aren't conditions
  opts = {}
  known_opts = [:api_key, :timeout, :idempotency_key]
  known_opts.each do |opt|
    opts[opt] = conditions.delete(opt) if conditions.key?(opt)
  end

  # Currently only supports email
  if conditions.key?(:email)
    email = conditions[:email]
    list(**opts).find { |member| member.email_address == email } ||
      raise(NotFoundError, "Workspace member with email '#{email}' not found")
  else
    raise ArgumentError, "find_by only supports email attribute for workspace members"
  end
end

.me(**opts) ⇒ Object Also known as: current

Get the current user (the API key owner)



93
94
95
96
97
98
99
100
101
102
103
# File 'lib/attio/resources/workspace_member.rb', line 93

def me(**opts)
  # The /v2/workspace_members/me endpoint doesn't exist, use /v2/self instead
  # and then fetch the workspace member details
  self_response = execute_request(:GET, "self", {}, opts)
  member_id = self_response[:authorized_by_workspace_member_id]
  self_response[:workspace_id]

  # Now fetch the actual workspace member
  members = list(**opts)
  members.find { |m| m.id[:workspace_member_id] == member_id }
end

.resource_pathString

API endpoint path for workspace members



12
13
14
# File 'lib/attio/resources/workspace_member.rb', line 12

def self.resource_path
  "workspace_members"
end

.updateObject

Raises:

  • (NotImplementedError)


140
141
142
# File 'lib/attio/resources/workspace_member.rb', line 140

def update(*)
  raise NotImplementedError, "Workspace members cannot be updated via API"
end

Instance Method Details

#active?Boolean

Check if member is active



39
40
41
# File 'lib/attio/resources/workspace_member.rb', line 39

def active?
  status == "active"
end

#admin?Boolean

Check if member is admin



54
55
56
# File 'lib/attio/resources/workspace_member.rb', line 54

def admin?
  access_level == "admin"
end

#deactivated?Boolean

Check if member is deactivated



49
50
51
# File 'lib/attio/resources/workspace_member.rb', line 49

def deactivated?
  status == "deactivated"
end

#destroyObject

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/attio/resources/workspace_member.rb', line 72

def destroy(*)
  raise NotImplementedError, "Workspace members cannot be deleted via API"
end

#full_nameObject

Get full name



34
35
36
# File 'lib/attio/resources/workspace_member.rb', line 34

def full_name
  [first_name, last_name].compact.join(" ")
end

#invited?Boolean

Check if member is invited



44
45
46
# File 'lib/attio/resources/workspace_member.rb', line 44

def invited?
  status == "invited"
end

#saveObject

Workspace members cannot be modified via API

Raises:

  • (NotImplementedError)


64
65
66
# File 'lib/attio/resources/workspace_member.rb', line 64

def save(*)
  raise NotImplementedError, "Workspace members cannot be updated via API"
end

#standard?Boolean

Check if member is standard user



59
60
61
# File 'lib/attio/resources/workspace_member.rb', line 59

def standard?
  access_level == "standard"
end

#to_hHash

Convert workspace member to hash representation



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/attio/resources/workspace_member.rb', line 78

def to_h
  super.merge(
    email_address: email_address,
    first_name: first_name,
    last_name: last_name,
    avatar_url: avatar_url,
    access_level: access_level,
    status: status,
    invited_at: invited_at&.iso8601,
    last_accessed_at: last_accessed_at&.iso8601
  ).compact
end

#updateObject

Raises:

  • (NotImplementedError)


68
69
70
# File 'lib/attio/resources/workspace_member.rb', line 68

def update(*)
  raise NotImplementedError, "Workspace members cannot be updated via API"
end