Class: UserCard

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/user_card.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.access_cards_placeholderObject



122
123
124
# File 'app/models/user_card.rb', line 122

def self.access_cards_placeholder
  CONFIG[:access_by].map{|cardname, garbage| (I18n.t cardname, scope: 'access_cards')}.join(',')
end

Instance Method Details

#access_cardsObject



83
84
85
86
87
88
89
# File 'app/models/user_card.rb', line 83

def access_cards
  [{cards: self.email_access_cards, classname: 'EmailAccessCard'},
   {cards: self.nickname_access_cards, classname: 'NicknameAccessCard'},
   {cards: self.phone_access_cards, classname: 'PhoneAccessCard'},
   {cards: self.oauth_access_cards, classname: 'OAuthAccessCard'},
  ]
end

#access_cards_countObject



91
92
93
# File 'app/models/user_card.rb', line 91

def access_cards_count
  self.email_access_cards.count + self.phone_access_cards.count + self.nickname_access_cards.count + self.oauth_access_cards.count
end

#active?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'app/models/user_card.rb', line 27

def active?
  self.status == 1
end

#authorize!(access_card) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/user_card.rb', line 58

def authorize! access_card
# пользователь онлайн
  access_card.update(active: true)
# такое вот решение из-за невозможности актив рекорда за 1 раз поработать с одной моделью дважды
  CONFIG[:access_cards].each do |type, max|
    if "#{type}AccessCard".classify != access_card.class.name
      "#{type}AccessCard".classify.constantize.where(user_card_id: self.id).update(active: false)
    else
      "#{type}AccessCard".classify.constantize.where(user_card_id: self.id).where.not(id: access_card.id).update(active: false)
    end
  end

  $session_manager.authorize! self.id

  self.update({online: true})
end

#ban!Object

забанить



54
55
56
# File 'app/models/user_card.rb', line 54

def ban!
  self.update(status: 2)
end

#banned?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/models/user_card.rb', line 35

def banned?
  self.status == 2
end

#check_access_level(_alias) ⇒ Object



154
155
156
# File 'app/models/user_card.rb', line 154

def check_access_level _alias
  CONFIG[:access_aliases][self.access_level.to_sym] >= CONFIG[:access_aliases][_alias]
end

#client?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'app/models/user_card.rb', line 39

def client?
  self.access_level == 'client'
end

#confirmObject

подтвердить



43
44
45
# File 'app/models/user_card.rb', line 43

def confirm
  self.update(status: 1)
end

#confirm_access_codeObject

приготовить код



47
48
49
50
51
52
# File 'app/models/user_card.rb', line 47

def confirm_access_code
  require 'link'
  l = Link.new self.id
  pepper_email = Digest::MD5.new.update("#{CONFIG[:salt]} #{l.get} и #{self.my_email} добавим #{CONFIG[:pepper]}!").to_s
  "DIGITAL(.)(.)HEROES#{pepper_email}" #nice one рецепт от Николая Мартынова .)
end

#my_active_cardObject



79
80
81
# File 'app/models/user_card.rb', line 79

def my_active_card
  self.email_access_cards.find_by(active: true) || self.phone_access_cards.find_by(active: true) || self.nickname_access_cards.find_by(active: true) || self.oauth_access_cards.find_by(active: true) || false
end

#my_emailObject



138
139
140
# File 'app/models/user_card.rb', line 138

def my_email
  my_emails.first
end

#my_emailsObject



134
135
136
# File 'app/models/user_card.rb', line 134

def my_emails
  self.email_access_cards.pluck(:value)
end

#my_nameObject



113
114
115
116
117
118
119
120
# File 'app/models/user_card.rb', line 113

def my_name
  active_card = self.my_active_card
  if (/Oauth/ =~ active_card.class.name).present?
    "#{active_card.firstname} #{active_card.lastname}"
  else
    active_card.value
  end
end

#my_nicknameObject



130
131
132
# File 'app/models/user_card.rb', line 130

def my_nickname
  my_nicknames.first
end

#my_nicknamesObject



126
127
128
# File 'app/models/user_card.rb', line 126

def my_nicknames
  self.nickname_access_cards.pluck(:value)
end

#my_phoneObject



146
147
148
# File 'app/models/user_card.rb', line 146

def my_phone
  my_phones.first
end

#my_phonesObject



142
143
144
# File 'app/models/user_card.rb', line 142

def my_phones
  self.phone_access_cards.pluck(:value)
end

#normalizeObject



75
76
77
# File 'app/models/user_card.rb', line 75

def normalize
  self.password.strip! unless self.password.nil?
end

#online_status_broadcastObject



109
110
111
# File 'app/models/user_card.rb', line 109

def online_status_broadcast
  # ActionCable.server.broadcast "radioJXL", {event: 'online_status', uid: self.userable.id, online: self.online, name: self.my_name} if saved_change_to_attribute?(:online)
end

#passive?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'app/models/user_card.rb', line 31

def passive?
  self.status == 0
end

#set_active_cardObject



95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/models/user_card.rb', line 95

def set_active_card
  unless my_active_card
    if self.nickname_access_cards.any?
      self.nickname_access_cards.first.update(active: true)
    elsif self.email_access_cards.any?
      self.email_access_cards.first.update(active: true)
    elsif self.phone_access_cards.any?
      self.phone_access_cards.first.update(active: true)
    elsif self.oauth_access_cards.any?
      self.oauth_access_cards.first.update(active: true)
    end
  end
end

#whoisObject



150
151
152
# File 'app/models/user_card.rb', line 150

def whois
  self.userable.whoami
end