data_table 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -47,8 +47,20 @@ in your view (assuming HAML):
47
47
 
48
48
  %tbody
49
49
 
50
- Patches welcome, enjoy!
50
+ == Advanced Features
51
+
52
+ === Date fields
53
+
54
+ In order to handle date fields properly, enclose the field name in an array along with a hash like so:
55
+
56
+ Provider.for_data_table(self, %w(name fein opened_on), ["name", "fein", ["opened_on", {:date => true}]]) { ... }
57
+
58
+ === Split fields
59
+
60
+ To handle split fields, that is to handle searching for "x-y", add a hash with a split key:
61
+
62
+ Provider.for_data_table(self, %w(name fein suffix), ["name", ["fein", "suffix", {:split => "-"}]]) { ... }
51
63
 
52
64
  == Copyright
53
65
 
54
- Copyright (c) 2010 Jason Dew. See LICENSE for details.
66
+ Copyright (c) 2010-2011 Jason Dew. See LICENSE for details.
@@ -58,19 +58,9 @@ module DataTable
58
58
  options = field.extract_options!
59
59
 
60
60
  if options[:split]
61
- conditions = []
62
- parameters = []
63
- split_query = query.split(options[:split])
64
-
65
- if split_query.size == field.size
66
- field.map do |f|
67
- conditions << "UPPER(#{f}) LIKE ?"
68
- parameters << "%#{split_query.shift.upcase}%"
69
- end
70
- ["(" + conditions.join(" AND ") + ")", *parameters]
71
- else
72
- []
73
- end
61
+ _split_where_condition query, field, options[:split]
62
+ elsif options[:date]
63
+ _date_where_condition query, field.first
74
64
  else
75
65
  _where_conditions(query, field, "AND")
76
66
  end
@@ -79,6 +69,31 @@ module DataTable
79
69
  end
80
70
  end
81
71
 
72
+ def _date_where_condition query, field
73
+ begin
74
+ ["#{field} = ?", Date.parse(query)]
75
+ rescue ArgumentError
76
+ []
77
+ end
78
+ end
79
+
80
+ def _split_where_condition query, fields, splitter
81
+ conditions = []
82
+ parameters = []
83
+ split_query = query.split splitter
84
+
85
+ if split_query.size == fields.size
86
+ fields.map do |f|
87
+ conditions << "UPPER(#{f}) LIKE ?"
88
+ parameters << "%#{split_query.shift.upcase}%"
89
+ end
90
+
91
+ ["(" + conditions.join(" AND ") + ")", *parameters]
92
+ else
93
+ []
94
+ end
95
+ end
96
+
82
97
  def _order_fields params, fields
83
98
  direction = params[:sSortDir_0] == "asc" ? "ASC" : "DESC"
84
99
  %{#{fields[params[:iSortCol_0].to_i]} #{direction}}
@@ -1,3 +1,3 @@
1
1
  module DataTable
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -38,6 +38,16 @@ describe DataTable do
38
38
  end
39
39
  end
40
40
 
41
+ context "with a date field" do
42
+ it "should return an AR array using equality and converting to a date" do
43
+ send(:_where_conditions, "2011/09/03", [["f1", {:date => true}]]).should == ["(f1 = ?)", Date.new(2011, 9, 3)]
44
+ end
45
+
46
+ it "should return an AR array properly not search date fields with non-dates" do
47
+ send(:_where_conditions, "foo", ["f1", ["f2", {:date => true}]]).should == ["(UPPER(f1) LIKE ?)", "%FOO%"]
48
+ end
49
+ end
50
+
41
51
  context "with complex conditions" do
42
52
  it "should return an AR array with an entry for each search field" do
43
53
  send(:_where_conditions, "query", [%w(foo bar)]).should == ["((UPPER(foo) LIKE ? AND UPPER(bar) LIKE ?))", "%QUERY%", "%QUERY%"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: data_table
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Dew