will_filter 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.loadpath +12 -0
- data/.project +18 -0
- data/CHANGELOG.rdoc +1 -0
- data/Gemfile +32 -0
- data/Gemfile.lock +73 -0
- data/LICENSE +18 -0
- data/README.rdoc +74 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/app/controllers/application_controller.rb +27 -0
- data/app/controllers/will_filter/calendar_controller.rb +31 -0
- data/app/controllers/will_filter/exporter_controller.rb +122 -0
- data/app/controllers/will_filter/filter_controller.rb +107 -0
- data/app/helpers/application_helper.rb +26 -0
- data/app/models/will_filter/filter.rb +694 -0
- data/app/views/layouts/application.html.erb +11 -0
- data/app/views/will_filter/calendar/_annual.html.erb +14 -0
- data/app/views/will_filter/calendar/_month.html.erb +39 -0
- data/app/views/will_filter/calendar/_quarter.html.erb +15 -0
- data/app/views/will_filter/calendar/index.html.erb +52 -0
- data/app/views/will_filter/common/_actions_bar.html.erb +5 -0
- data/app/views/will_filter/common/_results_table.html.erb +129 -0
- data/app/views/will_filter/common/_scripts.html.erb +10 -0
- data/app/views/will_filter/exporter/export.html.erb +11 -0
- data/app/views/will_filter/exporter/index.html.erb +47 -0
- data/app/views/will_filter/filter/_condition.html.erb +30 -0
- data/app/views/will_filter/filter/_conditions.html.erb +56 -0
- data/app/views/will_filter/filter/_container.html.erb +31 -0
- data/app/views/will_filter/filter/containers/_blank.html.erb +1 -0
- data/app/views/will_filter/filter/containers/_boolean.html.erb +5 -0
- data/app/views/will_filter/filter/containers/_date.html.erb +12 -0
- data/app/views/will_filter/filter/containers/_date_range.html.erb +20 -0
- data/app/views/will_filter/filter/containers/_date_time.html.erb +12 -0
- data/app/views/will_filter/filter/containers/_date_time_range.html.erb +20 -0
- data/app/views/will_filter/filter/containers/_list.html.erb +7 -0
- data/app/views/will_filter/filter/containers/_numeric_range.html.erb +13 -0
- data/app/views/will_filter/filter/containers/_text.html.erb +7 -0
- data/app/views/will_filter/filter/index.html.erb +4 -0
- data/config/application.rb +45 -0
- data/config/boot.rb +6 -0
- data/config/database.yml +22 -0
- data/config/environment.rb +13 -0
- data/config/environments/development.rb +26 -0
- data/config/environments/production.rb +49 -0
- data/config/environments/test.rb +38 -0
- data/config/routes.rb +64 -0
- data/config/will_filter/config.yml +97 -0
- data/config.ru +4 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20090730070119_create_will_filter_tables.rb +19 -0
- data/db/seeds.rb +7 -0
- data/db/test.sqlite3 +0 -0
- data/doc/README_FOR_APP +2 -0
- data/examples/README +1 -0
- data/lib/application_helper.rb +45 -0
- data/lib/core_ext/active_record/base.rb +44 -0
- data/lib/core_ext/array.rb +34 -0
- data/lib/core_ext/object.rb +34 -0
- data/lib/generators/will_filter/templates/config.yml +97 -0
- data/lib/generators/will_filter/templates/create_will_filter_tables.rb +19 -0
- data/lib/generators/will_filter/will_filter_generator.rb +24 -0
- data/lib/tasks/.gitkeep +0 -0
- data/lib/tasks/will_filter_tasks.rake +32 -0
- data/lib/will_filter/calendar.rb +168 -0
- data/lib/will_filter/common_methods.rb +49 -0
- data/lib/will_filter/config.rb +104 -0
- data/lib/will_filter/containers/boolean.rb +43 -0
- data/lib/will_filter/containers/date.rb +51 -0
- data/lib/will_filter/containers/date_range.rb +56 -0
- data/lib/will_filter/containers/date_time.rb +50 -0
- data/lib/will_filter/containers/date_time_range.rb +64 -0
- data/lib/will_filter/containers/filter_list.rb +59 -0
- data/lib/will_filter/containers/list.rb +56 -0
- data/lib/will_filter/containers/nil.rb +45 -0
- data/lib/will_filter/containers/numeric.rb +52 -0
- data/lib/will_filter/containers/numeric_delimited.rb +50 -0
- data/lib/will_filter/containers/numeric_range.rb +60 -0
- data/lib/will_filter/containers/single_date.rb +57 -0
- data/lib/will_filter/containers/text.rb +45 -0
- data/lib/will_filter/containers/text_delimited.rb +51 -0
- data/lib/will_filter/engine.rb +11 -0
- data/lib/will_filter/filter_condition.rb +59 -0
- data/lib/will_filter/filter_container.rb +73 -0
- data/lib/will_filter/filter_exception.rb +27 -0
- data/lib/will_filter.rb +15 -0
- data/pkg/will_filter-0.1.0.gem +0 -0
- data/pkg/will_filter-0.1.1.gem +0 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/robots.txt +5 -0
- data/public/will_filter/images/buttons.png +0 -0
- data/public/will_filter/images/calendar.png +0 -0
- data/public/will_filter/images/clock.png +0 -0
- data/public/will_filter/images/close.gif +0 -0
- data/public/will_filter/images/results_table_th_active.gif +0 -0
- data/public/will_filter/images/sort_arrow_all.gif +0 -0
- data/public/will_filter/images/sort_bg.gif +0 -0
- data/public/will_filter/images/spinner.gif +0 -0
- data/public/will_filter/javascripts/will_filter.js +568 -0
- data/public/will_filter/javascripts/will_filter_prototype_effects.js +15 -0
- data/public/will_filter/stylesheets/will_filter.css +168 -0
- data/script/rails +6 -0
- data/test/functional/models/will_filter/filter_test.rb +297 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +71 -0
- data/uninstall.rb +24 -0
- data/will_filter.gemspec +7 -0
- metadata +208 -0
@@ -0,0 +1,168 @@
|
|
1
|
+
.wf_container {padding:0px; background:#f1f4f9; margin:0px; margin-bottom:10px; font-size: 12px; font-family: Arial; width: 100%; border:solid 1px #e8e8e8;border-color:#e8e8e8 #bababa #bababa #e8e8e8;}
|
2
|
+
.wf_container input {border: 1px solid #ccc; font-size: 12px; font-family: Arial; margin:0px; padding: 2px !important; }
|
3
|
+
.wf_container select {border: 1px solid #ccc; font-size: 12px; font-family: Arial; margin:0px; padding: 1px !important; }
|
4
|
+
.wf_container .spinner {font-size: 10px;}
|
5
|
+
.wf_container .debug {font-size:10px; border-top:1px solid #ccc; width:100%; margin-top:3px;}
|
6
|
+
.wf_container a {text-decoration:none; color:#16b; outline:none; border:0px;}
|
7
|
+
.wf_container img {border:0px;}
|
8
|
+
.wf_container .conditions {padding:0px; margin:0px;}
|
9
|
+
.wf_container_panel {padding:5px; background:white; border:solid 1px #bababa;border-color:#bababa #e8e8e8 #e8e8e8 #bababa;}
|
10
|
+
.wf_debugger {padding:5px; margin:2px; background:white; border:solid 1px #bababa;border-color:#bababa #e8e8e8 #e8e8e8 #bababa; font-size:10px; color: #777;}
|
11
|
+
|
12
|
+
.wf_input {}
|
13
|
+
|
14
|
+
.wf_header {margin:0px; height:25px; padding:5px;}
|
15
|
+
.wf_action {border: 0px; vertical-align:middle;}
|
16
|
+
.wf_match_header {margin:5px;}
|
17
|
+
|
18
|
+
.wf_footer {padding:5px; margin-top:3px;}
|
19
|
+
|
20
|
+
.wf_conditions_table {border:0px; width:100%; margin:0px; padding:0px; }
|
21
|
+
.wf_conditions_table td {vertical-align:top; padding-right: 3px; padding: 1px; white-space:nowrap; }
|
22
|
+
|
23
|
+
.wf_condition {padding-left:5px; padding-right:2px; padding-bottom:0px; width:20%; white-space:nowrap; vertical-align: top; }
|
24
|
+
.wf_operator {padding-right:2px; padding-bottom:0px; width:15%; white-space:nowrap; vertical-align: top; }
|
25
|
+
.wf_values {padding-right:2px; width:70%; margin:0px; vertical-align:top; }
|
26
|
+
|
27
|
+
.wf_values_table {border:0px; width:100%; margin:0px; padding:0px; }
|
28
|
+
.wf_values_table td {vertical-align:top; padding: 0px; margin: 0px; }
|
29
|
+
|
30
|
+
.wf_condition_actions {padding-right:5px; padding-bottom:2px; white-space:nowrap; text-align:right; width:100px; vertical-align: top; }
|
31
|
+
.wf_button {text-align:center; padding: 0px; margin: 0px; }
|
32
|
+
.wf_dirty_msg {color:red; font-size:10px;}
|
33
|
+
|
34
|
+
.wf_calendar_trigger {border:0px; padding-left:2px; padding-right:2px;}
|
35
|
+
|
36
|
+
.wf_calendar {background-color:#eee; position:absolute; padding: 2px; font-size:10px; border:solid 1px #e8e8e8; border-color:#e8e8e8 #bababa #bababa #e8e8e8;}
|
37
|
+
.wf_calendar_table {width:100%;}
|
38
|
+
.wf_calendar_table td {padding:2px; margin:2px; text-align:center; vertical-align:top;}
|
39
|
+
.wf_calendar_container {background-color:white; padding: 1px; margin: 1px; font-size:10px; border:solid 1px #bababa; border-color:#bababa #e8e8e8 #e8e8e8 #bababa; }
|
40
|
+
.wf_calendar img {border: 0px;}
|
41
|
+
.wf_calendar input {border: 1px solid #ccc; font-size: 12px; font-family: Arial; }
|
42
|
+
.wf_calendar select {border: 1px solid #ccc; font-size: 12px; font-family: Arial; }
|
43
|
+
.wf_calendar_cells {border:1px dotted #ccc; width:100%; padding:2px; margin:0px; }
|
44
|
+
.wf_calendar_cells td {padding:2px; border: 0px; text-align:center; vertical-align:middle; font-size:8px; color:black; background-color:white;cursor:pointer;}
|
45
|
+
.wf_calendar_title {text-align:center; border-top:1px solid #ccc; border-bottom:1px solid #ccc; background: #eee;}
|
46
|
+
.wf_calendar_date_cell {width:11px; border: 1px solid #ccc; padding:2px; margin:1px; cursor:pointer; vertical-align:middle; text-align:center; background-color:white;}
|
47
|
+
.wf_calendar_date_cell.today {background-color:lightblue; }
|
48
|
+
.wf_calendar_date_cell.selected {background-color:#ccc; }
|
49
|
+
.wf_calendar_date_cell:hover {background-color:#ccc; }
|
50
|
+
.wf_exporter {background-color:#eee; position:absolute; width:230px; padding: 2px; font-size:10px; border:solid 1px #e8e8e8; border-color:#e8e8e8 #bababa #bababa #e8e8e8;}
|
51
|
+
.wf_exporter img {border: 0px;}
|
52
|
+
.wf_exporter input {border: 1px solid #ccc; font-size: 12px; font-family: Arial; }
|
53
|
+
.wf_exporter select {border: 1px solid #ccc; font-size: 12px; font-family: Arial; }
|
54
|
+
.wf_exporter table {width:100%;border-collapse: collapse; font-size:12px; padding:0px; margin:0px;}
|
55
|
+
.wf_exporter td {vertical-align:top; padding: 0px; margin: 0px; }
|
56
|
+
.wf_exporter_container {background-color:white; padding: 1px; margin: 1px; font-size:10px; border:solid 1px #bababa; border-color:#bababa #e8e8e8 #e8e8e8 #bababa; }
|
57
|
+
|
58
|
+
.wf_filter_error {background-color: #ffeded; border: 1px #f58a8a solid; border-left:none; border-right:none; color:#b60e0e; padding:5px; margin-left:3px; margin-right:3px; }
|
59
|
+
.wf_condition_error {padding-left:10px; padding-right:10px; margin-bottom:2px; font-size: 10px; background-color: #ffeded; font-family: Arial; border: 1px #f58a8a solid; border-left:none; border-right:none; color:#b60e0e;}
|
60
|
+
|
61
|
+
/*
|
62
|
+
Pure CSS Buttons.
|
63
|
+
Learn more ~ http://www.halmatferello.com/lab/pure-css-buttons/
|
64
|
+
|
65
|
+
Licensed under GPL and MIT.
|
66
|
+
*/
|
67
|
+
.wf_pcb, .wf_pcb span {background: url('/will_filter/images/buttons.png') no-repeat; height: 23px; line-height: 23px; padding: 3px 0 7px 0; }
|
68
|
+
.wf_pcb, a.wf_pcb:link, a.wf_pcb:visited {color: #333; font-size: 12px; font-style:bold; font-family:arial; padding-left: 14px; text-decoration: none !important; }
|
69
|
+
|
70
|
+
/* ie 6 hack */
|
71
|
+
* html div#frame .wf_pcb {color: #333; padding-top: 0px; padding-bottom: 0px; text-decoration: none; }
|
72
|
+
|
73
|
+
/* ie 7 hack */
|
74
|
+
*:first-child+html .wf_pcb {color: #333; padding-top: 0px; padding-bottom: 0px; text-decoration: none; }
|
75
|
+
|
76
|
+
.wf_pcb span {background-position: right -326px; padding-right: 14px; }
|
77
|
+
a.wf_grey_button {background-position: left -219px; padding-top: 3px; }
|
78
|
+
a.wf_grey_button span {background-position: right -545px; padding-top: 3px; }
|
79
|
+
a.wf_grey_button:hover {background-position: left -246px; }
|
80
|
+
a.wf_grey_button:hover span {background-position: right -572px; }
|
81
|
+
a.wf_grey_button:active, .grey_active_button {background-position: left -273px; }
|
82
|
+
a.wf_grey_button:active span, .grey_active_button span {background-position: right -599px; }
|
83
|
+
body.wf_grey_disabled_button {background-position: left -300px; color: #bbb !important; }
|
84
|
+
body.wf_grey_disabled_button span {background-position: right -626px; }
|
85
|
+
|
86
|
+
.wf_paginator { width:100%; margin-bottom: 10px; font-size: 12px; font-family: Arial;}
|
87
|
+
|
88
|
+
.wf_results_table {
|
89
|
+
width: 100%;
|
90
|
+
font-size: 12px;
|
91
|
+
border: 1px #e5e5e5 solid;
|
92
|
+
border-collapse: collapse;
|
93
|
+
background-color: white;
|
94
|
+
margin-bottom: 10px;
|
95
|
+
}
|
96
|
+
|
97
|
+
.wf_results_table thead th {
|
98
|
+
background-color:#F5F5F5;
|
99
|
+
border-bottom:1px solid #CCCCCC;
|
100
|
+
border-top:1px solid #CCCCCC;
|
101
|
+
font-size:12px;
|
102
|
+
padding:5px 5px 5px 10px;
|
103
|
+
text-align:left;
|
104
|
+
white-space:nowrap;
|
105
|
+
}
|
106
|
+
.wf_results_table th,
|
107
|
+
.wf_results_table td {padding-right:10px;padding-left:10px; border-left:1px solid #eee;}
|
108
|
+
.wf_results_table td {padding:10px;border-bottom:solid 1px #ddd;vertical-align:top;}
|
109
|
+
.wf_results_table th {border-left:1px solid #ccc;padding-right:0px;font-weight:normal}
|
110
|
+
.wf_results_table th.first {border-left:none;}
|
111
|
+
.wf_results_table th {background: transparent url(/will_filter/images/sort_bg.gif) repeat-x scroll 0 0;}
|
112
|
+
|
113
|
+
.wf_results_table th.sortable:hover {background-color:#ddd;}
|
114
|
+
.wf_results_table th.sortable:hover .sort_control {display:block;}
|
115
|
+
.wf_results_table th.sortable .sort_link {text-decoration:none;;width:100%;display:block;}
|
116
|
+
|
117
|
+
.wf_results_table th.current_sort {background: transparent url(/will_filter/images/sort_bg.gif) repeat-x scroll 0 -100px;}
|
118
|
+
.wf_results_table th.current_sort .sort_control {display:block;}
|
119
|
+
.wf_results_table th.current_sort .sort_link {color:#000}
|
120
|
+
|
121
|
+
.wf_results_table th.desc .sort_control {display:block;}
|
122
|
+
.wf_results_table th.asc .sort_control .up {background: url(/will_filter/images/sort_arrow_all.gif) -17px 0 no-repeat;}
|
123
|
+
.wf_results_table th.desc .sort_control .down {background: url(/will_filter/images/sort_arrow_all.gif) -17px -13px no-repeat;}
|
124
|
+
.wf_results_table td.current_sort {font-weight:bold;border-left:1px solid #ccc;border-right:1px solid #ccc;}
|
125
|
+
.wf_results_table tr.data_row:hover {background-color: #eee;}
|
126
|
+
|
127
|
+
.wf_results_table .sort_title {float:left;}
|
128
|
+
.wf_results_table .table_head_container {position:relative;padding-right:20px;}
|
129
|
+
|
130
|
+
.wf_results_table .edit_location th,
|
131
|
+
.wf_results_table .edit_location td {background:none;padding:1px 2px;border:none;font-size:11px;}
|
132
|
+
.wf_results_table .edit_location_link {font-size:11px;}
|
133
|
+
|
134
|
+
.wf_results_table .sort_control {position:absolute;right:21px;margin:-5px -20px -5px 5px;display:none;height:24px;}
|
135
|
+
.wf_results_table .sort_control .up {width:17px;height:11px;display:block;background: url(/will_filter/images/sort_arrow_all.gif) 0 0 no-repeat;}
|
136
|
+
.wf_results_table .sort_control .up:hover {width:17px;height:11px;display:block;background: url(/will_filter/images/sort_arrow_all.gif) -17px 0 no-repeat;}
|
137
|
+
.wf_results_table .sort_control .down {width:17px;height:11px;display:block;background: url(/will_filter/images/sort_arrow_all.gif) 0 -13px no-repeat;}
|
138
|
+
.wf_results_table .sort_control .down:hover {width:17px;height:11px;display:block;background: url(/will_filter/images/sort_arrow_all.gif) -17px -13px no-repeat;}
|
139
|
+
|
140
|
+
.wf_results_table th .sort_control .up,
|
141
|
+
.wf_results_table th .sort_control .down {_height:12px !important;overflow:hidden;}
|
142
|
+
|
143
|
+
.wf_results_table {width:100%;margin:0}
|
144
|
+
.wf_results_table.short {margin-bottom:200px;}
|
145
|
+
|
146
|
+
.wf_results_table thead th {padding:5px 5px 5px 10px;text-align:left;font-size:12px;border-bottom:solid 1px #ccc;border-top:solid 1px #eee;background-color:#f5f5f5;white-space:nowrap;}
|
147
|
+
.wf_results_table th.active {background:url(/will_filter/images/results_table_th_active.gif) repeat-x;color:#fff;border-left:solid 1px #ccc;border-right:solid 1px #ccc}
|
148
|
+
.wf_results_table th.active a {color:#fff;}
|
149
|
+
|
150
|
+
.wf_actions_bar_yellow {
|
151
|
+
margin-top:10px;
|
152
|
+
margin-bottom:10px;
|
153
|
+
padding:10px;
|
154
|
+
background-color: #f9f8f7;
|
155
|
+
border-color: #E8E8E8 #BABABA #BABABA #E8E8E8;
|
156
|
+
border-style: solid;
|
157
|
+
border-width: 1px;
|
158
|
+
}
|
159
|
+
|
160
|
+
.wf_actions_bar_blue {
|
161
|
+
margin-top:10px;
|
162
|
+
margin-bottom:10px;
|
163
|
+
padding:10px;
|
164
|
+
background-color: #f1f4fa;
|
165
|
+
border-color: #E8E8E8 #BABABA #BABABA #E8E8E8;
|
166
|
+
border-style: solid;
|
167
|
+
border-width: 1px;
|
168
|
+
}
|
data/script/rails
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -0,0 +1,297 @@
|
|
1
|
+
require File.expand_path('../../../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module WillFilter
|
4
|
+
class FilterTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
test "boolean container" do
|
7
|
+
params = {:wf_type=>"UserFilter",
|
8
|
+
:wf_c0=>:admin,
|
9
|
+
:wf_o0=>:is,
|
10
|
+
:wf_v0_0=>"1"}
|
11
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
12
|
+
assert_equal 1, filter.conditions.size
|
13
|
+
assert_equal 2, filter.sql_conditions.size
|
14
|
+
assert_equal " users.admin = ? ", filter.sql_conditions.first
|
15
|
+
assert_equal true, filter.sql_conditions.last
|
16
|
+
|
17
|
+
params = {:wf_type=>"UserFilter",
|
18
|
+
:wf_c0=>:admin,
|
19
|
+
:wf_o0=>:is,
|
20
|
+
:wf_v0_0=>"0"}
|
21
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
22
|
+
assert_equal 1, filter.conditions.size
|
23
|
+
assert_equal 2, filter.sql_conditions.size
|
24
|
+
assert_equal " users.admin = ? ", filter.sql_conditions.first
|
25
|
+
assert_equal false, filter.sql_conditions.last
|
26
|
+
end
|
27
|
+
|
28
|
+
test "date range container" do
|
29
|
+
params = {:wf_type=>"UserFilter",
|
30
|
+
:wf_c0=>:birth_date,
|
31
|
+
:wf_o0=>:is_in_the_range,
|
32
|
+
:wf_v0_0=>"1971-11-09",
|
33
|
+
:wf_v0_1=>"1974-11-09"}
|
34
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
35
|
+
assert_equal 1, filter.conditions.size
|
36
|
+
assert_equal 3, filter.sql_conditions.size
|
37
|
+
assert_equal " (users.birth_date >= ? and users.birth_date <= ?) ", filter.sql_conditions.first
|
38
|
+
end
|
39
|
+
|
40
|
+
test "date time range container" do
|
41
|
+
params = {:wf_type=>"UserFilter",
|
42
|
+
:wf_c0=>:created_at,
|
43
|
+
:wf_o0=>:is_in_the_range,
|
44
|
+
:wf_v0_0=>"1971-11-09 8:00",
|
45
|
+
:wf_v0_1=>"1971-11-09 12:00"}
|
46
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
47
|
+
assert_equal 1, filter.conditions.size
|
48
|
+
assert_equal 3, filter.sql_conditions.size
|
49
|
+
assert_equal " (users.created_at >= ? and users.created_at <= ?) ", filter.sql_conditions.first
|
50
|
+
end
|
51
|
+
|
52
|
+
test "date time container" do
|
53
|
+
params = {:wf_type=>"UserFilter",
|
54
|
+
:wf_c0=>:created_at,
|
55
|
+
:wf_o0=>:is,
|
56
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
57
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
58
|
+
assert_equal 1, filter.conditions.size
|
59
|
+
assert_equal 2, filter.sql_conditions.size
|
60
|
+
assert_equal " users.created_at = ? ", filter.sql_conditions.first
|
61
|
+
|
62
|
+
params = {:wf_type=>"UserFilter",
|
63
|
+
:wf_c0=>:created_at,
|
64
|
+
:wf_o0=>:is_not,
|
65
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
66
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
67
|
+
assert_equal 1, filter.conditions.size
|
68
|
+
assert_equal 2, filter.sql_conditions.size
|
69
|
+
assert_equal " users.created_at <> ? ", filter.sql_conditions.first
|
70
|
+
|
71
|
+
params = {:wf_type=>"UserFilter",
|
72
|
+
:wf_c0=>:created_at,
|
73
|
+
:wf_o0=>:is_after,
|
74
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
75
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
76
|
+
assert_equal 1, filter.conditions.size
|
77
|
+
assert_equal 2, filter.sql_conditions.size
|
78
|
+
assert_equal " users.created_at > ? ", filter.sql_conditions.first
|
79
|
+
|
80
|
+
params = {:wf_type=>"UserFilter",
|
81
|
+
:wf_c0=>:created_at,
|
82
|
+
:wf_o0=>:is_before,
|
83
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
84
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
85
|
+
assert_equal 1, filter.conditions.size
|
86
|
+
assert_equal 2, filter.sql_conditions.size
|
87
|
+
assert_equal " users.created_at < ? ", filter.sql_conditions.first
|
88
|
+
end
|
89
|
+
|
90
|
+
test "date container" do
|
91
|
+
params = {:wf_type=>"UserFilter",
|
92
|
+
:wf_c0=>:birth_date,
|
93
|
+
:wf_o0=>:is,
|
94
|
+
:wf_v0_0=>"1971-11-09"}
|
95
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
96
|
+
assert_equal 1, filter.conditions.size
|
97
|
+
assert_equal 2, filter.sql_conditions.size
|
98
|
+
assert_equal " users.birth_date = ? ", filter.sql_conditions.first
|
99
|
+
|
100
|
+
params = {:wf_type=>"UserFilter",
|
101
|
+
:wf_c0=>:birth_date,
|
102
|
+
:wf_o0=>:is_not,
|
103
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
104
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
105
|
+
assert_equal 1, filter.conditions.size
|
106
|
+
assert_equal 2, filter.sql_conditions.size
|
107
|
+
assert_equal " users.birth_date <> ? ", filter.sql_conditions.first
|
108
|
+
|
109
|
+
params = {:wf_type=>"UserFilter",
|
110
|
+
:wf_c0=>:birth_date,
|
111
|
+
:wf_o0=>:is_after,
|
112
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
113
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
114
|
+
assert_equal 1, filter.conditions.size
|
115
|
+
assert_equal 2, filter.sql_conditions.size
|
116
|
+
assert_equal " users.birth_date > ? ", filter.sql_conditions.first
|
117
|
+
|
118
|
+
params = {:wf_type=>"UserFilter",
|
119
|
+
:wf_c0=>:birth_date,
|
120
|
+
:wf_o0=>:is_before,
|
121
|
+
:wf_v0_0=>"1971-11-09 8:00"}
|
122
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
123
|
+
assert_equal 1, filter.conditions.size
|
124
|
+
assert_equal 2, filter.sql_conditions.size
|
125
|
+
assert_equal " users.birth_date < ? ", filter.sql_conditions.first
|
126
|
+
end
|
127
|
+
|
128
|
+
test "numeric delimited container" do
|
129
|
+
params = {:wf_type=>"UserFilter",
|
130
|
+
:wf_c0=>:id,
|
131
|
+
:wf_o0=>:is_in,
|
132
|
+
:wf_v0_0=>"1,2,3,4,5,6"}
|
133
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
134
|
+
assert_equal 1, filter.conditions.size
|
135
|
+
assert_equal 2, filter.sql_conditions.size
|
136
|
+
assert_equal " users.id in (?) ", filter.sql_conditions.first
|
137
|
+
end
|
138
|
+
|
139
|
+
test "numeric range container" do
|
140
|
+
params = {:wf_type=>"UserFilter",
|
141
|
+
:wf_c0=>:id,
|
142
|
+
:wf_o0=>:is_in_the_range,
|
143
|
+
:wf_v0_0=>"1",
|
144
|
+
:wf_v0_1=>"10"}
|
145
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
146
|
+
assert_equal 1, filter.conditions.size
|
147
|
+
assert_equal 3, filter.sql_conditions.size
|
148
|
+
assert_equal " (users.id >= ? and users.id <= ?) ", filter.sql_conditions.first
|
149
|
+
end
|
150
|
+
|
151
|
+
test "numeric container" do
|
152
|
+
params = {:wf_type=>"UserFilter",
|
153
|
+
:wf_c0=>:id,
|
154
|
+
:wf_o0=>:is,
|
155
|
+
:wf_v0_0=>"1"}
|
156
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
157
|
+
assert_equal 1, filter.conditions.size
|
158
|
+
assert_equal 2, filter.sql_conditions.size
|
159
|
+
assert_equal " users.id = ? ", filter.sql_conditions.first
|
160
|
+
|
161
|
+
params = {:wf_type=>"UserFilter",
|
162
|
+
:wf_c0=>:id,
|
163
|
+
:wf_o0=>:is_not,
|
164
|
+
:wf_v0_0=>"1"}
|
165
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
166
|
+
assert_equal 1, filter.conditions.size
|
167
|
+
assert_equal 2, filter.sql_conditions.size
|
168
|
+
assert_equal " users.id <> ? ", filter.sql_conditions.first
|
169
|
+
|
170
|
+
params = {:wf_type=>"UserFilter",
|
171
|
+
:wf_c0=>:id,
|
172
|
+
:wf_o0=>:is_less_than,
|
173
|
+
:wf_v0_0=>"1"}
|
174
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
175
|
+
assert_equal 1, filter.conditions.size
|
176
|
+
assert_equal 2, filter.sql_conditions.size
|
177
|
+
assert_equal " users.id < ? ", filter.sql_conditions.first
|
178
|
+
|
179
|
+
params = {:wf_type=>"UserFilter",
|
180
|
+
:wf_c0=>:id,
|
181
|
+
:wf_o0=>:is_greater_than,
|
182
|
+
:wf_v0_0=>"1"}
|
183
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
184
|
+
assert_equal 1, filter.conditions.size
|
185
|
+
assert_equal 2, filter.sql_conditions.size
|
186
|
+
assert_equal " users.id > ? ", filter.sql_conditions.first
|
187
|
+
end
|
188
|
+
|
189
|
+
test "single date container" do
|
190
|
+
params = {:wf_type=>"UserFilter",
|
191
|
+
:wf_c0=>:created_at,
|
192
|
+
:wf_o0=>:is_on,
|
193
|
+
:wf_v0_0=>"1971-11-09"}
|
194
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
195
|
+
assert_equal 1, filter.conditions.size
|
196
|
+
assert_equal 3, filter.sql_conditions.size
|
197
|
+
assert_equal " users.created_at >= ? and users.created_at < ? ", filter.sql_conditions.first
|
198
|
+
|
199
|
+
params = {:wf_type=>"UserFilter",
|
200
|
+
:wf_c0=>:created_at,
|
201
|
+
:wf_o0=>:is_not_on,
|
202
|
+
:wf_v0_0=>"1971-11-09"}
|
203
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
204
|
+
assert_equal 1, filter.conditions.size
|
205
|
+
assert_equal 3, filter.sql_conditions.size
|
206
|
+
assert_equal " users.created_at < ? and users.created_at >= ? ", filter.sql_conditions.first
|
207
|
+
end
|
208
|
+
|
209
|
+
test "text delimited container" do
|
210
|
+
params = {:wf_type=>"UserFilter",
|
211
|
+
:wf_c0=>:name,
|
212
|
+
:wf_o0=>:is_in,
|
213
|
+
:wf_v0_0=>"a,b,c,d,e,f,g"}
|
214
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
215
|
+
assert_equal 1, filter.conditions.size
|
216
|
+
assert_equal 2, filter.sql_conditions.size
|
217
|
+
assert_equal " users.name in (?) ", filter.sql_conditions.first
|
218
|
+
|
219
|
+
params = {:wf_type=>"UserFilter",
|
220
|
+
:wf_c0=>:name,
|
221
|
+
:wf_o0=>:is_not_in,
|
222
|
+
:wf_v0_0=>"a,b,c,d,e,f,g"}
|
223
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
224
|
+
assert_equal 1, filter.conditions.size
|
225
|
+
assert_equal 2, filter.sql_conditions.size
|
226
|
+
assert_equal " users.name not in (?) ", filter.sql_conditions.first
|
227
|
+
end
|
228
|
+
|
229
|
+
test "text container" do
|
230
|
+
params = {:wf_type=>"UserFilter",
|
231
|
+
:wf_c0=>:name,
|
232
|
+
:wf_o0=>:is,
|
233
|
+
:wf_v0_0=>"Mike"}
|
234
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
235
|
+
assert_equal 2, filter.sql_conditions.size
|
236
|
+
assert_equal " users.name = ? ", filter.sql_conditions.first
|
237
|
+
assert_equal "Mike", filter.sql_conditions.last
|
238
|
+
|
239
|
+
params = {:wf_type=>"UserFilter",
|
240
|
+
:wf_c0=>:name,
|
241
|
+
:wf_o0=>:is_not,
|
242
|
+
:wf_v0_0=>"Mike"}
|
243
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
244
|
+
assert_equal 2, filter.sql_conditions.size
|
245
|
+
assert_equal " users.name <> ? ", filter.sql_conditions.first
|
246
|
+
|
247
|
+
params = {:wf_type=>"UserFilter",
|
248
|
+
:wf_c0=>:name,
|
249
|
+
:wf_o0=>:contains,
|
250
|
+
:wf_v0_0=>"Mike"}
|
251
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
252
|
+
assert_equal 2, filter.sql_conditions.size
|
253
|
+
assert_equal " users.name like ? ", filter.sql_conditions.first
|
254
|
+
|
255
|
+
params = {:wf_type=>"UserFilter",
|
256
|
+
:wf_c0=>:name,
|
257
|
+
:wf_o0=>:does_not_contain,
|
258
|
+
:wf_v0_0=>"Mike"}
|
259
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
260
|
+
assert_equal 2, filter.sql_conditions.size
|
261
|
+
assert_equal " users.name not like ? ", filter.sql_conditions.first
|
262
|
+
|
263
|
+
params = {:wf_type=>"UserFilter",
|
264
|
+
:wf_c0=>:name,
|
265
|
+
:wf_o0=>:starts_with,
|
266
|
+
:wf_v0_0=>"Mike"}
|
267
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
268
|
+
assert_equal 2, filter.sql_conditions.size
|
269
|
+
assert_equal " users.name like ? ", filter.sql_conditions.first
|
270
|
+
assert_equal "Mike%", filter.sql_conditions.last
|
271
|
+
|
272
|
+
params = {:wf_type=>"UserFilter",
|
273
|
+
:wf_c0=>:name,
|
274
|
+
:wf_o0=>:ends_with,
|
275
|
+
:wf_v0_0=>"Mike"}
|
276
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
277
|
+
assert_equal 2, filter.sql_conditions.size
|
278
|
+
assert_equal " users.name like ? ", filter.sql_conditions.first
|
279
|
+
assert_equal "%Mike", filter.sql_conditions.last
|
280
|
+
end
|
281
|
+
|
282
|
+
test "compound filter" do
|
283
|
+
params = {:wf_type=>"UserFilter",
|
284
|
+
:wf_c0=>:name,
|
285
|
+
:wf_o0=>:is,
|
286
|
+
:wf_v0_0=>"Mike",
|
287
|
+
:wf_c1=>:birth_date,
|
288
|
+
:wf_o1=>:is_before,
|
289
|
+
:wf_v1_0=>"1971-11-09 8:00"
|
290
|
+
}
|
291
|
+
filter = WillFilter::Filter.deserialize_from_params(params)
|
292
|
+
assert_equal 3, filter.sql_conditions.size
|
293
|
+
assert_equal " users.name = ? AND users.birth_date < ? ", filter.sql_conditions.first
|
294
|
+
end
|
295
|
+
|
296
|
+
end
|
297
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
require File.expand_path('../../config/environment', __FILE__)
|
3
|
+
require 'rails/test_help'
|
4
|
+
|
5
|
+
class ActiveSupport::TestCase
|
6
|
+
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
7
|
+
#
|
8
|
+
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
9
|
+
# -- they do not yet inherit this setting
|
10
|
+
fixtures :all
|
11
|
+
|
12
|
+
# Add more helper methods to be used by all tests here...
|
13
|
+
end
|
14
|
+
|
15
|
+
# Dummy UserFilter object for testing filter containers
|
16
|
+
class UserFilter < WillFilter::Filter
|
17
|
+
def table_name
|
18
|
+
"users"
|
19
|
+
end
|
20
|
+
|
21
|
+
def definition
|
22
|
+
{:id=>
|
23
|
+
{:is_provided=>"nil",
|
24
|
+
:is_not_provided=>"nil",
|
25
|
+
:is=>"numeric",
|
26
|
+
:is_not=>"numeric",
|
27
|
+
:is_less_than=>"numeric",
|
28
|
+
:is_greater_than=>"numeric",
|
29
|
+
:is_in_the_range=>"numeric_range",
|
30
|
+
:is_in=>"numeric_delimited",
|
31
|
+
:is_filtered_by=>:filter_list},
|
32
|
+
:name=>
|
33
|
+
{:is_provided=>"nil",
|
34
|
+
:is_not_provided=>"nil",
|
35
|
+
:is=>"text",
|
36
|
+
:is_not=>"text",
|
37
|
+
:contains=>"text",
|
38
|
+
:does_not_contain=>"text",
|
39
|
+
:starts_with=>"text",
|
40
|
+
:ends_with=>"text",
|
41
|
+
:is_in=>"text_delimited",
|
42
|
+
:is_not_in=>"text_delimited"},
|
43
|
+
:admin=>
|
44
|
+
{:is_provided=>"nil",
|
45
|
+
:is_not_provided=>"nil",
|
46
|
+
:is=>"boolean"
|
47
|
+
},
|
48
|
+
:birth_date =>
|
49
|
+
{:is_provided=>"nil",
|
50
|
+
:is_not_provided=>"nil",
|
51
|
+
:is=>"date",
|
52
|
+
:is_not=>"date",
|
53
|
+
:is_after=>"date",
|
54
|
+
:is_before=>"date",
|
55
|
+
:is_in_the_range=>"date_range"
|
56
|
+
},
|
57
|
+
:created_at=>
|
58
|
+
{:is_provided=>"nil",
|
59
|
+
:is_not_provided=>"nil",
|
60
|
+
:is=>"date_time",
|
61
|
+
:is_not=>"date_time",
|
62
|
+
:is_after=>"date_time",
|
63
|
+
:is_before=>"date_time",
|
64
|
+
:is_in_the_range=>"date_time_range",
|
65
|
+
:is_on=>"single_date",
|
66
|
+
:is_not_on=>"single_date"}
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
end
|
data/uninstall.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010 Michael Berkovich, Geni Inc
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
# Uninstall hook code here
|