Class: MatrixSdk::MXID

Inherits:
Object show all
Defined in:
lib/matrix_sdk/mxid.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identifier) ⇒ MXID

Returns a new instance of MXID.

Parameters:

  • identifier (String)

    The Matrix ID string in the format of '&<localpart>:<domain>' where '&' is the sigil

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/matrix_sdk/mxid.rb', line 8

def initialize(identifier)
  raise ArgumentError, 'Identifier must be a String' unless identifier.is_a? String
  raise ArgumentError, 'Identifier is too long' if identifier.size > 255
  raise ArgumentError, 'Identifier lacks required data' unless identifier =~ %r{^([@!$+#][^:]+:[^:]+(?::\d+)?)|(\$[A-Za-z0-9+/]+)$}

  # TODO: Community-as-a-Room / Profile-as-a-Room, in case they're going for room aliases
  @sigil = identifier[0]
  @localpart, @domain, @port = identifier[1..].split(':')
  @port = @port.to_i if @port

  raise ArgumentError, 'Identifier is not a valid MXID' unless valid?
end

Instance Attribute Details

#domainObject

Returns the value of attribute domain.



5
6
7
# File 'lib/matrix_sdk/mxid.rb', line 5

def domain
  @domain
end

#localpartObject

Returns the value of attribute localpart.



5
6
7
# File 'lib/matrix_sdk/mxid.rb', line 5

def localpart
  @localpart
end

#portObject

Returns the value of attribute port.



5
6
7
# File 'lib/matrix_sdk/mxid.rb', line 5

def port
  @port
end

#sigilObject

Returns the value of attribute sigil.



5
6
7
# File 'lib/matrix_sdk/mxid.rb', line 5

def sigil
  @sigil
end

Instance Method Details

#==(other) ⇒ Boolean

Check if two MXIDs are equal

Returns:

  • (Boolean)


140
141
142
# File 'lib/matrix_sdk/mxid.rb', line 140

def ==(other)
  to_s == other.to_s
end

#event?Boolean

Check if the ID is of a event

Returns:

  • (Boolean)

    if the ID is of the event_id type



88
89
90
# File 'lib/matrix_sdk/mxid.rb', line 88

def event?
  type == :event_id
end

#group?Boolean

Check if the ID is of a group

Returns:

  • (Boolean)

    if the ID is of the group_id type



76
77
78
# File 'lib/matrix_sdk/mxid.rb', line 76

def group?
  type == :group_id
end

#homeserverString

Gets the homeserver part of the ID

Examples:

A simple MXID

id = MXID.new('@alice:example.org')
id.homeserver
# => 'example.org'

A fully qualified MXID

id = MXID.new('@user:some.direct.domain:443')
id.homeserver
# => 'some.direct.domain:443'

Returns:

  • (String)


34
35
36
37
# File 'lib/matrix_sdk/mxid.rb', line 34

def homeserver
  port_s = port ? ":#{port}" : ''
  domain ? domain + port_s : ''
end

#homeserver_suffixObject

Gets the homserver part of the ID as a suffix (':homeserver')



40
41
42
# File 'lib/matrix_sdk/mxid.rb', line 40

def homeserver_suffix
  ":#{homeserver}" if domain
end

#room?Boolean

Check if the ID is of a room

Returns:

  • (Boolean)

    if the ID is of the room_id or room_alias types



82
83
84
# File 'lib/matrix_sdk/mxid.rb', line 82

def room?
  type == :room_id || type == :room_alias
end

#room_alias?Boolean

Check if the ID is a room_alias

Returns:

  • (Boolean)

    if the ID is of the room_alias type



100
101
102
# File 'lib/matrix_sdk/mxid.rb', line 100

def room_alias?
  type == :room_alias
end

#room_id?Boolean

Check if the ID is a room_id

Returns:

  • (Boolean)

    if the ID is of the room_id type



94
95
96
# File 'lib/matrix_sdk/mxid.rb', line 94

def room_id?
  type == :room_id
end

#to_sObject



44
45
46
# File 'lib/matrix_sdk/mxid.rb', line 44

def to_s
  "#{sigil}#{localpart}#{homeserver_suffix}"
end

#to_uri(event_id: nil, action: nil, via: nil) ⇒ Object

Converts the MXID to a matrix: URI according to MSC2312

Parameters:

  • event_id (String, MXID) (defaults to: nil)

    An event ID to append to the URI (only valid for rooms)

  • action (String, Symbol) (defaults to: nil)

    The action that should be requested

  • via (Array[String]) (defaults to: nil)

    The list of servers to use for a join

See Also:



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/matrix_sdk/mxid.rb', line 109

def to_uri(event_id: nil, action: nil, via: nil)
  uri = ''

  case sigil
  when '@'
    raise ArgumentError, "can't provide via for user URIs" if via
    raise ArgumentError, "can't provide event_id for user URIs" if event_id

    uri += 'u'
  when '#'
    uri += 'r'
  when '!'
    uri += 'roomid'
  else
    raise ArgumentError, "this MXID can't be converted to a URI"
  end

  uri = "matrix:#{uri}/#{localpart}#{homeserver_suffix}"

  uri += "/e/#{event_id.to_s.delete_prefix('$')}" if event_id
  query = []
  query << "action=#{action}" if action
  [via].flatten.compact.each { |v| query << "via=#{v}" }

  uri += "?#{query.join('&')}" unless query.empty?

  URI(uri)
end

#typeSymbol

Returns the type of the ID

Returns:

  • (Symbol)

    The MXID type, one of (:user_id, :room_id, :event_id, :group_id, or :room_alias)



51
52
53
54
55
56
57
58
59
# File 'lib/matrix_sdk/mxid.rb', line 51

def type
  {
    '@' => :user_id,
    '!' => :room_id,
    '$' => :event_id,
    '+' => :group_id,
    '#' => :room_alias
  }[sigil]
end

#user?Boolean

Check if the ID is of a user

Returns:

  • (Boolean)

    if the ID is of the user_id type



70
71
72
# File 'lib/matrix_sdk/mxid.rb', line 70

def user?
  type == :user_id
end

#valid?Boolean

Checks if the ID is valid

Returns:

  • (Boolean)

    If the ID is a valid Matrix ID



64
65
66
# File 'lib/matrix_sdk/mxid.rb', line 64

def valid?
  !type.nil?
end