Class: SimpleSearchFilter::Filter
- Inherits:
-
Object
- Object
- SimpleSearchFilter::Filter
- Defined in:
- lib/simple_search_filter/filter.rb
Constant Summary collapse
- SEARCH_METHOD_GET =
:get- SEARCH_METHOD_POST_AND_REDIRECT =
:post_and_redirect- DEFAULT_SEARCH_METHOD =
SEARCH_METHOD_GET
Instance Attribute Summary collapse
-
#data ⇒ Object
values.
-
#fields ⇒ Object
array of FilterField.
-
#prefix ⇒ Object
session prefix.
Instance Method Summary collapse
-
#add_field(f) ⇒ Object
fields.
- #add_field_autocomplete(name, type, formtype, opt = {}) ⇒ Object
- #add_fields_from_array(a) ⇒ Object
- #clear_data ⇒ Object
-
#default_order(order_by, order_dir) ⇒ Object
order.
- #field(name, type, formtype, opt = {}) ⇒ Object
- #field_def_value(name) ⇒ Object
- #form_method ⇒ Object
- #get_opposite_order_dir_for_column(name) ⇒ Object
- #get_order ⇒ Object
-
#initialize(_session, _prefix, opt = {}) ⇒ Filter
constructor
A new instance of Filter.
- #method_missing(method_sym, *arguments, &block) ⇒ Object
- #opposite_order_dir(order_dir) ⇒ Object
-
#options ⇒ Object
options.
- #order ⇒ Object
- #order=(value) ⇒ Object
-
#order_string ⇒ Object
where.
-
#page ⇒ Object
page.
- #page=(value) ⇒ Object
- #page_param_name ⇒ Object
- #search_method ⇒ Object
- #search_method_get? ⇒ Boolean
- #search_method_post_and_redirect? ⇒ Boolean
- #search_url ⇒ Object
-
#session_get(name, def_value) ⇒ Object
sessions.
- #session_save(name, v) ⇒ Object
- #set(field_name, v) ⇒ Object
- #set_data_from_form(params) ⇒ Object
- #set_default_order(order_by, order_dir) ⇒ Object
- #set_order(order_by, order_dir) ⇒ Object
- #url ⇒ Object
- #url_params_for_sortable_column(name) ⇒ Object
- #v(name, v_def = nil) ⇒ Object
- #v_empty?(name) ⇒ Boolean
- #where_conditions ⇒ Object
Constructor Details
#initialize(_session, _prefix, opt = {}) ⇒ Filter
Returns a new instance of Filter.
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/simple_search_filter/filter.rb', line 18 def initialize(_session, _prefix, opt={}) @prefix = _prefix @session = _session @fields ||={} = opt ||={} # init data data() end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *arguments, &block) ⇒ Object
389 390 391 392 393 394 395 396 |
# File 'lib/simple_search_filter/filter.rb', line 389 def method_missing(method_sym, *arguments, &block) # the first argument is a Symbol, so you need to_s it if you want to pattern match if @fields.has_key? method_sym v(method_sym) else super end end |
Instance Attribute Details
#data ⇒ Object
values
14 15 16 |
# File 'lib/simple_search_filter/filter.rb', line 14 def data @data end |
#fields ⇒ Object
array of FilterField
13 14 15 |
# File 'lib/simple_search_filter/filter.rb', line 13 def fields @fields end |
#prefix ⇒ Object
session prefix
12 13 14 |
# File 'lib/simple_search_filter/filter.rb', line 12 def prefix @prefix end |
Instance Method Details
#add_field(f) ⇒ Object
fields
48 49 50 51 52 |
# File 'lib/simple_search_filter/filter.rb', line 48 def add_field(f) #@fields[f[:name]] = f @fields[f.name] = f end |
#add_field_autocomplete(name, type, formtype, opt = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/simple_search_filter/filter.rb', line 58 def add_field_autocomplete(name, type, formtype, opt={}) search_by = opt[:search_by] || :text if search_by==:id # filter by id # id field opt_id = opt.clone opt_id[:default_value] = 0 opt_id[:ignore_value] = 0 opt_id[:condition] = FilterField::QUERY_CONDITION_EQUAL add_field FilterField.new(:"#{name}_id", FilterField::TYPE_INT, FilterField::FORM_TYPE_EMPTY, opt_id) # text field opt_text = opt.clone opt_text[:default_value] = '' opt_text[:ignore_value] = '' opt_text[:condition] = FilterField::QUERY_CONDITION_EMPTY add_field FilterField.new(name,type, formtype, opt_text) else # filter by text add_field FilterField.new(name,type, formtype, opt) end end |
#add_fields_from_array(a) ⇒ Object
54 55 56 |
# File 'lib/simple_search_filter/filter.rb', line 54 def add_fields_from_array(a) a.each{|fa| add_field fa} end |
#clear_data ⇒ Object
204 205 206 207 |
# File 'lib/simple_search_filter/filter.rb', line 204 def clear_data @data = {} session_save 'data', @data end |
#default_order(order_by, order_dir) ⇒ Object
order
270 271 272 |
# File 'lib/simple_search_filter/filter.rb', line 270 def default_order(order_by, order_dir) set_default_order order_by, order_dir end |
#field(name, type, formtype, opt = {}) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/simple_search_filter/filter.rb', line 32 def field(name, type, formtype, opt={}) if formtype.to_s==FilterField::FORM_TYPE_AUTOCOMPLETE add_field_autocomplete(name, type, formtype, opt) else add_field FilterField.new(name,type, formtype, opt) end end |
#field_def_value(name) ⇒ Object
89 90 91 92 93 94 95 |
# File 'lib/simple_search_filter/filter.rb', line 89 def field_def_value(name) name = name.to_sym return nil if @fields[name].nil? @fields[name].default_value end |
#form_method ⇒ Object
130 131 132 |
# File 'lib/simple_search_filter/filter.rb', line 130 def form_method search_method_get? ? :get : :post end |
#get_opposite_order_dir_for_column(name) ⇒ Object
314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/simple_search_filter/filter.rb', line 314 def get_opposite_order_dir_for_column(name) name = name.to_s ord = order return 'asc' if ord.empty? if ord[0][0].to_s == name return opposite_order_dir(ord[0][1]) end return 'asc' end |
#get_order ⇒ Object
308 309 310 311 |
# File 'lib/simple_search_filter/filter.rb', line 308 def get_order order[0] if order.count>0 order[0] end |
#opposite_order_dir(order_dir) ⇒ Object
327 328 329 330 331 332 |
# File 'lib/simple_search_filter/filter.rb', line 327 def opposite_order_dir(order_dir) order_dir = order_dir.to_s return 'asc' if order_dir=='desc' return 'desc' if order_dir=='asc' 'asc' end |
#options ⇒ Object
options
102 103 104 |
# File 'lib/simple_search_filter/filter.rb', line 102 def || {} end |
#order ⇒ Object
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/simple_search_filter/filter.rb', line 274 def order return @order unless @order.nil? # from session @v_sess = session_get 'order', nil @order = @v_sess unless @v_sess.nil? # @order ||= [] session_save 'order', @order # @order end |
#order=(value) ⇒ Object
290 291 292 293 294 |
# File 'lib/simple_search_filter/filter.rb', line 290 def order= (value) @order = value session_save 'order', @order end |
#order_string ⇒ Object
where
351 352 353 354 355 356 357 358 359 360 361 |
# File 'lib/simple_search_filter/filter.rb', line 351 def order_string o = order if o.empty? orderby = 'id' orderdir = 'asc' else orderby, orderdir = order[0] end "#{orderby} #{orderdir}" end |
#page ⇒ Object
page
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/simple_search_filter/filter.rb', line 243 def page return @page unless @page.nil? # from session @v_sess = session_get 'page', nil @page = @v_sess unless @v_sess.nil? # @page ||= 1 session_save 'page', @page # @page end |
#page=(value) ⇒ Object
259 260 261 262 263 |
# File 'lib/simple_search_filter/filter.rb', line 259 def page=(value) @page = value.to_i session_save 'page', @page end |
#page_param_name ⇒ Object
134 135 136 |
# File 'lib/simple_search_filter/filter.rb', line 134 def page_param_name [:page_param_name] || SimpleSearchFilter.page_default_param_name end |
#search_method ⇒ Object
106 107 108 109 110 |
# File 'lib/simple_search_filter/filter.rb', line 106 def search_method [:search_method] ||= DEFAULT_SEARCH_METHOD [:search_method] end |
#search_method_get? ⇒ Boolean
112 113 114 |
# File 'lib/simple_search_filter/filter.rb', line 112 def search_method_get? search_method == SEARCH_METHOD_GET end |
#search_method_post_and_redirect? ⇒ Boolean
116 117 118 |
# File 'lib/simple_search_filter/filter.rb', line 116 def search_method_post_and_redirect? search_method == SEARCH_METHOD_POST_AND_REDIRECT end |
#search_url ⇒ Object
125 126 127 |
# File 'lib/simple_search_filter/filter.rb', line 125 def search_url [:search_url] end |
#session_get(name, def_value) ⇒ Object
sessions
144 145 146 |
# File 'lib/simple_search_filter/filter.rb', line 144 def session_get(name, def_value) @session[prefix+name] || def_value end |
#session_save(name, v) ⇒ Object
148 149 150 |
# File 'lib/simple_search_filter/filter.rb', line 148 def session_save(name, v) @session[prefix+name] = v end |
#set(field_name, v) ⇒ Object
198 199 200 |
# File 'lib/simple_search_filter/filter.rb', line 198 def set(field_name,v) data[field_name.to_s] = @fields[field_name].fix_value(v) end |
#set_data_from_form(params) ⇒ Object
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/simple_search_filter/filter.rb', line 209 def set_data_from_form(params) # search for fields like filter[XXX] params.each do |k, v| name = k.to_sym #if f =~ /^filter\[([^\]]+)\]$/ #name = Regexp.last_match(1) next unless @fields.has_key? name if @fields[name].type==FilterField::TYPE_INT set name, (v.to_i rescue 0) else set name, v end #end end # default values from fields @fields.each do |k, f| name = k.to_s next if @data.has_key? name set name, field_def_value(name) end end |
#set_default_order(order_by, order_dir) ⇒ Object
296 297 298 299 300 301 |
# File 'lib/simple_search_filter/filter.rb', line 296 def set_default_order(order_by, order_dir) return false if !order.nil? && !order.empty? set_order(order_by, order_dir) end |
#set_order(order_by, order_dir) ⇒ Object
304 305 306 |
# File 'lib/simple_search_filter/filter.rb', line 304 def set_order(order_by, order_dir) self.order = [[order_by, order_dir]] end |
#url ⇒ Object
121 122 123 |
# File 'lib/simple_search_filter/filter.rb', line 121 def url [:url] || [:search_url] end |
#url_params_for_sortable_column(name) ⇒ Object
336 337 338 339 340 341 342 343 |
# File 'lib/simple_search_filter/filter.rb', line 336 def url_params_for_sortable_column(name) p = {} p[:cmd] = 'order' p[:orderby] = name.to_s p[:orderdir] = get_opposite_order_dir_for_column(name) p end |
#v(name, v_def = nil) ⇒ Object
178 179 180 181 182 183 184 185 186 |
# File 'lib/simple_search_filter/filter.rb', line 178 def v(name, v_def=nil) name = name.to_s if (data.has_key? name) && (!data[name].nil?) && (!data[name].blank?) return data[name] end field_def_value(name) || v_def end |
#v_empty?(name) ⇒ Boolean
189 190 191 192 193 194 195 196 |
# File 'lib/simple_search_filter/filter.rb', line 189 def v_empty?(name) if (data.has_key? name) && (!data[name].nil?) return true end # if v == default value end |
#where_conditions ⇒ Object
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 |
# File 'lib/simple_search_filter/filter.rb', line 365 def where_conditions w_string = '1=1 ' w_values = [] @fields.each do |name, f| val = v(name) next if val.nil? w_field = f.make_where(val) next if w_field.nil? w_cond, w_value = w_field w_string << " AND #{w_cond} " w_values << w_value end [w_string, *w_values] end |