will_filter 3.0.5 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/CHANGELOG.rdoc +2 -0
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +156 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.rdoc +78 -0
  9. data/Rakefile +68 -0
  10. data/app/.DS_Store +0 -0
  11. data/app/assets/images/.DS_Store +0 -0
  12. data/{public/favicon.ico → app/assets/images/will_filter/.gitkeep} +0 -0
  13. data/{public/will_filter/images → app/assets/images/will_filter}/buttons.png +0 -0
  14. data/{public/will_filter/images → app/assets/images/will_filter}/calendar.png +0 -0
  15. data/{public/will_filter/images → app/assets/images/will_filter}/clock.png +0 -0
  16. data/{public/will_filter/images → app/assets/images/will_filter}/close.gif +0 -0
  17. data/{public/will_filter/images → app/assets/images/will_filter}/sort_arrow_all.gif +0 -0
  18. data/{public/will_filter/images → app/assets/images/will_filter}/sort_bg.gif +0 -0
  19. data/{public/will_filter/images → app/assets/images/will_filter}/spinner.gif +0 -0
  20. data/{public/will_filter/javascripts/will_filter.js → app/assets/javascripts/will_filter/filter.js} +7 -7
  21. data/app/assets/javascripts/will_filter/filter_prototype_effects.js +38 -0
  22. data/app/assets/stylesheets/will_filter/actions.css.scss +27 -0
  23. data/app/assets/stylesheets/will_filter/buttons.css.scss +24 -0
  24. data/app/assets/stylesheets/will_filter/calendar.css.scss +55 -0
  25. data/app/assets/stylesheets/will_filter/exporter.css.scss +43 -0
  26. data/app/assets/stylesheets/will_filter/filter.css.scss +152 -0
  27. data/app/assets/stylesheets/will_filter/results.css.scss +63 -0
  28. data/app/controllers/{application_controller.rb → will_filter/application_controller.rb} +4 -4
  29. data/app/controllers/will_filter/calendar_controller.rb +1 -1
  30. data/app/controllers/will_filter/exporter_controller.rb +1 -1
  31. data/app/controllers/will_filter/filter_controller.rb +1 -7
  32. data/app/models/will_filter/filter.rb +12 -40
  33. data/app/views/.DS_Store +0 -0
  34. data/app/views/layouts/will_filter/application.html.erb +14 -0
  35. data/app/views/will_filter/.DS_Store +0 -0
  36. data/app/views/will_filter/calendar/.tmp__annual.html.erb.10120~ +32 -0
  37. data/app/views/will_filter/calendar/.tmp__annual.html.erb.2839~ +14 -0
  38. data/app/views/will_filter/calendar/.tmp__annual.html.erb.58862~ +14 -0
  39. data/app/views/will_filter/calendar/.tmp__annual.html.erb.64846~ +14 -0
  40. data/app/views/will_filter/calendar/.tmp__annual.html.erb.68789~ +32 -0
  41. data/app/views/will_filter/calendar/.tmp__annual.html.erb.93003~ +14 -0
  42. data/app/views/will_filter/calendar/.tmp__annual.html.erb.93827~ +32 -0
  43. data/app/views/will_filter/calendar/.tmp__month.html.erb.756~ +39 -0
  44. data/app/views/will_filter/calendar/.tmp__quarter.html.erb.69400~ +24 -0
  45. data/app/views/will_filter/calendar/.tmp_index.html.erb.11043~ +52 -0
  46. data/app/views/will_filter/calendar/.tmp_index.html.erb.33725~ +52 -0
  47. data/app/views/will_filter/calendar/.tmp_index.html.erb.56447~ +66 -0
  48. data/app/views/will_filter/calendar/.tmp_index.html.erb.85379~ +70 -0
  49. data/app/views/will_filter/calendar/.tmp_index.html.erb.86425~ +70 -0
  50. data/app/views/will_filter/calendar/.tmp_index.html.erb.95884~ +52 -0
  51. data/app/views/will_filter/calendar/index.html.erb +3 -3
  52. data/app/views/will_filter/common/.tmp__results_table.html.erb.47785~ +87 -0
  53. data/app/views/will_filter/common/.tmp__results_table.html.erb.88043~ +87 -0
  54. data/app/views/will_filter/common/.tmp__scripts.html.erb.51111~ +0 -0
  55. data/app/views/will_filter/common/.tmp__scripts.html.erb.6990~ +2 -0
  56. data/app/views/will_filter/common/.tmp__scripts.html.erb.88469~ +6 -0
  57. data/app/views/will_filter/common/_results_table.html.erb +6 -2
  58. data/app/views/will_filter/common/_scripts.html.erb +8 -2
  59. data/app/views/will_filter/exporter/.tmp_export.html.erb.10837~ +9 -0
  60. data/app/views/will_filter/exporter/.tmp_export.html.erb.1415~ +29 -0
  61. data/app/views/will_filter/exporter/.tmp_export.html.erb.60681~ +29 -0
  62. data/app/views/will_filter/exporter/.tmp_export.html.erb.61343~ +29 -0
  63. data/app/views/will_filter/exporter/.tmp_export_dialog.html.erb.22940~ +38 -0
  64. data/app/views/will_filter/exporter/.tmp_index.html.erb.13538~ +47 -0
  65. data/app/views/will_filter/exporter/.tmp_index.html.erb.23276~ +47 -0
  66. data/app/views/will_filter/exporter/.tmp_index.html.erb.28308~ +44 -0
  67. data/app/views/will_filter/exporter/.tmp_index.html.erb.29049~ +44 -0
  68. data/app/views/will_filter/exporter/index.html.erb +1 -1
  69. data/app/views/will_filter/filter/.tmp__condition.html.erb.24762~ +28 -0
  70. data/app/views/will_filter/filter/.tmp__condition.html.erb.27587~ +28 -0
  71. data/app/views/will_filter/filter/.tmp__condition.html.erb.45362~ +28 -0
  72. data/app/views/will_filter/filter/.tmp__condition.html.erb.49252~ +28 -0
  73. data/app/views/will_filter/filter/.tmp__condition.html.erb.58234~ +30 -0
  74. data/app/views/will_filter/filter/.tmp__condition.html.erb.60688~ +28 -0
  75. data/app/views/will_filter/filter/.tmp__condition.html.erb.66557~ +28 -0
  76. data/app/views/will_filter/filter/.tmp__condition.html.erb.68032~ +30 -0
  77. data/app/views/will_filter/filter/.tmp__condition.html.erb.73740~ +28 -0
  78. data/app/views/will_filter/filter/.tmp__condition.html.erb.81041~ +30 -0
  79. data/app/views/will_filter/filter/.tmp__condition.html.erb.98638~ +28 -0
  80. data/app/views/will_filter/filter/.tmp__conditions.html.erb.23216~ +50 -0
  81. data/app/views/will_filter/filter/.tmp__conditions.html.erb.53568~ +50 -0
  82. data/app/views/will_filter/filter/.tmp__conditions.html.erb.5788~ +56 -0
  83. data/app/views/will_filter/filter/.tmp__conditions.html.erb.79521~ +50 -0
  84. data/app/views/will_filter/filter/.tmp__conditions.html.erb.92102~ +56 -0
  85. data/app/views/will_filter/filter/.tmp__conditions.html.erb.97034~ +52 -0
  86. data/app/views/will_filter/filter/.tmp__container.html.erb.23178~ +30 -0
  87. data/app/views/will_filter/filter/.tmp__container.html.erb.25113~ +31 -0
  88. data/app/views/will_filter/filter/.tmp__container.html.erb.29332~ +36 -0
  89. data/app/views/will_filter/filter/.tmp__container.html.erb.31412~ +32 -0
  90. data/app/views/will_filter/filter/.tmp__container.html.erb.57958~ +32 -0
  91. data/app/views/will_filter/filter/.tmp__container.html.erb.80588~ +30 -0
  92. data/app/views/will_filter/filter/.tmp__container.html.erb.89054~ +30 -0
  93. data/app/views/will_filter/filter/.tmp__container.html.erb.92260~ +32 -0
  94. data/app/views/will_filter/filter/.tmp__container.html.erb.92798~ +36 -0
  95. data/app/views/will_filter/filter/.tmp__filter_conditions.html.erb.70617~ +78 -0
  96. data/app/views/will_filter/filter/.tmp_calendar.html.erb.30839~ +66 -0
  97. data/app/views/will_filter/filter/.tmp_calendar.html.erb.52766~ +66 -0
  98. data/app/views/will_filter/filter/.tmp_calendar.html.erb.83182~ +66 -0
  99. data/app/views/will_filter/filter/.tmp_export_data.html.erb.50322~ +44 -0
  100. data/app/views/will_filter/filter/.tmp_index.html.erb.40957~ +4 -0
  101. data/app/views/will_filter/filter/_condition.html.erb +5 -5
  102. data/app/views/will_filter/filter/_conditions.html.erb +4 -7
  103. data/app/views/will_filter/filter/_container.html.erb +5 -5
  104. data/app/views/will_filter/filter/containers/_boolean.html.erb +2 -2
  105. data/app/views/will_filter/filter/containers/_date.html.erb +3 -5
  106. data/app/views/will_filter/filter/containers/_date_range.html.erb +5 -9
  107. data/app/views/will_filter/filter/containers/_date_time.html.erb +3 -5
  108. data/app/views/will_filter/filter/containers/_date_time_range.html.erb +5 -9
  109. data/app/views/will_filter/filter/containers/_list.html.erb +1 -1
  110. data/app/views/will_filter/filter/containers/_numeric_range.html.erb +3 -3
  111. data/app/views/will_filter/filter/containers/_text.html.erb +2 -2
  112. data/app/views/will_filter/filter/index.html.erb +1 -1
  113. data/config/routes.rb +39 -17
  114. data/db/migrate/20110924023807_create_will_filter_filters.rb +15 -0
  115. data/lib/generators/.DS_Store +0 -0
  116. data/lib/generators/will_filter/templates/config.yml +0 -28
  117. data/lib/generators/will_filter/templates/create_will_filter_filters.rb +15 -0
  118. data/lib/generators/will_filter/will_filter_generator.rb +27 -4
  119. data/lib/tasks/will_filter_tasks.rake +1 -2
  120. data/lib/will_filter.rb +26 -1
  121. data/lib/will_filter/calendar.rb +1 -1
  122. data/lib/will_filter/config.rb +1 -6
  123. data/lib/will_filter/containers/filter_list.rb +2 -2
  124. data/lib/will_filter/engine.rb +23 -17
  125. data/lib/will_filter/{common_methods.rb → extensions/action_controller_extension.rb} +18 -20
  126. data/lib/will_filter/extensions/action_view_extension.rb +50 -0
  127. data/lib/{core_ext/active_record/base.rb → will_filter/extensions/active_record_extension.rb} +22 -17
  128. data/lib/{core_ext/array.rb → will_filter/extensions/array_extension.rb} +1 -1
  129. data/lib/{application_helper.rb → will_filter/railtie.rb} +30 -20
  130. data/{app/helpers/application_helper.rb → lib/will_filter/version.rb} +3 -3
  131. data/script/rails +6 -0
  132. data/spec/spec_helper.rb +27 -0
  133. data/test/.DS_Store +0 -0
  134. data/test/dummy/.DS_Store +0 -0
  135. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/actions.css.scssc +0 -0
  136. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/buttons.css.scssc +0 -0
  137. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/calendar.css.scssc +0 -0
  138. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/exporter.css.scssc +0 -0
  139. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/filter.css.scssc +0 -0
  140. data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/results.css.scssc +0 -0
  141. data/test/dummy/Rakefile +7 -0
  142. data/test/dummy/app/.DS_Store +0 -0
  143. data/test/dummy/app/assets/javascripts/application.js +7 -0
  144. data/test/dummy/app/assets/stylesheets/application.css +7 -0
  145. data/test/dummy/app/assets/stylesheets/kaminari.css +10 -0
  146. data/test/dummy/app/controllers/advanced_controller.rb +19 -0
  147. data/test/dummy/app/controllers/application_controller.rb +8 -0
  148. data/test/dummy/app/controllers/simple_controller.rb +15 -0
  149. data/test/dummy/app/helpers/application_helper.rb +3 -0
  150. data/test/dummy/app/mailers/.gitkeep +0 -0
  151. data/test/dummy/app/models/.gitkeep +0 -0
  152. data/test/dummy/app/models/event.rb +15 -0
  153. data/test/dummy/app/models/event_filter.rb +41 -0
  154. data/test/dummy/app/models/event_user.rb +10 -0
  155. data/test/dummy/app/models/event_user_filter.rb +40 -0
  156. data/test/dummy/app/models/user.rb +42 -0
  157. data/test/dummy/app/models/user_filter.rb +57 -0
  158. data/test/dummy/app/views/advanced/event_members.html.erb +2 -0
  159. data/test/dummy/app/views/advanced/events.html.erb +2 -0
  160. data/test/dummy/app/views/advanced/users.html.erb +2 -0
  161. data/test/dummy/app/views/advanced/users_with_actions.html.erb +12 -0
  162. data/test/dummy/app/views/common/_event_members.html.erb +2 -0
  163. data/test/dummy/app/views/common/_events.html.erb +2 -0
  164. data/test/dummy/app/views/common/_menu.html.erb +23 -0
  165. data/test/dummy/app/views/common/_users.html.erb +2 -0
  166. data/test/dummy/app/views/kaminari/_first_page.html.erb +11 -0
  167. data/test/dummy/app/views/kaminari/_gap.html.erb +8 -0
  168. data/test/dummy/app/views/kaminari/_last_page.html.erb +11 -0
  169. data/test/dummy/app/views/kaminari/_next_page.html.erb +11 -0
  170. data/test/dummy/app/views/kaminari/_page.html.erb +12 -0
  171. data/test/dummy/app/views/kaminari/_paginator.html.erb +23 -0
  172. data/test/dummy/app/views/kaminari/_prev_page.html.erb +11 -0
  173. data/test/dummy/app/views/layouts/application.html.erb +17 -0
  174. data/test/dummy/app/views/simple/event_members.html.erb +2 -0
  175. data/test/dummy/app/views/simple/events.html.erb +3 -0
  176. data/test/dummy/app/views/simple/users.html.erb +2 -0
  177. data/test/dummy/config.ru +4 -0
  178. data/{config → test/dummy/config}/application.rb +11 -10
  179. data/test/dummy/config/boot.rb +10 -0
  180. data/test/dummy/config/data/female_names.txt +26 -0
  181. data/test/dummy/config/data/last_names.txt +50 -0
  182. data/test/dummy/config/data/male_names.txt +25 -0
  183. data/{config → test/dummy/config}/database.yml +3 -0
  184. data/test/dummy/config/environment.rb +5 -0
  185. data/{config → test/dummy/config}/environments/development.rb +8 -4
  186. data/{config → test/dummy/config}/environments/production.rb +24 -13
  187. data/{config → test/dummy/config}/environments/test.rb +9 -5
  188. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  189. data/test/dummy/config/initializers/inflections.rb +10 -0
  190. data/test/dummy/config/initializers/mime_types.rb +5 -0
  191. data/test/dummy/config/initializers/secret_token.rb +7 -0
  192. data/test/dummy/config/initializers/session_store.rb +8 -0
  193. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  194. data/test/dummy/config/locales/en.yml +5 -0
  195. data/test/dummy/config/routes.rb +13 -0
  196. data/test/dummy/config/will_filter/config.yml +97 -0
  197. data/test/dummy/db/migrate/.DS_Store +0 -0
  198. data/test/dummy/db/migrate/20090416182137_create_users.rb +15 -0
  199. data/test/dummy/db/migrate/20090418042757_create_events.rb +20 -0
  200. data/test/dummy/db/migrate/20090418062225_create_event_users.rb +17 -0
  201. data/test/dummy/db/schema.rb +61 -0
  202. data/test/dummy/lib/assets/.gitkeep +0 -0
  203. data/test/dummy/lib/tasks/dummy.rake +14 -0
  204. data/test/dummy/log/.gitkeep +0 -0
  205. data/{public → test/dummy/public}/404.html +0 -0
  206. data/{public → test/dummy/public}/422.html +0 -0
  207. data/{public → test/dummy/public}/500.html +0 -0
  208. data/test/dummy/public/favicon.ico +0 -0
  209. data/test/dummy/script/rails +6 -0
  210. data/test/dummy/test/functional/welcome_controller_test.rb +9 -0
  211. data/test/dummy/test/unit/helpers/welcome_helper_test.rb +4 -0
  212. data/test/fixtures/will_filter/filters.yml +11 -0
  213. data/test/functional/will_filter/calendar_controller_test.rb +9 -0
  214. data/test/functional/will_filter/exporter_controller_test.rb +9 -0
  215. data/test/functional/will_filter/filter_controller_test.rb +9 -0
  216. data/test/integration/navigation_test.rb +10 -0
  217. data/test/test_helper.rb +10 -0
  218. data/test/unit/helpers/will_filter/calendar_helper_test.rb +6 -0
  219. data/test/unit/helpers/will_filter/exporter_helper_test.rb +6 -0
  220. data/test/unit/helpers/will_filter/filter_helper_test.rb +6 -0
  221. data/test/unit/will_filter/filter_test.rb +9 -0
  222. data/test/will_filter_test.rb +7 -0
  223. data/will_filter.gemspec +38 -0
  224. metadata +446 -45
  225. data/app/views/layouts/application.html.erb +0 -11
  226. data/config/boot.rb +0 -6
  227. data/config/environment.rb +0 -15
  228. data/lib/core_ext/object.rb +0 -34
  229. data/lib/generators/will_filter/templates/create_will_filter_tables.rb +0 -19
  230. data/public/robots.txt +0 -5
  231. data/public/will_filter/images/results_table_th_active.gif +0 -0
  232. data/public/will_filter/javascripts/will_filter_prototype_effects.js +0 -15
  233. data/public/will_filter/stylesheets/will_filter.css +0 -168
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2011 Michael Berkovich
2
+ # Copyright (c) 2010-2011 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
@@ -21,6 +21,6 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- module ApplicationHelper
25
-
24
+ module WillFilter
25
+ VERSION = "3.1.1"
26
26
  end
