will_filter 3.1.3 → 3.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/.gitignore +1 -0
  2. data/.rvmrc +1 -1
  3. data/Gemfile.lock +2 -2
  4. data/README.rdoc +0 -3
  5. data/app/assets/javascripts/will_filter/filter.js +5 -5
  6. data/app/assets/javascripts/will_filter/filter_prototype_effects.js +1 -1
  7. data/app/assets/stylesheets/will_filter/exporter.css.scss +72 -49
  8. data/app/assets/stylesheets/will_filter/filter.css.scss +1 -0
  9. data/app/controllers/will_filter/application_controller.rb +1 -1
  10. data/app/controllers/will_filter/calendar_controller.rb +1 -1
  11. data/app/controllers/will_filter/exporter_controller.rb +15 -26
  12. data/app/controllers/will_filter/filter_controller.rb +7 -1
  13. data/app/models/will_filter/filter.rb +69 -12
  14. data/app/views/will_filter/exporter/export.html.erb +26 -2
  15. data/app/views/will_filter/exporter/index.html.erb +35 -43
  16. data/app/views/will_filter/filter/_conditions.html.erb +13 -32
  17. data/app/views/will_filter/filter/_conditions_footer.html.erb +17 -0
  18. data/app/views/will_filter/filter/_conditions_header.html.erb +38 -0
  19. data/app/views/will_filter/filter/_container.html.erb +3 -25
  20. data/lib/generators/will_filter/templates/config.yml +34 -1
  21. data/lib/generators/will_filter/will_filter_generator.rb +1 -1
  22. data/lib/tasks/will_filter_tasks.rake +1 -5
  23. data/lib/will_filter.rb +1 -1
  24. data/lib/will_filter/calendar.rb +1 -1
  25. data/lib/will_filter/config.rb +9 -1
  26. data/lib/will_filter/containers/boolean.rb +1 -1
  27. data/lib/will_filter/containers/date.rb +2 -8
  28. data/lib/will_filter/containers/date_range.rb +3 -9
  29. data/lib/will_filter/containers/date_time.rb +2 -8
  30. data/lib/will_filter/containers/date_time_range.rb +4 -16
  31. data/lib/will_filter/containers/double.rb +52 -0
  32. data/lib/will_filter/containers/double_delimited.rb +50 -0
  33. data/lib/will_filter/containers/double_range.rb +64 -0
  34. data/lib/will_filter/containers/filter_list.rb +1 -1
  35. data/lib/will_filter/containers/list.rb +1 -1
  36. data/lib/will_filter/containers/nil.rb +1 -1
  37. data/lib/will_filter/containers/numeric.rb +1 -1
  38. data/lib/will_filter/containers/numeric_delimited.rb +1 -1
  39. data/lib/will_filter/containers/numeric_range.rb +1 -1
  40. data/lib/will_filter/containers/single_date.rb +3 -3
  41. data/lib/will_filter/containers/text.rb +1 -1
  42. data/lib/will_filter/containers/text_delimited.rb +1 -1
  43. data/lib/will_filter/engine.rb +1 -1
  44. data/lib/will_filter/extensions/action_controller_extension.rb +1 -1
  45. data/lib/will_filter/extensions/action_view_extension.rb +1 -1
  46. data/lib/will_filter/extensions/active_record_extension.rb +1 -1
  47. data/lib/will_filter/extensions/array_extension.rb +1 -1
  48. data/lib/will_filter/filter_condition.rb +1 -1
  49. data/lib/will_filter/filter_container.rb +21 -3
  50. data/lib/will_filter/filter_exception.rb +1 -1
  51. data/lib/will_filter/railtie.rb +1 -1
  52. data/lib/will_filter/version.rb +2 -2
  53. data/spec/containers/double_spec.rb +16 -0
  54. data/spec/fake_app.rb +6 -12
  55. data/test/dummy/app/models/event.rb +1 -1
  56. data/test/dummy/app/models/event_filter.rb +4 -0
  57. data/test/dummy/app/models/event_user_filter.rb +4 -0
  58. data/test/dummy/app/models/user_filter.rb +31 -2
  59. data/test/dummy/config/will_filter/config.yml +9 -1
  60. data/test/dummy/db/migrate/20120223232000_add_rank_to_events.rb +5 -0
  61. data/test/dummy/db/schema.rb +2 -1
  62. metadata +40 -108
  63. data/config/will_filter/config.yml +0 -97
  64. data/db/migrate/20110924023807_create_will_filter_filters.rb +0 -15
