refactor bit flags code
This commit is contained in:
@@ -1,12 +1,10 @@
|
|||||||
|
require 'danbooru/has_bit_flags'
|
||||||
|
|
||||||
class Post < ActiveRecord::Base
|
class Post < ActiveRecord::Base
|
||||||
class ApprovalError < Exception ; end
|
class ApprovalError < Exception ; end
|
||||||
class DisapprovalError < Exception ; end
|
class DisapprovalError < Exception ; end
|
||||||
class SearchError < Exception ; end
|
class SearchError < Exception ; end
|
||||||
|
|
||||||
BOOLEAN_ATTRIBUTES = {
|
|
||||||
:has_embedded_notes => 0x0001
|
|
||||||
}
|
|
||||||
|
|
||||||
attr_accessor :old_tag_string, :old_parent_id, :old_source, :old_rating, :has_constraints, :disable_versioning, :view_count
|
attr_accessor :old_tag_string, :old_parent_id, :old_source, :old_rating, :has_constraints, :disable_versioning, :view_count
|
||||||
after_destroy :delete_files
|
after_destroy :delete_files
|
||||||
after_destroy :delete_remote_files
|
after_destroy :delete_remote_files
|
||||||
@@ -1597,24 +1595,12 @@ class Post < ActiveRecord::Base
|
|||||||
extend SearchMethods
|
extend SearchMethods
|
||||||
include PixivMethods
|
include PixivMethods
|
||||||
include IqdbMethods
|
include IqdbMethods
|
||||||
|
include Danbooru::HasBitFlags
|
||||||
|
|
||||||
BOOLEAN_ATTRIBUTES.each do |boolean_attribute, bit_flag|
|
BOOLEAN_ATTRIBUTES = %w(
|
||||||
define_method(boolean_attribute) do
|
has_embedded_notes
|
||||||
bit_flags & bit_flag > 0
|
)
|
||||||
end
|
has_bit_flags BOOLEAN_ATTRIBUTES
|
||||||
|
|
||||||
define_method("#{boolean_attribute}?") do
|
|
||||||
bit_flags & bit_flag > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
define_method("#{boolean_attribute}=") do |val|
|
|
||||||
if val.to_s =~ /t|1|y/
|
|
||||||
self.bit_flags |= bit_flag
|
|
||||||
else
|
|
||||||
self.bit_flags &= ~bit_flag
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def visible?
|
def visible?
|
||||||
return false if !Danbooru.config.can_user_see_post?(CurrentUser.user, self)
|
return false if !Danbooru.config.can_user_see_post?(CurrentUser.user, self)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
|
require 'danbooru/has_bit_flags'
|
||||||
|
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
class Error < Exception ; end
|
class Error < Exception ; end
|
||||||
@@ -16,25 +17,25 @@ class User < ActiveRecord::Base
|
|||||||
ADMIN = 50
|
ADMIN = 50
|
||||||
end
|
end
|
||||||
|
|
||||||
|
BOOLEAN_ATTRIBUTES = %w(
|
||||||
|
is_banned
|
||||||
|
has_mail
|
||||||
|
receive_email_notifications
|
||||||
|
always_resize_images
|
||||||
|
enable_post_navigation
|
||||||
|
new_post_navigation_layout
|
||||||
|
enable_privacy_mode
|
||||||
|
enable_sequential_post_navigation
|
||||||
|
hide_deleted_posts
|
||||||
|
style_usernames
|
||||||
|
enable_auto_complete
|
||||||
|
show_deleted_children
|
||||||
|
has_saved_searches
|
||||||
|
can_approve_posts
|
||||||
|
)
|
||||||
|
|
||||||
# bit_prefs is 64 bits signed so theoretical maximum
|
include Danbooru::HasBitFlags
|
||||||
# is 0x8000 0000 0000 0000
|
has_bit_flags BOOLEAN_ATTRIBUTES, :field => "bit_prefs"
|
||||||
BOOLEAN_ATTRIBUTES = {
|
|
||||||
:is_banned => 0x0001,
|
|
||||||
:has_mail => 0x0002,
|
|
||||||
:receive_email_notifications => 0x0004,
|
|
||||||
:always_resize_images => 0x0008,
|
|
||||||
:enable_post_navigation => 0x0010,
|
|
||||||
:new_post_navigation_layout => 0x0020,
|
|
||||||
:enable_privacy_mode => 0x0040,
|
|
||||||
:enable_sequential_post_navigation => 0x0080,
|
|
||||||
:hide_deleted_posts => 0x0100,
|
|
||||||
:style_usernames => 0x0200,
|
|
||||||
:enable_auto_complete => 0x0400,
|
|
||||||
:show_deleted_children => 0x0800,
|
|
||||||
:has_saved_searches => 0x1000,
|
|
||||||
:can_approve_posts => 0x2000
|
|
||||||
}
|
|
||||||
|
|
||||||
attr_accessor :password, :old_password
|
attr_accessor :password, :old_password
|
||||||
attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :as => [:moderator, :janitor, :contributor, :gold, :member, :anonymous, :default, :builder, :admin]
|
attr_accessible :dmail_filter_attributes, :enable_privacy_mode, :enable_post_navigation, :new_post_navigation_layout, :password, :old_password, :password_confirmation, :password_hash, :email, :last_logged_in_at, :last_forum_read_at, :has_mail, :receive_email_notifications, :comment_threshold, :always_resize_images, :favorite_tags, :blacklisted_tags, :name, :ip_addr, :time_zone, :default_image_size, :enable_sequential_post_navigation, :per_page, :hide_deleted_posts, :style_usernames, :enable_auto_complete, :custom_style, :show_deleted_children, :as => [:moderator, :janitor, :contributor, :gold, :member, :anonymous, :default, :builder, :admin]
|
||||||
@@ -774,24 +775,6 @@ class User < ActiveRecord::Base
|
|||||||
include CountMethods
|
include CountMethods
|
||||||
extend SearchMethods
|
extend SearchMethods
|
||||||
|
|
||||||
BOOLEAN_ATTRIBUTES.each do |boolean_attribute, bit_flag|
|
|
||||||
define_method(boolean_attribute) do
|
|
||||||
bit_prefs & bit_flag > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
define_method("#{boolean_attribute}?") do
|
|
||||||
bit_prefs & bit_flag > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
define_method("#{boolean_attribute}=") do |val|
|
|
||||||
if val.to_s =~ /t|1|y/
|
|
||||||
self.bit_prefs |= bit_flag
|
|
||||||
else
|
|
||||||
self.bit_prefs &= ~bit_flag
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize_default_image_size
|
def initialize_default_image_size
|
||||||
self.default_image_size = "large"
|
self.default_image_size = "large"
|
||||||
end
|
end
|
||||||
|
|||||||
33
lib/danbooru/has_bit_flags.rb
Normal file
33
lib/danbooru/has_bit_flags.rb
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
module Danbooru
|
||||||
|
module HasBitFlags
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
# NOTE: the ordering of attributes has to be fixed#
|
||||||
|
# new attributes should be appended to the end.
|
||||||
|
def has_bit_flags(attributes, options = {})
|
||||||
|
field = options[:field] || :bit_flags
|
||||||
|
|
||||||
|
attributes.each.with_index do |attribute, i|
|
||||||
|
bit_flag = 1 << i
|
||||||
|
|
||||||
|
define_method(attribute) do
|
||||||
|
send(field) & bit_flag > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
define_method("#{attribute}?") do
|
||||||
|
send(field) & bit_flag > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
define_method("#{attribute}=") do |val|
|
||||||
|
if val.to_s =~ /t|1|y/
|
||||||
|
send("#{field}=", send(field) | bit_flag)
|
||||||
|
else
|
||||||
|
send("#{field}=", send(field) & ~bit_flag)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user