data/script/rails ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ #!/usr/bin/env ruby
3
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
4
+
5
+ ENGINE_PATH = File.expand_path('../..', __FILE__)
6
+ load File.expand_path('../../test/dummy/script/rails', __FILE__)
@@ -0,0 +1,27 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+
6
+ # Requires supporting ruby files with custom matchers and macros, etc,
7
+ # in spec/support/ and its subdirectories.
8
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ # == Mock Framework
12
+ #
13
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
14
+ #
15
+ # config.mock_with :mocha
16
+ # config.mock_with :flexmock
17
+ # config.mock_with :rr
18
+ config.mock_with :rspec
19
+
20
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
24
+ # examples within a transaction, remove the following line or assign false
25
+ # instead of true.
26
+ config.use_transactional_fixtures = true
27
+ end
data/test/.DS_Store ADDED
Binary file
Binary file
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
Binary file
@@ -0,0 +1,7 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require_tree .
@@ -0,0 +1,7 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_tree .
7
+ */
@@ -0,0 +1,10 @@
1
+ body {
2
+ font-family:Arial;
3
+ font-size:12px;
4
+ background-color:white;
5
+ }
6
+
7
+ a {
8
+ text-decoration:none;
9
+ color:#005B99;
10
+ }
@@ -0,0 +1,19 @@
1
+ class AdvancedController < ApplicationController
2
+
3
+ def users
4
+ @users = User.filter(:params => params, :filter => :user_filter)
5
+ end
6
+
7
+ def users_with_actions
8
+ @users = User.filter(:params => params, :filter => :user_filter)
9
+ end
10
+
11
+ def events
12
+ @events = Event.filter(:params => params, :filter => :event_filter)
13
+ end
14
+
15
+ def event_members
16
+ @event_users = EventUser.filter(:params => params, :filter => :event_user_filter)
17
+ end
18
+
19
+ end
@@ -0,0 +1,8 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ def current_user
5
+ @current_user ||= User.new
6
+ end
7
+
8
+ end
@@ -0,0 +1,15 @@
1
+ class SimpleController < ApplicationController
2
+
3
+ def users
4
+ @users = User.filter(:params => params)
5
+ end
6
+
7
+ def events
8
+ @events = Event.filter(:params => params)
9
+ end
10
+
11
+ def event_members
12
+ @event_users = EventUser.filter(:params => params)
13
+ end
14
+
15
+ end
@@ -0,0 +1,3 @@
1
+ module ApplicationHelper
2
+
3
+ end
File without changes
File without changes
@@ -0,0 +1,15 @@
1
+ class Event < ActiveRecord::Base
2
+ belongs_to :user, :class_name => 'User', :foreign_key => :creator_id
3
+ has_many :event_users
4
+
5
+ def self.random
6
+ find(:first, :offset => rand(count - 1))
7
+ end
8
+
9
+ def self.generate_random_data(count = 500)
10
+ 0.upto(count) do |index|
11
+ create(:user => User.random, :name => "Event #{index}", :headline => "Event Headline #{index}", :start_time => (Time.now + rand(100).hours))
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,41 @@
1
+ class EventFilter < WillFilter::Filter
2
+
3
+ def definition
4
+ defs = super
5
+ defs[:"user.first_name"] = {:is => :text, :is_not => :text, :contains => :text}
6
+ defs[:"user.last_name"] = {:is => :text, :is_not => :text, :contains => :text}
7
+ defs[:"user.sex"] = {:is => :list, :is_not => :list}
8
+ defs
9
+ end
10
+
11
+ def value_options_for(criteria_key)
12
+ if criteria_key == :"user.sex"
13
+ return ["male", "female"]
14
+ end
15
+
16
+ return []
17
+ end
18
+
19
+ def default_filters
20
+ [
21
+ ["Created Today", "created_today"],
22
+ ["Start Tomorrow", "start_tomorrow"],
23
+ ["Created By Users With Name 'Susan'", "created_by_susans"],
24
+ ["Created By Male Users And Start Tomorrow", "male_creators_start_tomorrow"]
25
+ ]
26
+ end
27
+
28
+ def default_filter_conditions(key)
29
+ return [:created_at, :is_on, Date.today] if (key == "created_today")
30
+ return [:start_time, :is_on, Date.today + 1.day] if (key == "start_tomorrow")
31
+ return [:"user.first_name", :is, "Susan"] if (key == "created_by_susans")
32
+ if (key == "male_creators_start_tomorrow")
33
+ return [[:"user.sex", :is, "male"], [:start_time, :is_on, Date.today + 1.day]]
34
+ end
35
+ end
36
+
37
+ def inner_joins
38
+ [[:user, :creator_id]]
39
+ end
40
+
41
+ end
@@ -0,0 +1,10 @@
1
+ class EventUser < ActiveRecord::Base
2
+ belongs_to :event
3
+ belongs_to :user
4
+
5
+ def self.generate_random_data(count = 500)
6
+ 0.upto(count) do
7
+ create(:user => User.random, :event => Event.random)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ class EventUserFilter < WillFilter::Filter
2
+
3
+ def inner_joins
4
+ [[:user, :user_id], [:event, :event_id]]
5
+ end
6
+
7
+ def definition
8
+ defs = super
9
+ defs[:"user.sex"] = {:is => :list, :is_not => :list}
10
+ defs
11
+ end
12
+
13
+ def value_options_for(criteria_key)
14
+ if criteria_key == :"user.sex"
15
+ return ["male", "female"]
16
+ end
17
+
18
+ return []
19
+ end
20
+
21
+ def default_filters
22
+ [
23
+ ["Events That Start Tomorrow And Attended By Users With Name 'David'", "start_tomorrow_with_davids"],
24
+ ["Events That Start Tomorrow And Attended By Laddies Who Are 18 And Older", "start_tomorrow_with_females"]
25
+ ]
26
+ end
27
+
28
+ def default_filter_conditions(key)
29
+ if (key == "start_tomorrow_with_davids")
30
+ return [[:"event.start_time", :is_on, Date.today + 1.day],
31
+ [:"user.first_name", :is, 'David']]
32
+ end
33
+ if (key == "start_tomorrow_with_females")
34
+ return [[:"event.start_time", :is_on, Date.today + 1.day],
35
+ [:"user.sex", :is, 'female'],
36
+ [:"user.birthday", :is_after, Date.today - 18.years]]
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,42 @@
1
+ class User < ActiveRecord::Base
2
+ has_many :events
3
+ has_many :events_users
4
+
5
+ def name
6
+ "#{first_name} #{last_name}"
7
+ end
8
+
9
+ def self.random
10
+ find(:first, :offset => rand(count - 1))
11
+ end
12
+
13
+ def self.generate_random_data(count = 500)
14
+ male_names = File.read("config/data/male_names.txt").split("\n")
15
+ female_names = File.read("config/data/female_names.txt").split("\n")
16
+ last_names = File.read("config/data/last_names.txt").split("\n")
17
+
18
+ 0.upto(count) do
19
+ sex = (rand(2) == 1) ? "male" : "female"
20
+ create(:first_name => random_name(sex, male_names, female_names), :last_name => last_names[rand(last_names.size)], :sex => sex, :birthday => random_birthday)
21
+ end
22
+ end
23
+
24
+ def self.random_name(sex, male_names, female_names)
25
+ return male_names[rand(male_names.size)] if sex == "male"
26
+ female_names[rand(female_names.size)]
27
+ end
28
+
29
+ def self.random_birthday
30
+ birthday = nil
31
+ while (not birthday)
32
+ begin
33
+ birthday = Date.new(rand(59) + 1950, rand(12), rand(31))
34
+ rescue
35
+ birthday = nil
36
+ end
37
+ end
38
+
39
+ birthday
40
+ end
41
+
42
+ end
@@ -0,0 +1,57 @@
1
+ class UserFilter < WillFilter::Filter
2
+
3
+ def definition
4
+ defs = super
5
+ defs[:sex][:is] = :list
6
+ defs[:sex][:is_not] = :list
7
+ defs
8
+ end
9
+
10
+ def value_options_for(criteria_key)
11
+ if criteria_key == :sex
12
+ return ["male", "female"]
13
+ end
14
+
15
+ return []
16
+ end
17
+
18
+ def default_filters
19
+ [
20
+ ["Male Only", "male_only"],
21
+ ["Females With Last Name 'Adams'", "adams"],
22
+ ["First Names Start With 'A'", "first_names_start_with_a"],
23
+ ["Last Names Containing 'son'", "last_names_containing_son"],
24
+ ["Susans Born Between 2000 and 2010", "susans"],
25
+ ]
26
+ end
27
+
28
+ def default_filter_conditions(key)
29
+ return [:sex, :is, "male"] if (key == "male_only")
30
+ return [[:sex, :is, "female"],[:last_name, :is, "Adams"]] if (key == "adams")
31
+ return [:first_name, :starts_with, "A"] if (key == "first_names_start_with_a")
32
+ return [:last_name, :contains, "son"] if (key == "last_names_containing_son")
33
+ if (key == "susans")
34
+ return [[:first_name, :is, "Susan"],
35
+ [:birthday, :is_in_the_range, [Date.new(2000,1,1), Date.new(2010,1,1)]]]
36
+ end
37
+ end
38
+
39
+ def order_clause
40
+ if key == "first_names_start_with_a"
41
+ @order = 'first_name'
42
+ @order_type = 'asc'
43
+ end
44
+
45
+ if key == "last_names_containing_son"
46
+ @order = 'last_name'
47
+ @order_type = 'asc'
48
+ end
49
+
50
+ super
51
+ end
52
+
53
+ def default_filter_if_empty
54
+ "male_only"
55
+ end
56
+
57
+ end
@@ -0,0 +1,2 @@
1
+ <h1>Advanced Event Members Filter</h1>
2
+ <%= render :partial=> "/common/event_members" %>
@@ -0,0 +1,2 @@
1
+ <h1>Advanced Events Filter</h1>
2
+ <%= render :partial=> "/common/events" %>
@@ -0,0 +1,2 @@
1
+ <h1>Advanced Users Filter</h1>
2
+ <%= render :partial=> "/common/users" %>
@@ -0,0 +1,12 @@
1
+ <h1>Advanced Users Filter</h1>
2
+ <%= will_filter_tag(@users) %>
3
+ <%= will_filter_table_tag(@users, :columns => [
4
+ [:checkbox, 'users'],
5
+ :id,
6
+ [:name, lambda{|user| "#{user.first_name} #{user.last_name}"}],
7
+ :sex])
8
+ %>
9
+
10
+ <%= will_filter_actions_bar_tag(@users, [
11
+ ['Delete Selected Languages', "alert('Deleting users...')"]
12
+ ]) %>
@@ -0,0 +1,2 @@
1
+ <%= will_filter_tag(@event_users)%>
2
+ <%= will_filter_table_tag(@event_users) %>
@@ -0,0 +1,2 @@
1
+ <%= will_filter_tag(@events)%>
2
+ <%= will_filter_table_tag(@events) %>
@@ -0,0 +1,23 @@
1
+ <div style="width:100%; padding-top:5px; padding-bottom:5px; background-color:#eee; border-bottom:1px dotted grey; font-size: 14px;">
2
+ <center>
3
+ <table style="width:900px;" cellpadding="0" cellspacing="0">
4
+ <tr>
5
+ <td style="text-align:left;">
6
+ <%=link_to("Users", :action => :users) %>
7
+ | <%=link_to("Events", :action => :events) %>
8
+ | <%=link_to("Event Members", :action => :event_members) %>
9
+ <% unless controller.controller_name == 'simple' %>
10
+ | <%=link_to("Users with Actions", :action => :users_with_actions) %>
11
+ <% end %>
12
+ </td>
13
+ <td style="text-align:right;">
14
+ <% if controller.controller_name == 'simple' %>
15
+ <%=link_to("Switch to Advanced Mode", :controller => :advanced, :action => :users) %>
16
+ <% else %>
17
+ <%=link_to("Switch to Simple Mode", :controller => :simple, :action => :users) %>
18
+ <% end %>
19
+ </td>
20
+ </tr>
21
+ </table>
22
+ </center>
23
+ </div>