@@ -3,9 +3,33 @@
3
3
  <head>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5
5
  <title>Filter Export Data Table</title>
6
- <%=will_filter_scripts_tag %>
6
+ <style>
7
+ body {
8
+ font:Arial 12pt;
9
+ }
10
+ th {
11
+ padding:5px;
12
+ border-bottom:1px solid #ccc;
13
+ }
14
+ td {
15
+ padding:5px;
16
+ }
17
+ </style>
7
18
  </head>
8
19
  <body>
9
- <%= will_filter_table_tag(@wf_filter.results, :columns => @wf_filter.fields) %>
20
+ <table>
21
+ <tr>
22
+ <% @wf_filter.fields.each do |field| %>
23
+ <th><%=field %></th>
24
+ <% end %>
25
+ </tr>
26
+ <% @wf_filter.results.each do |obj| %>
27
+ <tr>
28
+ <% @wf_filter.fields.each do |field| %>
29
+ <td><%=obj.send(field).to_s %></td>
30
+ <% end %>
31
+ </tr>
32
+ <% end %>
33
+ </table>
10
34
  </body>
11
35
  </html>
@@ -1,47 +1,39 @@
1
- <div style="font-size:12px;font-weight:bold;">
2
- <div style="float:right; padding-right:2px;">
3
- <%=link_to_function(image_tag("will_filter/close.gif", :title=>"Close"), "wfExporter.hide()")%>
1
+ <div class="wf_exporter_header">
2
+ <div class="end">
3
+ <%=link_to_function("&times;".html_safe, "wfExporter.hide()", :title=>"Close", :class => "close")%>
4
4
  </div>
5
-
6
5
  Exporter
7
- </div>
6
+ </div>
7
+
8
8
  <div class="wf_exporter_container">
9
- <table style="width:100%" cellpadding="0px" cellspacing="0px;">
10
- <tr>
11
- <td>
12
- <input type="checkbox" id="wf_fld_all" onClick="wfExporter.selectAllFields(this);" style="width:20px;">
13
- </td>
14
- <td>
15
- <b>Name</b>
16
- </td>
17
- <td>
18
- <b>Type</b>
19
- </td>
20
- </tr>
21
- <tr>
22
- <td colspan="3">
23
- <hr style="width:100%">
24
- </td>
25
- </tr><% @wf_filter.model_class.columns.each_with_index do |col, index| %>
26
- <tr>
27
- <td>
28
- <input type="checkbox" id="wf_fld_chk_<%=index%>" onClick="wfExporter.selectField(this);" style="width:20px;"><input type="hidden" id="wf_fld_name_<%=index%>" value="<%=col.name%>">
29
- </td>
30
- <td>
31
- <%=col.name %>
32
- </td>
33
- <td>
34
- <%=col.type %>
35
- </td>
36
- </tr>
37
- <% end %>
38
- </table>
39
- <hr>
40
- <div style="text-align:center; width:100%; padding:3px;">
41
- Format: <%= select_tag("wf_export_format_selector", options_for_select(@wf_filter.export_formats, @wf_filter.format)) %>
42
- </div>
43
- <div style="text-align:center; width:100%; padding:3px;">
44
- <%=link_to_function("<span>Export</span>".html_safe, "wfExporter.exportFilter()", :class => "wf_grey_button wf_pcb") %>
45
- <%=link_to_function("<span>Cancel</span>".html_safe, "wfExporter.hide()", :class => "wf_grey_button wf_pcb") %>
46
- </div>
9
+
10
+ <table style="width:100%" cellpadding="0px" cellspacing="0px;">
11
+ <thead>
12
+ <tr>
13
+ <td><input type="checkbox" id="wf_fld_all" onClick="wfExporter.selectAllFields(this);" style="width:20px;"></td>
14
+ <td>Name</td>
15
+ <td>Type</td>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <% @wf_filter.model_class.columns.each_with_index do |col, index| %>
20
+ <tr>
21
+ <td>
22
+ <input type="checkbox" id="wf_fld_chk_<%=index%>" onClick="wfExporter.selectField(this);" style="width:20px;"><input type="hidden" id="wf_fld_name_<%=index%>" value="<%=col.name%>">
23
+ </td>
24
+ <td><%=col.name %></td>
25
+ <td><%=col.type %></td>
26
+ </tr>
27
+ <% end %>
28
+ </tbody>
29
+ </table>
30
+
31
+ <hr>
32
+ <div class="center">
33
+ Format: <%= select_tag("wf_export_format_selector", options_for_select(@wf_filter.export_formats, @wf_filter.format)) %>
34
+ </div>
35
+ <div class="center">
36
+ <%=link_to_function("<span>Export</span>".html_safe, "wfExporter.exportFilter()", :class => "wf_grey_button wf_pcb") %>
37
+ <%=link_to_function("<span>Cancel</span>".html_safe, "wfExporter.hide()", :class => "wf_grey_button wf_pcb") %>
38
+ </div>
47
39
  </div>
