Class: SimpleSearchFilter::Filter
- Inherits:
-
Object
- Object
- SimpleSearchFilter::Filter
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
-
#add_field(f) ⇒ Object
-
#add_fields_from_array(a) ⇒ Object
-
#clear_data ⇒ Object
-
#default_order(order_by, order_dir) ⇒ Object
-
#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
-
#order ⇒ Object
-
#order=(value) ⇒ Object
-
#order_string ⇒ Object
-
#page ⇒ Object
-
#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
-
#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 ||={}
@options = opt
@options||={}
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)
if @fields.has_key? method_sym
v(method_sym)
else
super
end
end
|
Instance Attribute Details
#data ⇒ Object
14
15
16
|
# File 'lib/simple_search_filter/filter.rb', line 14
def data
@data
end
|
#fields ⇒ Object
13
14
15
|
# File 'lib/simple_search_filter/filter.rb', line 13
def fields
@fields
end
|
#prefix ⇒ Object
12
13
14
|
# File 'lib/simple_search_filter/filter.rb', line 12
def prefix
@prefix
end
|
Instance Method Details
#add_field(f) ⇒ Object
49
50
51
52
53
|
# File 'lib/simple_search_filter/filter.rb', line 49
def add_field(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_data ⇒ Object
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
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
|
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_order ⇒ Object
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
|
#options ⇒ Object
73
74
75
|
# File 'lib/simple_search_filter/filter.rb', line 73
def options
@options || {}
end
|
#order ⇒ Object
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?
@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_string ⇒ Object
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
|
#page ⇒ Object
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?
@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_name ⇒ Object
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_method ⇒ Object
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
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
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_url ⇒ Object
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
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
|
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)
params.each do |k, v|
name = k.to_sym
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
@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
|
#url ⇒ Object
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
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
end
|
#where_conditions ⇒ Object
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
|