will_filter 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/.loadpath +12 -0
  2. data/.project +18 -0
  3. data/CHANGELOG.rdoc +1 -0
  4. data/Gemfile +32 -0
  5. data/Gemfile.lock +73 -0
  6. data/LICENSE +18 -0
  7. data/README.rdoc +74 -0
  8. data/Rakefile +54 -0
  9. data/VERSION +1 -0
  10. data/app/controllers/application_controller.rb +27 -0
  11. data/app/controllers/will_filter/calendar_controller.rb +31 -0
  12. data/app/controllers/will_filter/exporter_controller.rb +122 -0
  13. data/app/controllers/will_filter/filter_controller.rb +107 -0
  14. data/app/helpers/application_helper.rb +26 -0
  15. data/app/models/will_filter/filter.rb +694 -0
  16. data/app/views/layouts/application.html.erb +11 -0
  17. data/app/views/will_filter/calendar/_annual.html.erb +14 -0
  18. data/app/views/will_filter/calendar/_month.html.erb +39 -0
  19. data/app/views/will_filter/calendar/_quarter.html.erb +15 -0
  20. data/app/views/will_filter/calendar/index.html.erb +52 -0
  21. data/app/views/will_filter/common/_actions_bar.html.erb +5 -0
  22. data/app/views/will_filter/common/_results_table.html.erb +129 -0
  23. data/app/views/will_filter/common/_scripts.html.erb +10 -0
  24. data/app/views/will_filter/exporter/export.html.erb +11 -0
  25. data/app/views/will_filter/exporter/index.html.erb +47 -0
  26. data/app/views/will_filter/filter/_condition.html.erb +30 -0
  27. data/app/views/will_filter/filter/_conditions.html.erb +56 -0
  28. data/app/views/will_filter/filter/_container.html.erb +31 -0
  29. data/app/views/will_filter/filter/containers/_blank.html.erb +1 -0
  30. data/app/views/will_filter/filter/containers/_boolean.html.erb +5 -0
  31. data/app/views/will_filter/filter/containers/_date.html.erb +12 -0
  32. data/app/views/will_filter/filter/containers/_date_range.html.erb +20 -0
  33. data/app/views/will_filter/filter/containers/_date_time.html.erb +12 -0
  34. data/app/views/will_filter/filter/containers/_date_time_range.html.erb +20 -0
  35. data/app/views/will_filter/filter/containers/_list.html.erb +7 -0
  36. data/app/views/will_filter/filter/containers/_numeric_range.html.erb +13 -0
  37. data/app/views/will_filter/filter/containers/_text.html.erb +7 -0
  38. data/app/views/will_filter/filter/index.html.erb +4 -0
  39. data/config/application.rb +45 -0
  40. data/config/boot.rb +6 -0
  41. data/config/database.yml +22 -0
  42. data/config/environment.rb +13 -0
  43. data/config/environments/development.rb +26 -0
  44. data/config/environments/production.rb +49 -0
  45. data/config/environments/test.rb +38 -0
  46. data/config/routes.rb +64 -0
  47. data/config/will_filter/config.yml +97 -0
  48. data/config.ru +4 -0
  49. data/db/development.sqlite3 +0 -0
  50. data/db/migrate/20090730070119_create_will_filter_tables.rb +19 -0
  51. data/db/seeds.rb +7 -0
  52. data/db/test.sqlite3 +0 -0
  53. data/doc/README_FOR_APP +2 -0
  54. data/examples/README +1 -0
  55. data/lib/application_helper.rb +45 -0
  56. data/lib/core_ext/active_record/base.rb +44 -0
  57. data/lib/core_ext/array.rb +34 -0
  58. data/lib/core_ext/object.rb +34 -0
  59. data/lib/generators/will_filter/templates/config.yml +97 -0
  60. data/lib/generators/will_filter/templates/create_will_filter_tables.rb +19 -0
  61. data/lib/generators/will_filter/will_filter_generator.rb +24 -0
  62. data/lib/tasks/.gitkeep +0 -0
  63. data/lib/tasks/will_filter_tasks.rake +32 -0
  64. data/lib/will_filter/calendar.rb +168 -0
  65. data/lib/will_filter/common_methods.rb +49 -0
  66. data/lib/will_filter/config.rb +104 -0
  67. data/lib/will_filter/containers/boolean.rb +43 -0
  68. data/lib/will_filter/containers/date.rb +51 -0
  69. data/lib/will_filter/containers/date_range.rb +56 -0
  70. data/lib/will_filter/containers/date_time.rb +50 -0
  71. data/lib/will_filter/containers/date_time_range.rb +64 -0
  72. data/lib/will_filter/containers/filter_list.rb +59 -0
  73. data/lib/will_filter/containers/list.rb +56 -0
  74. data/lib/will_filter/containers/nil.rb +45 -0
  75. data/lib/will_filter/containers/numeric.rb +52 -0
  76. data/lib/will_filter/containers/numeric_delimited.rb +50 -0
  77. data/lib/will_filter/containers/numeric_range.rb +60 -0
  78. data/lib/will_filter/containers/single_date.rb +57 -0
  79. data/lib/will_filter/containers/text.rb +45 -0
  80. data/lib/will_filter/containers/text_delimited.rb +51 -0
  81. data/lib/will_filter/engine.rb +11 -0
  82. data/lib/will_filter/filter_condition.rb +59 -0
  83. data/lib/will_filter/filter_container.rb +73 -0
  84. data/lib/will_filter/filter_exception.rb +27 -0
  85. data/lib/will_filter.rb +15 -0
  86. data/pkg/will_filter-0.1.0.gem +0 -0
  87. data/pkg/will_filter-0.1.1.gem +0 -0
  88. data/public/404.html +26 -0
  89. data/public/422.html +26 -0
  90. data/public/500.html +26 -0
  91. data/public/favicon.ico +0 -0
  92. data/public/robots.txt +5 -0
  93. data/public/will_filter/images/buttons.png +0 -0
  94. data/public/will_filter/images/calendar.png +0 -0
  95. data/public/will_filter/images/clock.png +0 -0
  96. data/public/will_filter/images/close.gif +0 -0
  97. data/public/will_filter/images/results_table_th_active.gif +0 -0
  98. data/public/will_filter/images/sort_arrow_all.gif +0 -0
  99. data/public/will_filter/images/sort_bg.gif +0 -0
  100. data/public/will_filter/images/spinner.gif +0 -0
  101. data/public/will_filter/javascripts/will_filter.js +568 -0
  102. data/public/will_filter/javascripts/will_filter_prototype_effects.js +15 -0
  103. data/public/will_filter/stylesheets/will_filter.css +168 -0
  104. data/script/rails +6 -0
  105. data/test/functional/models/will_filter/filter_test.rb +297 -0
  106. data/test/performance/browsing_test.rb +9 -0
  107. data/test/test_helper.rb +71 -0
  108. data/uninstall.rb +24 -0
  109. data/will_filter.gemspec +7 -0
  110. metadata +208 -0
