refactor bit flags code
This commit is contained in:
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