Class: Ably::Models::TokenDetails

Inherits:
Object
  • Object
show all
Includes:
Ably::Modules::ModelCommon
Defined in:
lib/submodules/ably-ruby/lib/ably/models/token_details.rb

Overview

TokenDetails is a class providing details of the token string and the token's associated metadata, constructed from the response from Ably when request in a token via the REST API.

Ruby Time objects are supported in place of Ably ms since epoch time fields. However, if a numeric is provided it must always be expressed in milliseconds as the Ably API always uses milliseconds for time fields.

Constant Summary collapse

TOKEN_EXPIRY_BUFFER =

Buffer in seconds before a token is considered unusable For example, if buffer is 10s, the token can no longer be used for new requests 9s before it expires

15

Instance Attribute Summary collapse

Attributes included from Ably::Modules::ModelCommon

#hash

Instance Method Summary collapse

Methods included from Ably::Modules::ModelCommon

#==, #[], #as_json, included, #to_json

Methods included from Ably::Modules::MessagePack

#to_msgpack

Constructor Details

#initialize(attributes = {}) ⇒ TokenDetails

Returns a new instance of TokenDetails.

Parameters:

  • attributes (defaults to: {})

Options Hash (attributes):

  • :token (String)

    token used to authenticate requests

  • :key_name (String)

    API key name used to create this token

  • :issued (Time, Integer)

    Time the token was issued as Time or Integer in milliseconds

  • :expires (Time, Integer)

    Time the token expires as Time or Integer in milliseconds

  • :capability (String)

    JSON stringified capabilities assigned to this token

  • :client_id (String)

    client ID assigned to this token



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 37

def initialize(attributes = {})
  @hash_object = IdiomaticRubyWrapper(attributes.clone)

  %w(issued expires).map(&:to_sym).each do |time_attribute|
    if self.attributes[time_attribute].kind_of?(Time)
      self.attributes[time_attribute] = (self.attributes[time_attribute].to_f * 1000).round
    end
  end

  self.attributes.freeze
end

Instance Attribute Details

#attributesHash (readonly)

Returns Access the token details Hash object ruby'fied to use symbolized keys.

Returns:

  • (Hash)

    Access the token details Hash object ruby'fied to use symbolized keys



118
119
120
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 118

def attributes
  @hash_object
end

#capabilityHash (readonly)

Returns Capabilities assigned to this token.

Returns:

  • (Hash)

    Capabilities assigned to this token



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 75

def capability
  if attributes.has_key?(:capability)
    capability_val = attributes.fetch(:capability)
    case capability_val
    when Hash
      capability_val
    when Ably::Models::IdiomaticRubyWrapper
      capability_val.as_json
    else
      JSON.parse(attributes.fetch(:capability))
    end
  end
end

#client_idString (readonly)

Returns Optional client ID assigned to this token.

Returns:

  • (String)

    Optional client ID assigned to this token



91
92
93
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 91

def client_id
  attributes[:client_id]
end

#expiresTime (readonly)

Returns Time the token expires.

Returns:

  • (Time)

    Time the token expires



69
70
71
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 69

def expires
  as_time_from_epoch(attributes[:expires], granularity: :ms, allow_nil: :true)
end

#issuedTime (readonly)

Returns Time the token was issued.

Returns:

  • (Time)

    Time the token was issued



63
64
65
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 63

def issued
  as_time_from_epoch(attributes[:issued], granularity: :ms, allow_nil: :true)
end

#key_nameString (readonly)

Returns API key name used to create this token. An API key is made up of an API key name and secret delimited by a :.

Returns:

  • (String)

    API key name used to create this token. An API key is made up of an API key name and secret delimited by a :



57
58
59
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 57

def key_name
  attributes[:key_name]
end

#tokenString (readonly)

Returns Token used to authenticate requests.

Returns:

  • (String)

    Token used to authenticate requests



51
52
53
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 51

def token
  attributes[:token]
end

Instance Method Details

#expired?(attributes = {}) ⇒ Boolean

Returns true if token is expired or about to expire For tokens that have not got an explicit expires attribute expired? will always return true

Parameters:

  • attributes (Hash) (defaults to: {})

Options Hash (attributes):

  • :from (Time)

    Sets a current time from which token expires

Returns:

  • (Boolean)


102
103
104
105
106
107
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 102

def expired?(attributes = {})
  return false if !expires

  from = attributes[:from] || Time.now
  expires < from + TOKEN_EXPIRY_BUFFER
end

#from_token_string?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

True if the TokenDetails was created from an opaque string i.e. no metadata exists for this token

Returns:

  • (Boolean)


112
113
114
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 112

def from_token_string?
  attributes.keys == [:token]
end

#to_sObject



122
123
124
# File 'lib/submodules/ably-ruby/lib/ably/models/token_details.rb', line 122

def to_s
  "<TokenDetails token=#{token} client_id=#{client_id} key_name=#{key_name} issued=#{issued} expires=#{expires} capability=#{capability} expired?=#{expired?}>"
end