class URI::MATRIX

A matrix: URI according to MSC2312

Attributes

action[R]
authority[R]
mxid[R]
mxid2[R]
via[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/matrix_sdk/util/uri.rb, line 22
def initialize(*args)
  super(*args)

  @action = nil
  @authority = nil
  @mxid = nil
  @mxid2 = nil
  @via = nil

  raise InvalidComponentError, 'missing opaque part for matrix URL' if !@opaque && !@path

  if @path
    @authority = @host
    @authority += ":#{@port}" if @port
  else
    @path, @query = @opaque.split('?')
    @query, @fragment = @query.split('#') if @query&.include? '#'
    @path, @fragment = @path.split('#') if @path&.include? '#'
    @path = "/#{path}"
    @opaque = nil
  end

  components = @path.delete_prefix('/').split('/', -1)
  raise InvalidComponentError, 'component count must be 2 or 4' if components.size != 2 && components.size != 4

  sigil = case components.shift
          when 'u', 'user'
            '@'
          when 'r', 'room'
            '#'
          when 'roomid'
            '!'
          else
            raise InvalidComponentError, 'invalid component in path'
          end

  component = components.shift
  raise InvalidComponentError, "component can't be empty" if component.nil? || component.empty?

  @mxid = MatrixSdk::MXID.new("#{sigil}#{component}")

  if components.size == 2
    sigil2 = case components.shift
             when 'e', 'event'
               '$'
             else
               raise InvalidComponentError, 'invalid component in path'
             end
    component = components.shift
    raise InvalidComponentError, "component can't be empty" if component.nil? || component.empty?

    @mxid2 = MatrixSdk::MXID.new("#{sigil2}#{component}")
  end

  return unless @query

  @action = @query.match(/action=([^&]+)/)&.captures&.first&.to_sym
  @via = @query.scan(/via=([^&]+)/)&.flatten&.compact
end

Public Instance Methods

mxid2?() click to toggle source
# File lib/matrix_sdk/util/uri.rb, line 82
def mxid2?
  !@mxid2.nil?
end