Class: YiffSpace::Auth::DiscordInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/yiffspace/auth/discord_info.rb

Constant Summary collapse

ATTRIBUTES =
%i[id flags avatar banner locale username avatar_url banner_url global_name mfa_enabled public_flags discriminator].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, **kwargs) ⇒ DiscordInfo

Returns a new instance of DiscordInfo.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/yiffspace/auth/discord_info.rb', line 9

def initialize(options = {}, **kwargs)
  options = options.merge(kwargs).with_indifferent_access
  ATTRIBUTES.each do |attr|
    instance_variable_set("@#{attr}", options[attr])
  end

  return unless YiffSpace.config.auth.update_discord_images

  last_avatar = Rails.cache.fetch("yiffspace:auth:discord_avatar_update:#{id}")
  last_banner = Rails.cache.fetch("yiffspace:auth:discord_banner_update:#{id}")

  if last_avatar != avatar
    Rails.cache.write("yiffspace:auth:discord_avatar_update:#{id}", avatar, expires_in: 30.days)
    update_avatar
  end

  return unless last_banner != banner

  Rails.cache.write("yiffspace:auth:discord_banner_update:#{id}", banner, expires_in: 30.days)
  update_banner
end

Class Method Details

.from_json(data) ⇒ Object

Raises:

  • (ArgumentError)


47
48
49
50
51
52
53
54
# File 'lib/yiffspace/auth/discord_info.rb', line 47

def self.from_json(data)
  raise(ArgumentError, "invalid data") if data.blank?

  data = JSON.parse(data) if data.is_a?(String)
  data = ::YiffSpace::Utils::OpenHash.from(data)

  new(data)
end

.from_session(data) ⇒ Object



56
57
58
59
60
# File 'lib/yiffspace/auth/discord_info.rb', line 56

def self.from_session(data)
  return nil if data.blank?

  from_json(data)
end

Instance Method Details

#serializable_hashObject



39
40
41
# File 'lib/yiffspace/auth/discord_info.rb', line 39

def serializable_hash
  ATTRIBUTES.to_h { |key| [key.to_s, instance_variable_get("@#{key}")] }
end

#to_sessionObject



43
44
45
# File 'lib/yiffspace/auth/discord_info.rb', line 43

def to_session
  serializable_hash
end

#update_avatarObject



31
32
33
# File 'lib/yiffspace/auth/discord_info.rb', line 31

def update_avatar
  Images::Avatar.get_for(id, :discord).update(avatar)
end

#update_bannerObject



35
36
37
# File 'lib/yiffspace/auth/discord_info.rb', line 35

def update_banner
  Images::Banner.get_for(id, :discord).update(banner)
end