Class: YiffSpace::Utils::UserResolvable

Inherits:
Object
  • Object
show all
Defined in:
lib/yiffspace/utils/user_resolvable.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user, ip_addr, validate: true) ⇒ UserResolvable

Returns a new instance of UserResolvable.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/yiffspace/utils/user_resolvable.rb', line 11

def initialize(user, ip_addr, validate: true)
  if user.is_a?(YiffSpace.config.user_resolvable_class)
    TraceLogger.warn(self.class.name.demodulize, "Unexpectedly received #{user.class.name} for user argument")
    user = recursive_resolve(user)
  end
  @user = user
  ip_addr = ip_addr.to_s if ip_addr.is_a?(IPAddr)
  @ip_addr = ip_addr
  return unless validate
  raise(ArgumentError, "Expected User for user argument, got #{user.inspect} (#{user.class.name})") unless user.is_a?(YiffSpace.config.user_class)
  raise(ArgumentError, "Expected String for ip_addr argument, got #{ip_addr.inspect} (#{ip_addr.class.name})") unless ip_addr.is_a?(String)
end

Instance Attribute Details

#ip_addrObject (readonly)

Returns the value of attribute ip_addr.



9
10
11
# File 'lib/yiffspace/utils/user_resolvable.rb', line 9

def ip_addr
  @ip_addr
end

#userObject (readonly) Also known as: resolve

Returns the value of attribute user.



9
10
11
# File 'lib/yiffspace/utils/user_resolvable.rb', line 9

def user
  @user
end

Class Method Details

.recursive_resolve(resolvable) ⇒ Object



40
41
42
43
44
# File 'lib/yiffspace/utils/user_resolvable.rb', line 40

def self.recursive_resolve(resolvable)
  result = resolvable
  result = result.resolve while result.is_a?(YiffSpace.config.user_resolvable_class)
  result
end

Instance Method Details

#==(other) ⇒ Object



46
47
48
49
50
# File 'lib/yiffspace/utils/user_resolvable.rb', line 46

def ==(other)
  return other == user if other.is_a?(YiffSpace.config.user_class)

  other.is_a?(YiffSpace.config.user_resolvable_class) && user == other.user
end

#===(other) ⇒ Object



52
53
54
# File 'lib/yiffspace/utils/user_resolvable.rb', line 52

def ===(other)
  (other == YiffSpace.config.user_like_class && user.is_a?(YiffSpace.config.user_class)) || super
end

#is_a?(other) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/yiffspace/utils/user_resolvable.rb', line 56

def is_a?(other)
  (other == YiffSpace.config.user_like_class && user.is_a?(YiffSpace.config.user_class)) || super
end

#resolvable(ip_addr = nil) ⇒ Object



26
27
28
29
# File 'lib/yiffspace/utils/user_resolvable.rb', line 26

def resolvable(ip_addr = nil)
  @ip_addr = ip_addr if ip_addr.present?
  self
end