Class: YiffSpace::Auth::DiscordInfo

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

Constant Summary collapse

ATTRIBUTES =

locale, mfa_enabled, and premium_type are not present for legacy users backfilled from api data, we don’t need that data either way

%i[id flags avatar banner username global_name public_flags discriminator].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of DiscordInfo.



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

def initialize(options = {}, **kwargs)
  @data = options.merge(kwargs).with_indifferent_access
  ATTRIBUTES.each do |attr|
    instance_variable_set("@#{attr}", @data[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)


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

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



58
59
60
61
62
# File 'lib/yiffspace/auth/discord_info.rb', line 58

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

  from_json(data)
end

Instance Method Details

#serializable_hashObject



41
42
43
# File 'lib/yiffspace/auth/discord_info.rb', line 41

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

#to_sessionObject



45
46
47
# File 'lib/yiffspace/auth/discord_info.rb', line 45

def to_session
  serializable_hash
end

#update_avatarObject



33
34
35
# File 'lib/yiffspace/auth/discord_info.rb', line 33

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

#update_bannerObject



37
38
39
# File 'lib/yiffspace/auth/discord_info.rb', line 37

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