Skip to content

Commit

Permalink
Add types to user class
Browse files Browse the repository at this point in the history
  • Loading branch information
Arie committed Aug 15, 2024
1 parent a934fac commit 9aed362
Show file tree
Hide file tree
Showing 591 changed files with 274,684 additions and 96,331 deletions.
30 changes: 27 additions & 3 deletions app/models/user.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# frozen_string_literal: true
# typed: false

class User < ActiveRecord::Base
extend T::Sig
devise :omniauthable, :rememberable, :trackable

has_many :reservations
Expand Down Expand Up @@ -30,36 +32,44 @@ def self.find_for_steam_auth(auth, _signed_in_resource = nil)
user
end

sig { returns(String) }
def steam_profile_url
"http://steamcommunity.com/profiles/#{uid}"
end

sig { returns(T::Boolean) }
def donator?
@donator ||= group_ids.include?(Group.donator_group.id)
end

sig { returns(T::Boolean) }
def admin?
@admin ||= group_ids.include?(Group.admin_group.id)
end

sig { returns(T::Boolean) }
def league_admin?
@league_admin ||= group_ids.include?(Group.league_admin_group.id)
end

sig { returns(T::Boolean) }
def streamer?
@streamer ||= group_ids.include?(Group.streamer_group.id)
end

sig { returns(T::Boolean) }
def trusted_api?
@trusted_api ||= group_ids.include?(Group.trusted_api_group.id)
end

sig { returns(T.nilable(T::Boolean)) }
def banned?
return false if ReservationPlayer.whitelisted_uid?(uid)

ReservationPlayer.banned_uid?(uid) || ReservationPlayer.banned_ip?(current_sign_in_ip)
!!(ReservationPlayer.banned_uid?(uid) || ReservationPlayer.banned_ip?(current_sign_in_ip))
end

sig { returns(ActiveSupport::Duration) }
def maximum_reservation_length
if admin? || donator?
10.hours
Expand All @@ -68,6 +78,7 @@ def maximum_reservation_length
end
end

sig { returns(ActiveSupport::Duration) }
def reservation_extension_time
if donator?
1.hour
Expand All @@ -76,27 +87,33 @@ def reservation_extension_time
end
end

sig { returns(T.nilable(Integer)) }
def total_reservation_seconds
reservations.to_a.sum(&:duration)
end

sig { returns(T::Boolean) }
def top10?
Statistic.top_10_users.key?(self)
end

sig { returns(T.nilable(ActiveSupport::TimeWithZone)) }
def donator_until
group_users.find_by_group_id(Group.donator_group)&.expires_at
end

sig { returns(T::Boolean) }
def private_server_option?
@private_server_option ||=
groups.include?(Group.private_user(self))
end

sig { returns(T.nilable(Server)) }
def private_server
Group.private_user(self).servers.first
end

sig { params(server_id: String).returns(T.nilable(T::Boolean)) }
def private_server_id=(server_id)
return unless server_id.to_i.positive?

Expand All @@ -105,39 +122,46 @@ def private_server_id=(server_id)
group_server.save!
end

sig { returns(T.nilable(T::Boolean)) }
def current_sign_in_ip_changed_and_ipv4?
current_sign_in_ip_ipv4? && current_sign_in_ip_changed?
end

sig { returns(T.nilable(T::Boolean)) }
def current_sign_in_ip_ipv4?
self[:current_sign_in_ip] && IPAddr.new(self[:current_sign_in_ip]).ipv4?
end

sig { returns(T.nilable(Geocoder::Result::Base)) }
def geocoded
return unless current_sign_in_ip_ipv4?

@geocoded ||= Geocoder.search(current_sign_in_ip).try(:first)
end

sig { returns(T::Boolean) }
def from_na?
na_timezone? || na_sign_in_ip?
end

sig { returns(T.nilable(T::Boolean)) }
def banned_country?
current_sign_in_ip_ipv4? && ReservationPlayer.banned_country?(current_sign_in_ip)
end

private

sig { returns(T::Boolean) }
def na_timezone?
return false unless time_zone

['US & Canada', 'Canada', 'Chicago', 'New_York', 'Los_Angeles', 'Denver', 'Phoenix', 'Halifax', 'Goose_Bay', 'St_Johns', 'Anchorage'].any? do |zone|
time_zone.match(/#{zone}/)
time_zone&.match(/#{zone}/)
end
end

sig { returns(T::Boolean) }
def na_sign_in_ip?
geocoded && (geocoded.data['continent']['code'] == 'NA')
geocoded&.data&.[]('continent')&.[]('code') == 'NA'
end
end
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.2].define(version: 2024_07_03_131707) do
ActiveRecord::Schema[7.2].define(version: 2024_08_13_083542) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"

Expand Down Expand Up @@ -341,6 +341,7 @@
t.float "longitude"
t.integer "expired_reservations", default: 0
t.string "demos_tf_api_key"
t.boolean "enforce_league_bans"
t.index ["api_key"], name: "index_users_on_api_key", unique: true
t.index ["latitude", "longitude"], name: "index_users_on_latitude_and_longitude"
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
Expand Down
2 changes: 2 additions & 0 deletions sorbet/config
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
--dir
.
--ignore=tmp/
--ignore=vendor/
--suppress-payload-superclass-redefinition-for=Reline::ANSI
1 change: 1 addition & 0 deletions sorbet/rbi/annotations/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
**/*.rbi linguist-vendored=true
4 changes: 2 additions & 2 deletions sorbet/rbi/annotations/actionmailer.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

49 changes: 25 additions & 24 deletions sorbet/rbi/annotations/actionpack.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 2 additions & 4 deletions sorbet/rbi/annotations/actionview.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 44 additions & 0 deletions sorbet/rbi/annotations/activejob.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 2 additions & 4 deletions sorbet/rbi/annotations/activemodel.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 17 additions & 2 deletions sorbet/rbi/annotations/activerecord.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 9aed362

Please sign in to comment.