@ -173,6 +173,7 @@ class Query < ActiveRecord::Base
:string = > [ " = " , " ~ " , " ! " , " !~ " , " !* " , " * " ] ,
:text = > [ " ~ " , " !~ " , " !* " , " * " ] ,
:integer = > [ " = " , " >= " , " <= " , " >< " , " !* " , " * " ] ,
:integer_done = > [ " = " , " >= " , " <= " , " >< " , " !* " , " * " ] ,
:float = > [ " = " , " >= " , " <= " , " >< " , " !* " , " * " ] ,
:relation = > [ " = " , " =p " , " =!p " , " !p " , " !* " , " * " ]
}
@ -217,6 +218,8 @@ class Query < ActiveRecord::Base
case type_for ( field )
when :integer
add_filter_error ( field , :invalid ) if values_for ( field ) . detect { | v | v . present? && ! v . match ( / ^[+-]? \ d+$ / ) }
when :integer_done
add_filter_error ( field , :invalid ) if values_for ( field ) . detect { | v | v . present? && ! v . match ( / ^[+-]? \ d+$ / ) || ( v . match ( / ^[+-]? \ d+$ / ) && ( v . to_i < 0 || v . to_i > 100 ) ) }
when :float
add_filter_error ( field , :invalid ) if values_for ( field ) . detect { | v | v . present? && ! v . match ( / ^[+-]? \ d+( \ . \ d*)?$ / ) }
when :date , :date_past
@ -602,6 +605,12 @@ class Query < ActiveRecord::Base
else
sql = " #{ db_table } . #{ db_field } = #{ value . first . to_i } "
end
when :integer_done
if is_custom_filter
sql = " ( #{ db_table } . #{ db_field } <> '' AND CAST(CASE #{ db_table } . #{ db_field } WHEN '' THEN '0' ELSE #{ db_table } . #{ db_field } END AS decimal(30,3)) = #{ value . first . to_i } ) "
else
sql = " #{ db_table } . #{ db_field } = #{ value . first . to_i } "
end
when :float
if is_custom_filter
sql = " ( #{ db_table } . #{ db_field } <> '' AND CAST(CASE #{ db_table } . #{ db_field } WHEN '' THEN '0' ELSE #{ db_table } . #{ db_field } END AS decimal(30,3)) BETWEEN #{ value . first . to_f - 1 e - 5 } AND #{ value . first . to_f + 1 e - 5 } ) "