@@ -1,31 +1,5 @@
1
- <div style="margin:0;padding:0;display:inline">
2
- <%= hidden_field_tag(:wf_id, wf_filter.id) %>
3
- <%= hidden_field_tag(:wf_type, wf_filter.class.name) %>
4
- <%= hidden_field_tag(:wf_dirty, "false") %>
5
- <%= hidden_field_tag(:wf_submitted, "false") %>
6
- <%= hidden_field_tag(:wf_name, wf_filter.name) %>
7
- <%= hidden_field_tag(:wf_model, wf_filter.model_class_name) %>
8
- <%= hidden_field_tag(:wf_export_format, "") %>
9
- <%= hidden_field_tag(:wf_export_fields, "") %>
10
- </div>
11
1
 
12
- <div class="header">
13
- <% if wf_filter.show_save_options? %>
14
- <div class="end">
15
- <%=link_to_function("<span>Save As New...</span>".html_safe, "wfFilter.saveFilter()", :class => "wf_grey_button wf_pcb") %>
16
- <%=link_to_function("<span>Update</span>".html_safe, "wfFilter.updateFilter()", :class => "wf_grey_button wf_pcb") %>
17
- <%=link_to_function("<span>Delete</span>".html_safe, "wfFilter.deleteFilter()", :class => "wf_grey_button wf_pcb") %>
18
- <% if wf_filter.show_export_options? %>
19
- <%=link_to_function("<span>Export Data...</span>".html_safe, "wfExporter.show(this)", :class => "wf_grey_button wf_pcb") %>
20
- <% end %>
21
- </div>
22
- <% end %>
23
- <div>
24
- <% unless wf_filter.saved_filters.empty? %>
25
- <%= select_tag(:wf_key, options_for_select(wf_filter.saved_filters, wf_filter.key), {:onChange=>"wfFilter.loadSavedFilter()"}) %>
26
- <% end %>
27
- </div>
28
- </div>
2
+ <%= render :partial => '/will_filter/filter/conditions_header', :locals => {:wf_filter => wf_filter} %>
29
3
 
30
4
  <div class="body">
31
5
 
@@ -36,6 +10,11 @@
36
10
  <% end %>
37
11
 
38
12
  <div class="filter_match_type">
13
+ <div class="end">
14
+ <small>
15
+ <%=link_to_function("Toggle Conditions", "wfFilter.toggleDebugger()") %>
16
+ </small>
17
+ </div>
39
18
  Match <%= select_tag(:wf_match, options_for_select(wf_filter.match_options, wf_filter.match), {:onChange=>"wfFilter.markDirty()"}) %>
