Class: SimpleSearchFilter::Filter

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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 ||={}

  @options = opt
  @options||={}

  # init data

  data()
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object



360
361
362
363
364
365
366
367
# File 'lib/simple_search_filter/filter.rb', line 360

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

#dataObject

values



14
15
16
# File 'lib/simple_search_filter/filter.rb', line 14

def data
  @data
end

#fieldsObject

array of FilterField



13
14
15
# File 'lib/simple_search_filter/filter.rb', line 13

def fields
  @fields
end

#prefixObject

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



49
50
51
52
53
# File 'lib/simple_search_filter/filter.rb', line 49

def add_field(f)
  #@fields[f[:name]] = f

  @fields[f.name] = f

end

#add_fields_from_array(a) ⇒ Object



55
56
57
# File 'lib/simple_search_filter/filter.rb', line 55

def add_fields_from_array(a)
  a.each{|fa| add_field fa}
end

#clear_dataObject



175
176
177
178
# File 'lib/simple_search_filter/filter.rb', line 175

def clear_data
  @data = {}
  session_save 'data', @data
end

#default_order(order_by, order_dir) ⇒ Object

order



241
242
243
# File 'lib/simple_search_filter/filter.rb', line 241

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
40
41
# File 'lib/simple_search_filter/filter.rb', line 32

def field(name, type, formtype, opt={})
  add_field FilterField.new(name,type, formtype, opt)

  if formtype.to_s==FilterField::FORM_TYPE_AUTOCOMPLETE
    opt_int = opt.clone
    opt_int[:default_value] = 0
    add_field FilterField.new(name.to_s+'_id',FilterField::TYPE_INT, FilterField::FORM_TYPE_EMPTY, opt_int)
  end

end

#field_def_value(name) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/simple_search_filter/filter.rb', line 60

def field_def_value(name)
  name = name.to_sym

  return nil if @fields[name].nil?

  @fields[name].default_value
end

#form_methodObject



101
102
103
# File 'lib/simple_search_filter/filter.rb', line 101

def form_method
  search_method_get? ? :get : :post
end

#get_opposite_order_dir_for_column(name) ⇒ Object



285
286
287
288
289
290
291
292
293
294
295
296
# File 'lib/simple_search_filter/filter.rb', line 285

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_orderObject



279
280
281
282
# File 'lib/simple_search_filter/filter.rb', line 279

def get_order
  order[0] if order.count>0
  order[0]
end

#opposite_order_dir(order_dir) ⇒ Object



298
299
300
301
302
303
# File 'lib/simple_search_filter/filter.rb', line 298

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

#optionsObject

options



73
74
75
# File 'lib/simple_search_filter/filter.rb', line 73

def options
  @options || {}
end

#orderObject



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
# File 'lib/simple_search_filter/filter.rb', line 245

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



261
262
263
264
265
# File 'lib/simple_search_filter/filter.rb', line 261

def order= (value)
  @order = value

  session_save 'order', @order
end

#order_stringObject

where



322
323
324
325
326
327
328
329
330
331
332
# File 'lib/simple_search_filter/filter.rb', line 322

def order_string
  o = order
  if o.empty?
    orderby = 'id'
    orderdir = 'asc'
  else
    orderby, orderdir = order[0]
  end

  "#{orderby} #{orderdir}"
end

#pageObject

page



214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'lib/simple_search_filter/filter.rb', line 214

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



230
231
232
233
234
# File 'lib/simple_search_filter/filter.rb', line 230

def page=(value)
  @page = value.to_i

  session_save 'page', @page
end

#page_param_nameObject



105
106
107
# File 'lib/simple_search_filter/filter.rb', line 105

def page_param_name
  options[:page_param_name] || SimpleSearchFilter.page_default_param_name
end

#search_methodObject



77
78
79
80
81
# File 'lib/simple_search_filter/filter.rb', line 77

def search_method
  options[:search_method] ||= DEFAULT_SEARCH_METHOD

  options[:search_method]
end

#search_method_get?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/simple_search_filter/filter.rb', line 83

def search_method_get?
  search_method == SEARCH_METHOD_GET
end

#search_method_post_and_redirect?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'lib/simple_search_filter/filter.rb', line 87

def search_method_post_and_redirect?
  search_method == SEARCH_METHOD_POST_AND_REDIRECT
end

#search_urlObject



96
97
98
# File 'lib/simple_search_filter/filter.rb', line 96

def search_url
  options[:search_url]
end

#session_get(name, def_value) ⇒ Object

sessions



115
116
117
# File 'lib/simple_search_filter/filter.rb', line 115

def session_get(name, def_value)
  @session[prefix+name] || def_value
end

#session_save(name, v) ⇒ Object



119
120
121
# File 'lib/simple_search_filter/filter.rb', line 119

def session_save(name, v)
  @session[prefix+name] = v
end

#set(field_name, v) ⇒ Object



169
170
171
# File 'lib/simple_search_filter/filter.rb', line 169

def set(field_name,v)
  data[field_name.to_s] = @fields[field_name].fix_value(v)
end

#set_data_from_form(params) ⇒ Object



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/simple_search_filter/filter.rb', line 180

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



267
268
269
270
271
272
# File 'lib/simple_search_filter/filter.rb', line 267

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



275
276
277
# File 'lib/simple_search_filter/filter.rb', line 275

def set_order(order_by, order_dir)
  self.order = [[order_by, order_dir]]
end

#urlObject



92
93
94
# File 'lib/simple_search_filter/filter.rb', line 92

def url
  options[:url] || options[:search_url]
end

#url_params_for_sortable_column(name) ⇒ Object



307
308
309
310
311
312
313
314
# File 'lib/simple_search_filter/filter.rb', line 307

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



149
150
151
152
153
154
155
156
157
# File 'lib/simple_search_filter/filter.rb', line 149

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

Returns:

  • (Boolean)


160
161
162
163
164
165
166
167
# File 'lib/simple_search_filter/filter.rb', line 160

def v_empty?(name)
  if (data.has_key? name) && (!data[name].nil?)
    return true
  end

  # if v == default value


end

#where_conditionsObject



336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/simple_search_filter/filter.rb', line 336

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