data/.loadpath ADDED
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <loadpath>
3
+ <pathentry path="" type="src"/>
4
+ <pathentry path="org.rubypeople.rdt.launching.RUBY_CONTAINER" type="con"/>
5
+ <pathentry path="GEM_LIB/activerecord-2.3.2/lib" type="var"/>
6
+ <pathentry path="GEM_LIB/rake-0.8.4/lib" type="var"/>
7
+ <pathentry path="GEM_LIB/activeresource-2.3.2/lib" type="var"/>
8
+ <pathentry path="GEM_LIB/rails-2.3.2/lib" type="var"/>
9
+ <pathentry path="GEM_LIB/actionmailer-2.3.2/lib" type="var"/>
10
+ <pathentry path="GEM_LIB/actionpack-2.3.2/lib" type="var"/>
11
+ <pathentry path="GEM_LIB/activesupport-2.3.2/lib" type="var"/>
12
+ </loadpath>
data/.project ADDED
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>will_filter</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ <buildCommand>
9
+ <name>org.rubypeople.rdt.core.rubybuilder</name>
10
+ <arguments>
11
+ </arguments>
12
+ </buildCommand>
13
+ </buildSpec>
14
+ <natures>
15
+ <nature>org.rubypeople.rdt.core.rubynature</nature>
16
+ <nature>org.radrails.rails.core.railsnature</nature>
17
+ </natures>
18
+ </projectDescription>
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1 @@
1
+ == 0.1.0, released 2011-05-29
data/Gemfile ADDED
@@ -0,0 +1,32 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '~> 3.0.0'
4
+ gem "will_paginate", "~> 3.0.pre2"
5
+
6
+ # Bundle edge Rails instead:
7
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
8
+
9
+ # gem 'sqlite3'
10
+
11
+ # Use unicorn as the web server
12
+ # gem 'unicorn'
13
+
14
+ # Deploy with Capistrano
15
+ # gem 'capistrano'
16
+
17
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
18
+ # gem 'ruby-debug'
19
+ # gem 'ruby-debug19', :require => 'ruby-debug'
20
+
21
+ # Bundle the extra gems:
22
+ # gem 'bj'
23
+ # gem 'nokogiri'
24
+ # gem 'sqlite3-ruby', :require => 'sqlite3'
25
+ # gem 'aws-s3', :require => 'aws/s3'
26
+
27
+ # Bundle gems for the local environment. Make sure to
28
+ # put test-only gems in this group so their generators
29
+ # and rake tasks are available in development mode:
30
+ # group :development, :test do
31
+ # gem 'webrat'
32
+ # end
data/Gemfile.lock ADDED
@@ -0,0 +1,73 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.7)
6
+ actionpack (= 3.0.7)
7
+ mail (~> 2.2.15)
8
+ actionpack (3.0.7)
9
+ activemodel (= 3.0.7)
10
+ activesupport (= 3.0.7)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.5.0)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.14)
16
+ rack-test (~> 0.5.7)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.7)
19
+ activesupport (= 3.0.7)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.5.0)
22
+ activerecord (3.0.7)
23
+ activemodel (= 3.0.7)
24
+ activesupport (= 3.0.7)
25
+ arel (~> 2.0.2)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.7)
28
+ activemodel (= 3.0.7)
29
+ activesupport (= 3.0.7)
30
+ activesupport (3.0.7)
31
+ arel (2.0.10)
32
+ builder (2.1.2)
33
+ erubis (2.6.6)
34
+ abstract (>= 1.0.0)
35
+ i18n (0.5.0)
36
+ mail (2.2.19)
37
+ activesupport (>= 2.3.6)
38
+ i18n (>= 0.4.0)
39
+ mime-types (~> 1.16)
40
+ treetop (~> 1.4.8)
41
+ mime-types (1.16)
42
+ polyglot (0.3.1)
43
+ rack (1.2.3)
44
+ rack-mount (0.6.14)
45
+ rack (>= 1.0.0)
46
+ rack-test (0.5.7)
47
+ rack (>= 1.0)
48
+ rails (3.0.7)
49
+ actionmailer (= 3.0.7)
50
+ actionpack (= 3.0.7)
51
+ activerecord (= 3.0.7)
52
+ activeresource (= 3.0.7)
53
+ activesupport (= 3.0.7)
54
+ bundler (~> 1.0)
55
+ railties (= 3.0.7)
56
+ railties (3.0.7)
57
+ actionpack (= 3.0.7)
58
+ activesupport (= 3.0.7)
59
+ rake (>= 0.8.7)
60
+ thor (~> 0.14.4)
61
+ rake (0.9.1)
62
+ thor (0.14.6)
63
+ treetop (1.4.9)
64
+ polyglot (>= 0.3.1)
65
+ tzinfo (0.3.27)
66
+ will_paginate (3.0.pre2)
67
+
68
+ PLATFORMS
69
+ ruby
70
+
71
+ DEPENDENCIES
72
+ rails (= 3.0.7)
73
+ will_paginate (~> 3.0.pre2)
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2011 Michael Berkovich
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,74 @@
1
+ = WillFilter
2
+
3
+ will_filter is a Rails engine plugin that extends the functionality of will_paginate by adding filters to your pages.
4
+
5
+ == Preamble
6
+
7
+ If you ever had to build an admin tool for your web site that displayed a list of objects that can be filtered using
8
+ various criteria, this plugin will make your life easier. Adding a filtered page can now be
9
+ a matter of adding two lines of code - one to your controller and one to your view. See examples below.
10
+
11
+ For advanced samples of how to use the filters, please download and install the following project:
12
+
13
+ http://github.com/berk/will_filter_examples
14
+
15
+ == Installation Instructions
16
+
17
+ Add the following gems to your Gemfile:
18
+
19
+ gem "will_paginate", "~> 3.0.pre2"
20
+ gem 'will_filter', "0.1.1"
21
+
22
+ And run:
23
+
24
+ $ bundle install
25
+
26
+ To configure and initialize will_filter engine, run the following commands:
27
+
28
+ $ rails generate will_filter
29
+ $ rake db:migrate
30
+
31
+ == Examples
32
+
33
+ To add a filtered result-set to your controller use the following method call:
34
+
35
+ class OrderController < ApplicationController
36
+
37
+ def index
38
+ @orders = Order.filter(:params => params)
39
+ end
40
+
41
+ end
42
+
43
+ Note: 'Order' is a Rails ActiveRecord model
44
+
45
+ Now all you have to do is create a view for this action and add the following tag where you want the filter to be rendered:
46
+
47
+ <%= will_filter(@orders) %>
48
+
49
+ And optionally you can do (for results table):
50
+
51
+ <%= will_filter_table_tag(@orders) %>
52
+
53
+ That's it. This will render a filter box with various conditions, operators and values for the model object you selected.
54
+
55
+ Below are a couple of screenshot of what the filter looks like when it is rendered on a page:
56
+
57
+ http://wiki.tr8n.org/images/d/da/Will_filter_1.png
58
+
59
+ http://wiki.tr8n.org/images/e/ec/Will_filter_2.png
60
+
61
+ will_filter_examples project contains some samples that show you how to customize filters and much more
62
+
63
+ git://github.com/berk/will_filter_examples.git
64
+
65
+ Live will_filter_examples application is running here:
66
+
67
+ http://wf.tr8n.org
68
+
69
+ If you have any questions, comments or suggestions, email me at michael@geni.com
70
+
71
+ == Authors and credits
72
+
73
+ Authors:: Michael Berkovich
74
+
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
25
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new do |test|
30
+ test.pattern = 'test/**/*_test.rb'
31
+ test.libs << 'test'
32
+ end
33
+
34
+ begin
35
+ require 'jeweler'
36
+ Jeweler::Tasks.new do |s|
37
+ s.name = "will_filter"
38
+ s.summary = "Rails engine for filtering ActiveRecord model objects."
39
+ s.email = "theiceberk@gmail.com"
40
+ s.homepage = "http://github.com/berk/will_filter"
41
+ s.description = "Rails engine for filtering ActiveRecord model objects."
42
+ s.authors = ["Michael Berkovich"]
43
+ end
44
+ Jeweler::GemcutterTasks.new
45
+ rescue LoadError
46
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
47
+ end
48
+
49
+ #require File.expand_path('../config/application', __FILE__)
50
+ #require 'rake'
51
+ #
52
+ #WillFilter::Application.load_tasks
53
+
54
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 3.0.0
@@ -0,0 +1,27 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ class ApplicationController < ActionController::Base
25
+ # protect_from_forgery
26
+
27
+ end
@@ -0,0 +1,31 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ module WillFilter
25
+ class CalendarController < ApplicationController
26
+ def index
27
+ @calendar = WillFilter::Calendar.new(params[:wf_calendar_selected_date], params[:wf_calendar_start_date], params[:wf_calendar_show_time] == 'true', params[:wf_calendar_mode] || 'month')
28
+ render :layout => false
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,122 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ require 'csv'
25
+
26
+ module WillFilter
27
+ class ExporterController < ApplicationController
28
+ def index
29
+ @wf_filter = WillFilter::Filter.deserialize_from_params(params)
30
+ render :layout => false
31
+ end
32
+
33
+ def export
34
+ params[:page] = 1
35
+ params[:per_page] = 10000 # mas export limit
36
+
37
+ @wf_filter = WillFilter::Filter.deserialize_from_params(params)
38
+
39
+ if @wf_filter.custom_format?
40
+ send_data(@wf_filter.process_custom_format, :type => 'text', :charset => 'utf-8')
41
+ return
42
+ end
43
+
44
+ unless @wf_filter.valid_format?
45
+ render :text => "The export format is not supported (#{@wf_filter.format})"
46
+ return
47
+ end
48
+
49
+ if @wf_filter.format == :xml
50
+ return send_xml_data(@wf_filter)
51
+ end
52
+
53
+ if @wf_filter.format == :json
54
+ return send_json_data(@wf_filter)
55
+ end
56
+
57
+ if @wf_filter.format == :csv
58
+ return send_csv_data(@wf_filter)
59
+ end
60
+
61
+ render :layout => false
62
+ end
63
+
64
+ private
65
+
66
+ def send_xml_data(wf_filter)
67
+ class_name = wf_filter.model_class_name.underscore
68
+
69
+ result = ""
70
+ xml = Builder::XmlMarkup.new(:target => result, :indent => 1)
71
+ xml.instruct!
72
+ xml.tag!(class_name.pluralize) do
73
+ wf_filter.results.each do |obj|
74
+ xml.tag!(class_name.underscore) do
75
+ wf_filter.fields.each do |field|
76
+ xml.tag!(field.to_s, obj.send(field).to_s)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ send_data(result, :type => 'text/xml', :charset => 'utf-8')
83
+ end
84
+
85
+ def send_json_data(wf_filter)
86
+ result = []
87
+
88
+ wf_filter.results.each do |obj|
89
+ hash = {}
90
+ wf_filter.fields.each do |field|
91
+ hash[field] = obj.send(field).to_s
92
+ end
93
+ result << hash
94
+ end
95
+
96
+ send_data(result.to_json, :type => 'text', :charset => 'utf-8')
97
+ end
98
+
99
+ def send_csv_data(wf_filter)
100
+ result = StringIO.new
101
+
102
+ # CSV.open(result) do |csv|
103
+ # csv << ["row", "of", "CSV", "data"]
104
+ # csv << ["another", "row"]
105
+ # # ...
106
+ # end
107
+
108
+ CSV::Writer.generate(result) do |csv|
109
+ csv << wf_filter.fields
110
+ wf_filter.results.each do |obj|
111
+ row = []
112
+ wf_filter.fields.each do |field|
113
+ row << obj.send(field).to_s
114
+ end
115
+ csv << row
116
+ end
117
+ end
118
+
119
+ send_data(result.string, :type => 'text/csv', :charset => 'utf-8')
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,107 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ module WillFilter
25
+ class FilterController < ApplicationController
26
+ def index
27
+ @filters = WillFilter::Filter.new(WillFilter::Filter).deserialize_from_params(params).results
28
+ end
29
+
30
+ def update_condition
31
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
32
+ condition = wf_filter.condition_at(params[:at_index].to_i)
33
+ condition.container.reset_values
34
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
35
+ end
36
+
37
+ def remove_condition
38
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
39
+ wf_filter.remove_condition_at(params[:at_index].to_i)
40
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
41
+ end
42
+
43
+ def add_condition
44
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
45
+ index = params[:after_index].to_i
46
+ if index == -1
47
+ wf_filter.add_default_condition_at(wf_filter.size)
48
+ else
49
+ wf_filter.add_default_condition_at(params[:after_index].to_i + 1)
50
+ end
51
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
52
+ end
53
+
54
+ def remove_all_conditions
55
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
56
+ wf_filter.remove_all
57
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
58
+ end
59
+
60
+ def load_filter
61
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
62
+ wf_filter = wf_filter.load_filter!(params[:wf_key])
63
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
64
+ end
65
+
66
+ def save_filter
67
+ params.delete(:wf_id)
68
+
69
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
70
+ wf_filter.validate!
71
+
72
+ unless wf_filter.errors?
73
+ wf_filter.save
74
+ end
75
+
76
+ wf_filter.key= wf_filter.id.to_s
77
+
78
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
79
+ end
80
+
81
+ def update_filter
82
+ wf_filter = WillFilter::Filter.find_by_id(params.delete(:wf_id))
83
+ wf_filter.deserialize_from_params(params)
84
+ wf_filter.validate!
85
+
86
+ unless wf_filter.errors?
87
+ wf_filter.save
88
+ end
89
+
90
+ wf_filter.key= wf_filter.id.to_s
91
+
92
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
93
+ end
94
+
95
+ def delete_filter
96
+ wf_filter = WillFilter::Filter.find_by_id(params[:wf_id])
97
+ wf_filter.destroy if wf_filter
98
+
99
+ wf_filter = WillFilter::Filter.deserialize_from_params(params)
100
+ wf_filter.id=nil
101
+ wf_filter.key=nil
102
+ wf_filter.remove_all
103
+
104
+ render(:partial => '/will_filter/filter/conditions', :layout=>false, :locals => {:wf_filter => wf_filter})
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2011 Michael Berkovich
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
+ module ApplicationHelper
25
+
26
+ end