40
19
  of the following conditions:
41
20
  </div>
@@ -48,13 +27,15 @@
48
27
  </div>
49
28
  <% else %>
50
29
  <table class="table" cellpadding="0" cellspacing="0">
51
- <%
52
- 0.upto(wf_filter.size-1) do |index|
53
- condition = wf_filter.condition_at(index)
54
- %>
55
- <%= render :partial => "/will_filter/filter/condition", :locals => {:wf_filter => wf_filter, :condition => condition, :index => index}%>
30
+ <% 0.upto(wf_filter.size-1) do |index| %>
31
+ <% condition = wf_filter.condition_at(index) %>
32
+ <%= render :partial => "/will_filter/filter/condition", :locals => {:wf_filter => wf_filter, :condition => condition, :index => index}%>
56
33
  <% end %>
57
34
  </table>
58
35
  <% end %>
59
36
 
37
+ <div id="wf_debugger" class="debugger" style="display:none;">
38
+ <%= raw(wf_filter.debug_sql_conditions) %>
39
+ </div>
40
+
60
41
  </div>
@@ -0,0 +1,17 @@
1
+ <div class="actions">
2
+ Order:
3
+ <%= select_tag(:wf_order, options_for_select(wf_filter.condition_options, wf_filter.order), {:onChange=>"markDirty()"}) %>
4
+ <%= select_tag(:wf_order_type, options_for_select(wf_filter.order_type_options, wf_filter.order_type), {:onChange=>"markDirty()"}) %>
5
+ Per Page:
6
+ <%= select_tag(:wf_per_page, options_for_select(wf_filter.per_page_options, wf_filter.per_page.to_s), {:onChange=>"markDirty()"}) %>
7
+ &nbsp;&nbsp;
8
+ <%=link_to_function("<span>Submit Filter</span>".html_safe, "wfFilter.submit()", :class => "wf_grey_button wf_pcb") %>
9
+ </div>
10
+ <div>
11
+ <%=link_to_function("<span><b>&plus;</b> Add</span>".html_safe, "wfFilter.addCondition()", :class => "wf_grey_button wf_pcb") %>
12
+ <%=link_to_function("<span>Clear</span>".html_safe, "wfFilter.removeAllConditions()", :class => "wf_grey_button wf_pcb") %>
13
+ &nbsp;&nbsp;
14
+ <span id="wf_loader" class="spinner" style="display:none;">
15
+ <%=image_tag "will_filter/spinner.gif" %> Loading...
16
+ </span>
17
+ </div>
@@ -0,0 +1,38 @@
1
+ <div style="margin:0;padding:0;display:inline">
2
+ <%= hidden_field_tag(:wf_id, wf_filter.id) %>
3
+ <%= hidden_field_tag(:wf_type, wf_filter.class.name) %>
4
+ <%= hidden_field_tag(:wf_dirty, "false") %>
5
+ <%= hidden_field_tag(:wf_submitted, "false") %>
6
+ <%= hidden_field_tag(:wf_name, wf_filter.name) %>
7
+
8
+ <% unless WillFilter::Config.require_filter_extensions? %>
9
+ <%= hidden_field_tag(:wf_model, wf_filter.model_class_name) %>
10
+ <% end %>
11
+
12
+ <%= hidden_field_tag(:wf_export_format, "") %>
13
+ <%= hidden_field_tag(:wf_export_fields, "") %>
14
+ </div>
15
+
16
+ <div class="header">
17
+ <% if wf_filter.show_export_options? %>
18
+ <div class="end" style="padding-left:3px;">
19
+ <%=link_to_function("<span>Export Data...</span>".html_safe, "wfExporter.show(this)", :class => "wf_grey_button wf_pcb") %>
20
+ </div>
21
+ <% end %>
22
+
23
+ <% if wf_filter.show_save_options? %>
24
+ <div class="end">
25
+ <%=link_to_function("<span>Save As New...</span>".html_safe, "wfFilter.saveFilter()", :class => "wf_grey_button wf_pcb") %>
26
+ <% if params[:wf_id] %>
27
+ <%=link_to_function("<span>Update</span>".html_safe, "wfFilter.updateFilter()", :class => "wf_grey_button wf_pcb") %>
28
+ <%=link_to_function("<span>Delete</span>".html_safe, "wfFilter.deleteFilter()", :class => "wf_grey_button wf_pcb") %>
29
+ <% end %>
30
+ </div>
31
+ <% end %>
32
+
33
+ <div>
34
+ <% unless wf_filter.saved_filters.empty? %>
35
+ <%= select_tag(:wf_key, options_for_select(wf_filter.saved_filters, wf_filter.key), {:onChange=>"wfFilter.loadSavedFilter()"}) %>
36
+ <% end %>
37
+ </div>
38
+ </div>
@@ -2,36 +2,14 @@
2
2
 
