Replace AnonymousUser with User.new.

* Replace AnonymousUser null object with a readonly, unpersisted User object.

* Default always_resize_images to true (previously it was true for
  anonymous users, but false for new members).

* Default comment_threshold to -1 for anonymous users (previously it was
  0 for anonymous but -1 for new members).
This commit is contained in:
evazion
2018-09-09 18:56:03 -05:00
parent cb2d85d925
commit e546e52bd7
3 changed files with 14 additions and 301 deletions

View File

@@ -1,297 +0,0 @@
# This is a proxy class to make various nil checks unnecessary
class AnonymousUser
def id
nil
end
def level
0
end
def level_string
"Anonymous"
end
def comment_threshold
0
end
def created_at
Time.now
end
def updated_at
Time.now
end
def dmail_filter
nil
end
def name
"Anonymous"
end
def pretty_name
"Anonymous"
end
def is_anonymous?
true
end
def is_banned_or_ip_banned?
false
end
def has_mail?
false
end
def has_forum_been_updated?
false
end
def has_permission?(obj, foreign_key = :user_id)
false
end
def ban
false
end
def always_resize_images?
true
end
def show_samples?
true
end
def favorite_tags
nil
end
def upload_limit
0
end
def base_upload_limit
0
end
def uploaded_tags
""
end
def uploaded_tags_with_types
[]
end
def recent_tags
""
end
def recent_tags_with_types
[]
end
def can_upload?
false
end
def can_comment?
false
end
def is_comment_limited?
true
end
def can_remove_from_pools?
false
end
def can_view_flagger?(flagger_id)
false
end
def can_view_flagger_on_post?(flag)
false
end
def can_approve_posts?
false
end
def blacklisted_tags
["spoilers", "guro", "scat", "furry -rating:s"].join("\n")
end
def time_zone
"Eastern Time (US & Canada)"
end
def default_image_size
"large"
end
def email
""
end
def last_forum_read_at
Time.now
end
def update_column(*params)
end
def increment!(field)
end
def decrement!(field)
end
def role
:anonymous
end
def tag_query_limit
2
end
def favorite_limit
0
end
def favorite_count
0
end
def enable_post_navigation
true
end
def new_post_navigation_layout
true
end
def enable_privacy_mode
false
end
def hide_favorites?
false
end
def enable_sequential_post_navigation
true
end
def api_regen_multiplier
1
end
def api_burst_limit
5
end
def statement_timeout
3_000
end
def per_page
Danbooru.config.posts_per_page
end
def hide_deleted_posts?
false
end
def style_usernames?
false
end
def dmail_count
""
end
def enable_auto_complete
true
end
def custom_style
""
end
def show_deleted_children?
false
end
def post_disapprovals
PostDisapproval.none
end
def saved_searches
SavedSearch.none
end
def has_saved_searches?
false
end
def show_saved_searches?
false
end
def favorite_groups
[]
end
def can_upload_free?
false
end
def disable_categorized_saved_searches?
false
end
def disable_tagged_filenames?
false
end
def ban_expired?
false
end
def disable_cropped_thumbnails?
false
end
def disable_mobile_gestures?
false
end
def enable_safe_mode?
false
end
def disable_responsive_mode?
false
end
def disable_post_tooltips?
false
end
def enable_recommended_posts?
false
end
User::Roles.reject {|r| r == :anonymous}.each do |name|
define_method("is_#{name}?") do
false
end
end
end

View File

@@ -11,7 +11,7 @@ class SessionLoader
end
def load
CurrentUser.user = AnonymousUser.new
CurrentUser.user = User.anonymous
CurrentUser.ip_addr = request.remote_ip
if Rails.env.test? && Thread.current[:test_user_id]

View File

@@ -6,6 +6,7 @@ class User < ApplicationRecord
class PrivilegeError < Exception ; end
module Levels
ANONYMOUS = 0
BLOCKED = 10
MEMBER = 20
GOLD = 30
@@ -17,7 +18,6 @@ class User < ApplicationRecord
# Used for `before_action :<role>_only`. Must have a corresponding `is_<role>?` method.
Roles = Levels.constants.map(&:downcase) + [
:anonymous,
:banned,
:approver,
:voter,
@@ -289,6 +289,12 @@ class User < ApplicationRecord
User.find_by!(name: Danbooru.config.system_user)
end
def anonymous
user = User.new(name: "Anonymous", created_at: Time.now)
user.freeze.readonly!
user
end
def level_hash
return {
"Member" => Levels::MEMBER,
@@ -302,6 +308,9 @@ class User < ApplicationRecord
def level_string(value)
case value
when Levels::ANONYMOUS
"Anonymous"
when Levels::BLOCKED
"Banned"
@@ -363,11 +372,11 @@ class User < ApplicationRecord
end
def is_anonymous?
false
level == Levels::ANONYMOUS
end
def is_member?
true
level >= Levels::MEMBER
end
def is_blocked?
@@ -917,6 +926,7 @@ class User < ApplicationRecord
self.new_post_navigation_layout = true
self.enable_sequential_post_navigation = true
self.enable_auto_complete = true
self.always_resize_images = true
end
def presenter