@@ -14,8 +14,9 @@ def has_flags(flag_hash, options = {})
1414
1515 class_inheritable_reader :flag_column
1616 write_inheritable_attribute ( :flag_column , options [ :column ] )
17- check_flag_column
18-
17+ flag_column = options [ :column ]
18+ check_flag_column ( flag_column )
19+
1920 class_inheritable_hash :flag_mapping
2021 write_inheritable_attribute ( :flag_mapping , { } )
2122
@@ -24,7 +25,8 @@ def has_flags(flag_hash, options = {})
2425 raise ArgumentError , "has_flags: flag names should be symbols, and #{ flag_name } is not" unless is_valid_flag_name ( flag_name )
2526 raise ArgumentError , "has_flags: flag name #{ flag_name } already defined, please choose different name" if method_defined? ( flag_name )
2627
27- flag_mapping [ flag_name ] = 2 **( flag_key - 1 )
28+ flag_mapping [ flag_column ] ||= { }
29+ flag_mapping [ flag_column ] [ flag_name ] = 1 << ( flag_key - 1 )
2830
2931 class_eval <<-EVAL
3032 def #{ flag_name }
@@ -57,29 +59,26 @@ def self.not_#{flag_name}_condition
5759 end
5860 end
5961
60- def check_flag ( flag )
61- raise ArgumentError , "Invalid flag '#{ flag } '" unless flag_mapping . include? ( flag )
62+ def check_flag ( flag , colmn )
63+ raise ArgumentError , "Invalid flag '#{ flag } '" unless flag_mapping [ colmn ] . include? ( flag )
6264 end
65+
6366
64- private
67+ private
6568
66- def check_flag_column
67- # def check_flag_column(colmn)
68- # unless columns.any? { |column| column.name == colmn && column.type == :integer }
69- # raise IncorrectFlagColumnException.new("Table '#{table_name}' must have an integer column named '#{colmn}' in order to use FlagShihTzu")
70- if not table_exists?
71- puts "Error: Table '#{ table_name } ' doesn't exist"
72- elsif not columns . any? { |column | column . name == flag_column && column . type == :integer }
73- puts "Error: Table '#{ table_name } ' must have an integer column named '#{ flag_column } ' in order to use FlagShihTzu"
69+ def check_flag_column ( colmn )
70+ puts "Error: Table '#{ table_name } ' doesn't exist" and return false if not table_exists?
71+ unless columns . any? { |column | column . name == colmn && column . type == :integer }
72+ raise IncorrectFlagColumnException . new ( "Table '#{ table_name } ' must have an integer column named '#{ colmn } ' in order to use FlagShihTzu" )
7473 end
7574 end
7675
7776 def sql_condition_for_flag ( flag , colmn , enabled = true )
78- check_flag ( flag )
77+ check_flag ( flag , colmn )
7978
8079 "(#{ table_name } .#{ colmn . to_s } & #{ flag_mapping [ colmn ] [ flag ] } = #{ enabled ? flag_mapping [ colmn ] [ flag ] : 0 } )"
8180 end
82-
81+
8382 def is_valid_flag_key ( flag_key )
8483 flag_key > 0 && flag_key == flag_key . to_i
8584 end
0 commit comments