3
3
  <%= form_tag({}, {:method => :get, :name=>'wf_form', :id => 'wf_form', :class => 'wf_form' }) do %>
4
4
  <div class="wf_container">
5
+
5
6
  <div id="wf_filter_conditions" class="conditions">
6
- <%= render :partial=> "/will_filter/filter/conditions", :locals => {:wf_filter => wf_filter} %>
7
+ <%= render :partial=> '/will_filter/filter/conditions', :locals => { :wf_filter => wf_filter } %>
7
8
  </div>
8
9
 
9
10
  <div class="footer">
10
- <div class="actions">
11
- <small>
12
- <%=link_to_function("Toggle Conditions", "wfFilter.toggleDebugger()") %>
13
- </small>
14
- &nbsp;&nbsp;
15
- Order:
16
- <%= select_tag(:wf_order, options_for_select(wf_filter.condition_options, wf_filter.order), {:onChange=>"markDirty()"}) %>
17
- <%= select_tag(:wf_order_type, options_for_select(wf_filter.order_type_options, wf_filter.order_type), {:onChange=>"markDirty()"}) %>
18
- Per Page:
19
- <%= select_tag(:wf_per_page, options_for_select(wf_filter.per_page_options, wf_filter.per_page.to_s), {:onChange=>"markDirty()"}) %>
20
- &nbsp;&nbsp;
21
- <%=link_to_function("<span>Submit Filter</span>".html_safe, "wfFilter.submit()", :class => "wf_grey_button wf_pcb") %>
22
- </div>
23
- <div>
24
- <%=link_to_function("<span>+ Add</span>".html_safe, "wfFilter.addCondition()", :class => "wf_grey_button wf_pcb") %>
25
- <%=link_to_function("<span>- Clear</span>".html_safe, "wfFilter.removeAllConditions()", :class => "wf_grey_button wf_pcb") %>
26
- &nbsp;&nbsp;
27
- <span id="wf_loader" class="spinner" style="display:none;">
28
- <%=image_tag "will_filter/spinner.gif" %> Loading...
29
- </span>
30
- </div>
11
+ <%= render :partial => '/will_filter/filter/conditions_footer', :locals => { :wf_filter => wf_filter } %>
31
12
  </div>
32
13
 
33
- <div id="wf_debugger" class="debugger" style="display:none;">
34
- <%= raw(wf_filter.debug_sql_conditions) %>
35
- </div>
36
14
  </div>
37
15
  <% end %>
@@ -10,6 +10,34 @@
10
10
  #############################################################################
11
11
 
12
12
  defaults: &defaults
13
+
14
+ ###########################################################################
15
+ #
16
+ # require_filter_extension makes the filter into an abstract class
17
+ # and will require you to subclass it in order for the filter to be
18
+ # serializeable. The following will no longer work:
19
+ #
20
+ # @users = User.filter(:params => params)
21
+ #
22
+ # Use your own filter class instead:
23
+ #
24
+ # @users = User.filter(:params => params, :filter => UserFilter)
25
+ #
26
+ # In the subclass you must provide the model name to be filtered by overloading:
27
+ #
28
+ # def model_class
29
+ # User
30
+ # end
31
+ #
32
+ ###########################################################################
33
+
34
+ require_filter_extensions: false
35
+
36
+ ###########################################################################
37
+ # If you would like to see some JavaScript effects
38
+ # provide your own effects class and implement required methods
39
+ ###########################################################################
40
+
13
41
  effects_options:
