Class: SimpleFilter::Filter

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_filter/filter.rb

Constant Summary collapse

FIELD_TYPE_TEXT =
'text'
FIELD_TYPE_HIDDEN =
'hidden'
FIELD_TYPE_SELECT_AUTO =

text with autocomplete

'select_auto'
DBTYPE_STRING =
'string'
DBTYPE_INT =
'int'
DBTYPE_DATE =
'date'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_session, _prefix) ⇒ Filter

Returns a new instance of Filter.



20
21
22
23
24
25
26
27
28
# File 'lib/simple_filter/filter.rb', line 20

def initialize(_session, _prefix)
  @prefix = _prefix
  @session = _session

  @fields ||={}

  # init data
  data()
end

Instance Attribute Details

#data ⇒ Object

Returns the value of attribute data.



15
16
17
# File 'lib/simple_filter/filter.rb', line 15

def data
  @data
end

#fields ⇒ Object

Returns the value of attribute fields.



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

def fields
  @fields
end

#prefix ⇒ Object

session prefix



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

def prefix
  @prefix
end

Instance Method Details

#add_field(f) ⇒ Object

fields



35
36
37
38
# File 'lib/simple_filter/filter.rb', line 35

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

end

#add_fields_from_array(a) ⇒ Object



40
41
42
43
44
45
# File 'lib/simple_filter/filter.rb', line 40

def add_fields_from_array(a)
  a.each do |fa|
    add_field fa
  end

end

#clear_data ⇒ Object



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

def clear_data
  session_save 'data', {}
end

#field_def_value(name) ⇒ Object



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

def field_def_value(name)
  if (@fields.has_key? name) && (@fields[name].has_key? :def)
    return @fields[name][:def]
  end
  nil
end

#get_opposite_order_dir_for_column(name) ⇒ Object



191
192
193
194
195
196
197
198
199
200
# File 'lib/simple_filter/filter.rb', line 191

def get_opposite_order_dir_for_column(name)
  return 'asc' if order.empty?


  if order[0][0] == name
    return opposite_order_dir(order[0][1])
  end

  return 'asc'
end

#get_order ⇒ Object



185
186
187
188
# File 'lib/simple_filter/filter.rb', line 185

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

#html_style(name) ⇒ Object

helper methods



212
213
214
215
216
217
218
219
220
# File 'lib/simple_filter/filter.rb', line 212

def html_style(name)
  return '' unless @fields[name].has_key?(:opt)

  s = ''
  opt = @fields[name][:opt]
  unless opt[:width].nil?
    s << "width: #{opt[:width]}px; "
  end
end

#opposite_order_dir(order_dir) ⇒ Object



202
203
204
205
206
# File 'lib/simple_filter/filter.rb', line 202

def opposite_order_dir(order_dir)
  return 'asc' if order_dir=='desc'
  return 'desc' if order_dir=='asc'
  'asc'
end

#order ⇒ Object

order



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/simple_filter/filter.rb', line 151

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



167
168
169
170
171
# File 'lib/simple_filter/filter.rb', line 167

def order= (value)
  @order = value

  session_save 'order', @order
end

#session_get(name, def_value) ⇒ Object

sessions



59
60
61
# File 'lib/simple_filter/filter.rb', line 59

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

#session_save(name, v) ⇒ Object



63
64
65
# File 'lib/simple_filter/filter.rb', line 63

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

#set(field_name, v) ⇒ Object



110
111
112
# File 'lib/simple_filter/filter.rb', line 110

def set(field_name,v)
  data[field_name] = v
end

#set_data_from_form(params) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/simple_filter/filter.rb', line 119

def set_data_from_form(params)
  # search for fields like filter[XXX]
  params.each do |name, v|
    #if f =~ /^filter\[([^\]]+)\]$/
      #name = Regexp.last_match(1)

      next unless @fields.has_key? name

      if @fields[name][:dbtype]==DBTYPE_INT
        data[name] = (v.to_i rescue 0)
      else
        data[name] = v
      end

    #end
  end

  # default values from fields
  @fields.each do |name, f|
    next if @data.has_key? name

    @data[name] = field_def_value name
  end

end

#set_order(order_by, order_dir) ⇒ Object



181
182
183
# File 'lib/simple_filter/filter.rb', line 181

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

#set_order_default(order_by, order_dir) ⇒ Object



173
174
175
176
177
178
# File 'lib/simple_filter/filter.rb', line 173

def set_order_default(order_by, order_dir)
  return false if !order.nil? && !order.empty?

  set_order(order_by, order_dir)

end

#v(name, v_def = nil) ⇒ Object



93
94
95
96
97
98
99
# File 'lib/simple_filter/filter.rb', line 93

def v(name, v_def=nil)
  if (data.has_key? name) && (!data[name].nil?)
    return data[name]
  end

  field_def_value(name) || v_def
end

#v_empty?(name) ⇒ Boolean

Returns:

  • (Boolean)


101
102
103
104
105
106
107
108
# File 'lib/simple_filter/filter.rb', line 101

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

  # if v == default value

end