14
42
  enabled: false
15
43
  script_path: "will_filter/filter_prototype_effects.js"
@@ -29,6 +57,9 @@ defaults: &defaults
29
57
  numeric: WillFilter::Containers::Numeric
30
58
  numeric_range: WillFilter::Containers::NumericRange
31
59
  numeric_delimited: WillFilter::Containers::NumericDelimited
60
+ double: WillFilter::Containers::Double
61
+ double_range: WillFilter::Containers::DoubleRange
62
+ double_delimited: WillFilter::Containers::DoubleDelimited
32
63
  date_time_range: WillFilter::Containers::DateTimeRange
33
64
  single_date: WillFilter::Containers::SingleDate
34
65
  date: WillFilter::Containers::Date
@@ -46,10 +77,12 @@ defaults: &defaults
46
77
  smallint: [nil, numeric, numeric_range, numeric_delimited]
47
78
  integer: [nil, numeric, numeric_range, numeric_delimited]
48
79
  int: [nil, numeric, numeric_range, numeric_delimited]
49
- double: [nil, numeric, numeric_range, numeric_delimited]
80
+ float: [nil, double, double_range, double_delimited]
81
+ double: [nil, double, double_range, double_delimited]
50
82
  timestamp: [nil, date_time, date_time_range, single_date]
51
83
  datetime: [nil, date_time, date_time_range, single_date]
52
84
  date: [nil, date, date_range]
85
+ char: [nil, text, text_delimited]
53
86
  character: [nil, text, text_delimited]
54
87
  varchar: [nil, text, text_delimited]
55
88
  text: [nil, text, text_delimited]
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -23,9 +23,5 @@
23
23
 
24
24
  namespace :will_filter do
25
25
 
26
- desc "Sync extra files from will_filter plugin."
27
- task :sync do
28
- system "rsync -ruv vendor/plugins/will_filter/config/wf ./config"
29
- end
30
26
 
31
27
  end
data/lib/will_filter.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2010-2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -44,6 +44,14 @@ module WillFilter
44
44
  @config ||= load_yml("/config/will_filter/config.yml")
45
45
  end
46
46
 
47
+ def self.require_filter_extensions?
48
+ config[:require_filter_extensions]
49
+ end
50
+
51
+ def self.disable_filter_saving?
52
+ config[:disable_filter_saving]
53
+ end
54
+
47
55
  def self.effects_options
48
56
  config[:effects_options]
49
57
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -30,13 +30,7 @@ module WillFilter
30
30
 
31
31
  def validate
32
32
  return "Value must be provided" if value.blank?
33
- return "Value must be a valid date (2008-01-01)" if date == nil
34
- end
35
-
36
- def date
37
- @date ||= Time.parse(value).to_date
38
- rescue ArgumentError
39
- nil
33
+ return "Value must be a valid date (2008-01-01)" if date.nil?
40
34
  end
41
35
 
42
36
  def sql_condition
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2011 Michael Berkovich
2
+ # Copyright (c) 2010-2012 Michael Berkovich
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -36,15 +36,9 @@ module WillFilter
36
36
 
37
37
  def validate
38
38
  return "Start value must be provided" if @start_date.blank?
39
- return "Start value must be a valid date (2008-01-01)" if date(@start_date) == nil
39
+ return "Start value must be a valid date (2008-01-01)" if date(@start_date).nil?
40
40
  return "End value must be provided" if @end_date.blank?
41
- return "End value must be a valid date (2008-01-01)" if date(@end_date) == nil
42
- end
43
-
44
- def date(dt)
45
- Time.parse(dt).to_date
46
- rescue ArgumentError
47
- nil
41
+ return "End value must be a valid date (2008-01-01)" if date(@end_date).nil?
48
42
  end
49
43
 
50
44
  def sql_condition