wice_grid 3.5.0 → 3.6.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.inch.yml +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +181 -0
- data/.travis.yml +22 -0
- data/{CHANGELOG → CHANGELOG.md} +95 -31
- data/Gemfile +4 -1
- data/README.md +1517 -0
- data/Rakefile +51 -7
- data/{SAVED_QUERIES_HOWTO.rdoc → SAVED_QUERIES_HOWTO.md} +34 -31
- data/TODO.md +16 -0
- data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +4 -6
- data/lib/generators/wice_grid/install_generator.rb +2 -5
- data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +1 -0
- data/lib/generators/wice_grid/templates/wice_grid_config.rb +29 -34
- data/lib/wice/active_record_column_wrapper.rb +36 -17
- data/lib/wice/columns.rb +53 -52
- data/lib/wice/columns/column_action.rb +11 -13
- data/lib/wice/columns/column_boolean.rb +9 -11
- data/lib/wice/columns/column_bootstrap_datepicker.rb +48 -0
- data/lib/wice/columns/column_custom_dropdown.rb +22 -23
- data/lib/wice/columns/column_float.rb +2 -6
- data/lib/wice/columns/column_html5_datepicker.rb +31 -0
- data/lib/wice/columns/column_integer.rb +9 -13
- data/lib/wice/columns/column_jquery_datepicker.rb +49 -0
- data/lib/wice/columns/column_processor_index.rb +18 -13
- data/lib/wice/columns/column_rails_date_helper.rb +41 -0
- data/lib/wice/columns/column_rails_datetime_helper.rb +40 -0
- data/lib/wice/columns/column_range.rb +7 -11
- data/lib/wice/columns/column_string.rb +24 -20
- data/lib/wice/columns/common_date_datetime_mixin.rb +20 -0
- data/lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb +39 -0
- data/lib/wice/columns/common_js_date_datetime_mixin.rb +15 -0
- data/lib/wice/columns/{column_date.rb → common_rails_date_datetime_conditions_generator_mixin.rb} +4 -22
- data/lib/wice/columns/common_standard_helper_date_datetime_mixin.rb +22 -0
- data/lib/wice/grid_output_buffer.rb +19 -10
- data/lib/wice/grid_renderer.rb +146 -85
- data/lib/wice/helpers/bs_calendar_helpers.rb +6 -7
- data/lib/wice/helpers/js_calendar_helpers.rb +19 -17
- data/lib/wice/helpers/wice_grid_misc_view_helpers.rb +18 -18
- data/lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb +44 -49
- data/lib/wice/helpers/wice_grid_view_helpers.rb +131 -134
- data/lib/wice/kaminari_monkey_patching.rb +3 -1
- data/lib/wice/table_column_matrix.rb +23 -8
- data/lib/wice/wice_grid_controller.rb +12 -16
- data/lib/wice/wice_grid_core_ext.rb +12 -20
- data/lib/wice/wice_grid_misc.rb +131 -53
- data/lib/wice/wice_grid_serialized_queries_controller.rb +10 -11
- data/lib/wice/wice_grid_serialized_query.rb +4 -3
- data/lib/wice/wice_grid_spreadsheet.rb +19 -18
- data/lib/wice_grid.rb +144 -135
- data/spec/schema.rb +9 -0
- data/spec/spec_helper.rb +75 -0
- data/spec/support/active_record.rb +11 -0
- data/spec/support/wice_grid_test_config.rb +172 -0
- data/spec/wice/grid_output_buffer_spec.rb +41 -0
- data/spec/wice/table_column_matrix_spec.rb +38 -0
- data/spec/wice/wice_grid_misc_spec.rb +159 -0
- data/spec/wice/wice_grid_spreadsheet_spec.rb +14 -0
- data/test/readme.txt +1 -1
- data/vendor/assets/javascripts/wice_grid_init.js.coffee +14 -8
- data/vendor/assets/stylesheets/wice_grid.scss +84 -0
- data/wice_grid.gemspec +32 -16
- metadata +217 -25
- data/README.rdoc +0 -1325
- data/lib/generators/wice_grid/templates/wice_grid.scss +0 -140
- data/lib/wice/columns/column_datetime.rb +0 -171
- data/vendor/assets/images/icons/grid/arrow_down.gif +0 -0
- data/vendor/assets/images/icons/grid/arrow_up.gif +0 -0
- data/vendor/assets/images/icons/grid/calendar_view_month.png +0 -0
- data/vendor/assets/images/icons/grid/collapse.gif +0 -0
- data/vendor/assets/images/icons/grid/delete.png +0 -0
- data/vendor/assets/images/icons/grid/expand.gif +0 -0
- data/vendor/assets/images/icons/grid/page_white_excel.png +0 -0
- data/vendor/assets/images/icons/grid/page_white_find.png +0 -0
- data/vendor/assets/images/icons/grid/table.png +0 -0
- data/vendor/assets/images/icons/grid/table_refresh.png +0 -0
- data/vendor/assets/images/icons/grid/tick_all.png +0 -0
- data/vendor/assets/images/icons/grid/untick_all.png +0 -0
data/Rakefile
CHANGED
@@ -1,15 +1,59 @@
|
|
1
|
-
|
2
|
-
require '
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
require 'bundler/gem_tasks'
|
5
|
+
|
6
|
+
begin
|
7
|
+
Bundler.setup(:default, :development)
|
8
|
+
rescue Bundler::BundlerError => e
|
9
|
+
$stderr.puts e.message
|
10
|
+
$stderr.puts 'Run `bundle install` to install missing gems'
|
11
|
+
exit e.status_code
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'rake'
|
15
|
+
require 'rspec/core'
|
16
|
+
require 'rspec/core/rake_task'
|
17
|
+
|
18
|
+
RSpec::Core::RakeTask.new(:spec)
|
19
|
+
|
20
|
+
require 'rubocop/rake_task'
|
21
|
+
|
22
|
+
desc 'Run RuboCop on the lib directory'
|
23
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
24
|
+
task.patterns = ['lib/**/*.rb']
|
25
|
+
# don't abort rake on failure
|
26
|
+
task.fail_on_error = false
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Run RSpec with code coverage'
|
30
|
+
task :coverage do
|
31
|
+
ENV['COVERAGE'] = 'true'
|
32
|
+
Rake::Task['spec'].execute
|
33
|
+
end
|
3
34
|
|
4
|
-
|
35
|
+
# Experimenting with documentation system we will keep both Yardoc and Rdoc for some time, plus Inch
|
5
36
|
|
6
|
-
|
37
|
+
require 'yard'
|
38
|
+
require 'yard/rake/yardoc_task'
|
39
|
+
desc 'Generate YARDOC documentation for the plugin'
|
40
|
+
YARD::Rake::YardocTask.new(:yardoc) do |t|
|
41
|
+
OTHER_PATHS = %w()
|
42
|
+
t.files = ['lib/**/*.rb', OTHER_PATHS]
|
43
|
+
t.options = %w(--main=README.md --file TODO.md,CHANGELOG.md,SAVED_QUERIES_HOWTO.md,MIT-LICENSE)
|
44
|
+
t.stats_options = ['--list-undoc']
|
45
|
+
end
|
46
|
+
|
47
|
+
gem 'rdoc'
|
48
|
+
require 'rdoc/task'
|
7
49
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
8
50
|
rdoc.rdoc_dir = 'rdoc'
|
9
51
|
rdoc.title = 'WiceGrid'
|
10
52
|
rdoc.options << '--line-numbers' << '--inline-source'
|
11
|
-
rdoc.rdoc_files.include('README.
|
12
|
-
rdoc.rdoc_files.include('SAVED_QUERIES_HOWTO.
|
13
|
-
rdoc.rdoc_files.include('CHANGELOG')
|
53
|
+
rdoc.rdoc_files.include('README.md')
|
54
|
+
rdoc.rdoc_files.include('SAVED_QUERIES_HOWTO.md')
|
55
|
+
rdoc.rdoc_files.include('CHANGELOG.md')
|
14
56
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
57
|
end
|
58
|
+
|
59
|
+
task default: [:rubocop, :spec, :yardoc]
|
@@ -1,63 +1,63 @@
|
|
1
|
-
|
1
|
+
## Saving Queries How-To
|
2
2
|
|
3
3
|
WiceGrid allows to save the state of filters as a custom query and later restore it from the list of saved queries.
|
4
4
|
|
5
|
-
|
5
|
+
### Step 1: Create the database table to store queries
|
6
6
|
|
7
7
|
To get started create the database table to store queries. Run the following generator:
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
```
|
9
|
+
rails g wice_grid:add_migration_for_serialized_queries
|
10
|
+
```
|
11
11
|
This add a migration file with the definition of the table. Run the migrate task:
|
12
|
-
|
12
|
+
```
|
13
13
|
bundle 'rake db:migrate'
|
14
|
-
|
15
|
-
|
14
|
+
```
|
15
|
+
### Step 2: Create the controller to handle AJAX queries.
|
16
16
|
|
17
17
|
Creation and deletion of queries is implemented as AJAX calls, and a controller is needed to handle these calls. Create an empty controller
|
18
18
|
with any name and add method +save_wice_grid_queries+ to it:
|
19
|
-
|
19
|
+
```
|
20
20
|
class QueriesController < ApplicationController
|
21
21
|
save_wice_grid_queries
|
22
22
|
end
|
23
|
-
|
23
|
+
```
|
24
24
|
This is it. The controller now has the required action methods.
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
If the name of the query controller is QueriesController, add the following to <tt>routes.rb</tt>:
|
26
|
+
### Step 3: Add routes
|
29
27
|
|
28
|
+
If the name of the query controller is QueriesController, add the following to `routes.rb`:
|
29
|
+
```
|
30
30
|
Wice::define_routes(self, 'queries')
|
31
|
-
|
32
|
-
|
31
|
+
```
|
32
|
+
### Step 4: Add the saved query panel to the view.
|
33
33
|
|
34
34
|
To show the list of saved queries and the form to create new queries in a view, add the following helper to the view:
|
35
|
-
|
35
|
+
```
|
36
36
|
<%= saved_queries_panel(@grid_object) %>
|
37
|
-
|
37
|
+
```
|
38
38
|
Voila!
|
39
39
|
|
40
40
|
Just like WiceGrid itself, the query panel contains no forms and is thus form-friendly.
|
41
41
|
|
42
42
|
*Important*: Saved queries of all grids in the application are stored in one table and differentiated by the name of the grid, thus, for all forms
|
43
|
-
with saved queries it is important to define different names! (use parameter
|
43
|
+
with saved queries it is important to define different names! (use parameter `:name` in +initialize_grid+)
|
44
44
|
|
45
45
|
It is also possible to initialize a grid with an initial saved query providing the id of the query record or the ActiveRecord
|
46
|
-
itself to parameter
|
47
|
-
|
46
|
+
itself to parameter `saved_query`:
|
47
|
+
```
|
48
48
|
@products_grid = initialize_grid(Product,
|
49
49
|
name: 'prod_grid',
|
50
50
|
saved_query: SavedQuery.find_by_id_and_grid_name(12, 'prod_grid') )
|
51
|
+
```
|
51
52
|
|
52
|
-
|
53
|
-
== Adding Application Specific Logic to Saving/Restoring Queries
|
53
|
+
## Adding Application Specific Logic to Saving/Restoring Queries
|
54
54
|
|
55
55
|
WiceGrid allows to add application specific logic to saving and restoring queries by substituting the default ActiveRecord model provided by WiceGrid with a custom model.
|
56
56
|
|
57
|
-
Copy
|
57
|
+
Copy `lib/wice_grid_serialized_query.rb` from the gem to `app/models/`, rename the file and the class to your liking.
|
58
58
|
|
59
59
|
After renaming the model to SavedQuery it looks like this:
|
60
|
-
|
60
|
+
```
|
61
61
|
class SavedQuery < ActiveRecord::Base #:nodoc:
|
62
62
|
serialize :query
|
63
63
|
|
@@ -71,11 +71,12 @@ After renaming the model to SavedQuery it looks like this:
|
|
71
71
|
self.find(:all, conditions: conditions)
|
72
72
|
end
|
73
73
|
end
|
74
|
+
```
|
74
75
|
|
75
76
|
It is required that the model provides class method +list+ which accepts two parameters: the name of the WiceGrid instance and the controller
|
76
77
|
object, and returns a list of queries. The controller object is needed to provide the application context. For instance, if it is needed to
|
77
78
|
store queries for each user, we could add +user_id+ to the table and modify the code so it looks like the following:
|
78
|
-
|
79
|
+
```
|
79
80
|
class SavedQuery < ActiveRecord::Base
|
80
81
|
serialize :query
|
81
82
|
|
@@ -94,17 +95,19 @@ store queries for each user, we could add +user_id+ to the table and modify the
|
|
94
95
|
self.find(:all, conditions: conditions)
|
95
96
|
end
|
96
97
|
end
|
98
|
+
```
|
97
99
|
|
98
100
|
The following step is to make sure that a new query is saved with the correct +user_id+. To do so, change the helper
|
99
|
-
|
100
|
-
|
101
|
+
`saved_queries_panel(@grid_object)` to the following:
|
101
102
|
|
103
|
+
```
|
102
104
|
<%= saved_queries_panel(@identities_grid, extra_parameters: {user_id: @current_user.id}) %>
|
103
|
-
|
105
|
+
```
|
104
106
|
For every key in has :extra_parameters there must exist a field in the model - this hash will be used as a parameter to
|
105
|
-
|
107
|
+
`attributes=` method of the query object.
|
106
108
|
|
107
109
|
Finally, let WiceGrid know which model to use for saving queries by changing constant +QUERY_STORE_MODEL+
|
108
|
-
in
|
109
|
-
|
110
|
+
in `lib/wice_grid_config.rb` to the name of the custom model (as a string), in the above example this would look like the following:
|
111
|
+
```
|
110
112
|
QUERY_STORE_MODEL = 'SavedQuery'
|
113
|
+
```
|
data/TODO.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
* [done] Replace all icons by Font Awesome, remove the icons
|
2
|
+
* [done] Joined tables: Instead of
|
3
|
+
model: 'ModelClassName'
|
4
|
+
use
|
5
|
+
assoc: :comments
|
6
|
+
* [done] Use ActiveRelation merge instead of manually merging hashes and arrays
|
7
|
+
* [done] Switching between datepickers should be done via :filter_type, not via :helper_style.
|
8
|
+
Get rid of :helper_style and Wice::Defaults::HELPER_STYLE
|
9
|
+
* [done] Fix datepickers when used with Datetime columns
|
10
|
+
|
11
|
+
* Implement paging in the app, get rid of Kaminari
|
12
|
+
* better tests (https://github.com/leikind/wice_grid_testbed)
|
13
|
+
* review css class names in the generated markup
|
14
|
+
* More unified and flexible approach to datepickers
|
15
|
+
* try to guess :table_alias
|
16
|
+
* throw away saved queries?
|
@@ -1,22 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module WiceGrid #:nodoc:
|
2
3
|
module Generators #:nodoc:
|
3
|
-
|
4
4
|
class AddMigrationForSerializedQueriesGenerator < Rails::Generators::Base #:nodoc:
|
5
|
-
|
6
5
|
include Rails::Generators::Migration
|
7
6
|
|
8
7
|
desc 'Add a migration which creates a table for serialized queries'
|
9
8
|
|
10
9
|
source_root File.expand_path('../templates', __FILE__)
|
11
10
|
|
12
|
-
def self.next_migration_number(
|
13
|
-
Time.now.utc.strftime(
|
11
|
+
def self.next_migration_number(_path)
|
12
|
+
Time.now.utc.strftime('%Y%m%d%H%M%S')
|
14
13
|
end
|
15
14
|
|
16
15
|
def create_model_file
|
17
|
-
migration_template
|
16
|
+
migration_template 'create_wice_grid_serialized_queries.rb', 'db/migrate/create_wice_grid_serialized_queries.rb'
|
18
17
|
end
|
19
18
|
end
|
20
|
-
|
21
19
|
end
|
22
20
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module WiceGrid #:nodoc:
|
2
3
|
module Generators #:nodoc:
|
3
4
|
class InstallGenerator < Rails::Generators::Base #:nodoc:
|
4
|
-
|
5
|
-
desc 'Copy WiceGrid wice_grid_config.rb to config/initializers, ' +
|
5
|
+
desc 'Copy WiceGrid wice_grid_config.rb to config/initializers, ' \
|
6
6
|
'wice_grid.yml to config/locales/, and wice_grid.scss to assets/stylesheets'
|
7
7
|
|
8
8
|
source_root File.expand_path('../templates', __FILE__)
|
@@ -11,9 +11,6 @@ module WiceGrid #:nodoc:
|
|
11
11
|
template 'wice_grid_config.rb', 'config/initializers/wice_grid_config.rb'
|
12
12
|
|
13
13
|
copy_file 'wice_grid.yml', 'config/locales/wice_grid.yml'
|
14
|
-
|
15
|
-
copy_file 'wice_grid.scss', 'app/assets/stylesheets/wice_grid.scss'
|
16
|
-
|
17
14
|
end
|
18
15
|
end
|
19
16
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
if defined?(Wice::Defaults)
|
2
3
|
|
3
4
|
# Default number of rows to show per page.
|
@@ -33,7 +34,6 @@ if defined?(Wice::Defaults)
|
|
33
34
|
# Default CSV field separator
|
34
35
|
Wice::Defaults::CSV_FIELD_SEPARATOR = ','
|
35
36
|
|
36
|
-
|
37
37
|
# The strategy when to show the filter.
|
38
38
|
# * <tt>:when_filtered</tt> - when the table is the result of filtering
|
39
39
|
# * <tt>:always</tt> - show the filter always
|
@@ -43,29 +43,28 @@ if defined?(Wice::Defaults)
|
|
43
43
|
# A boolean value specifying if a change in a filter triggers reloading of the grid.
|
44
44
|
Wice::Defaults::AUTO_RELOAD = false
|
45
45
|
|
46
|
-
|
47
46
|
# SQL operator used for matching strings in string filters.
|
48
47
|
Wice::Defaults::STRING_MATCHING_OPERATOR = 'LIKE'
|
49
48
|
# STRING_MATCHING_OPERATOR = 'ILIKE' # Use this for Postgresql case-insensitive matching.
|
50
49
|
|
51
|
-
|
52
50
|
# Defining one string matching operator globally for the whole application turns is not enough
|
53
51
|
# when you connect to two databases one of which is MySQL and the other is Postgresql.
|
54
|
-
# If the key for an adapter is missing it will fall back to Wice::Defaults::STRING_MATCHING_OPERATOR
|
52
|
+
# If the key for an adapter is missing it will fall back to Wice::Defaults::STRING_MATCHING_OPERATOR.
|
53
|
+
#
|
54
|
+
# 'CI_LIKE' is a special value. Setting a value in STRING_MATCHING_OPERATORS to CI_LIKE will result in the following SQL:
|
55
|
+
#
|
56
|
+
# UPPER(table.field) LIKE UPPER(?)"
|
55
57
|
Wice::Defaults::STRING_MATCHING_OPERATORS = {
|
56
58
|
'ActiveRecord::ConnectionAdapters::MysqlAdapter' => 'LIKE',
|
57
59
|
'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter' => 'ILIKE'
|
58
60
|
}
|
59
61
|
|
60
|
-
|
61
|
-
|
62
62
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
63
63
|
# Advanced Filters #
|
64
64
|
|
65
65
|
# Switch of the negation checkbox in all text filters
|
66
66
|
Wice::Defaults::NEGATION_IN_STRING_FILTERS = false
|
67
67
|
|
68
|
-
|
69
68
|
# Each WiceGrid filter column is defined in two classes, one used for rendering the filter, the other
|
70
69
|
# for generating query conditions. All these columns are in lib/wice/columns/*.rb .
|
71
70
|
# File lib/wice/columns/column_processor_index.rb lists all predefined processors.
|
@@ -88,7 +87,6 @@ if defined?(Wice::Defaults)
|
|
88
87
|
# Wice::Columns::ViewColumn, the second should be a name of conditions generator class inherited from
|
89
88
|
# Wice::Columns::ConditionsGeneratorColumn .
|
90
89
|
|
91
|
-
|
92
90
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
93
91
|
# Showing All Records #
|
94
92
|
|
@@ -107,7 +105,6 @@ if defined?(Wice::Defaults)
|
|
107
105
|
# set to nil to skip the check
|
108
106
|
Wice::Defaults::SWITCH_BACK_TO_PAGINATION_FROM = nil
|
109
107
|
|
110
|
-
|
111
108
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
112
109
|
# Saving Queries #
|
113
110
|
|
@@ -115,40 +112,40 @@ if defined?(Wice::Defaults)
|
|
115
112
|
# QUERY_STORE_MODEL = 'WiceGridSerializedQuery'
|
116
113
|
Wice::Defaults::QUERY_STORE_MODEL = 'WiceGridSerializedQuery'
|
117
114
|
|
118
|
-
|
119
115
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
120
|
-
# Here go settings related to the
|
116
|
+
# Here go settings related to the date/datetime filters #
|
121
117
|
|
122
|
-
#
|
123
|
-
#
|
124
|
-
# * <tt>:
|
125
|
-
# * <tt>:
|
126
|
-
# * <tt>:
|
127
|
-
|
118
|
+
# Default column filters
|
119
|
+
# Possible values:
|
120
|
+
# * <tt>:jquery_datepicker</tt> - Jquery datepicker (works for datetime, too)
|
121
|
+
# * <tt>:bootstrap_datepicker</tt> - Bootstrap datepicker (works for datetime, too)
|
122
|
+
# * <tt>:rails_date_helper</tt> - standard Rails date helper
|
123
|
+
# * <tt>:rails_datetime_helper</tt> - standard Rails datetime helper
|
124
|
+
|
125
|
+
Wice::Defaults::DEFAULT_FILTER_FOR_DATE = :jquery_datepicker
|
126
|
+
Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME = :jquery_datepicker
|
128
127
|
|
129
128
|
# Format of the datetime displayed.
|
130
129
|
# If you change the format, make sure to check if +DATETIME_PARSER+ can still parse this string.
|
131
|
-
Wice::Defaults::DATETIME_FORMAT =
|
130
|
+
Wice::Defaults::DATETIME_FORMAT = '%Y-%m-%d %H:%M'
|
132
131
|
|
133
132
|
# Format of the date displayed.
|
134
133
|
# If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
|
135
|
-
Wice::Defaults::DATE_FORMAT =
|
134
|
+
Wice::Defaults::DATE_FORMAT = '%Y-%m-%d'
|
136
135
|
|
137
136
|
# Format of the date displayed in jQuery's Datepicker
|
138
137
|
# If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
|
139
|
-
Wice::Defaults::DATE_FORMAT_JQUERY =
|
140
|
-
|
138
|
+
Wice::Defaults::DATE_FORMAT_JQUERY = 'yy-mm-dd'
|
141
139
|
|
142
140
|
# Format of the date displayed in Bootstrap's Datepicker
|
143
141
|
# If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.
|
144
|
-
Wice::Defaults::DATE_FORMAT_BOOTSTRAP =
|
145
|
-
|
142
|
+
Wice::Defaults::DATE_FORMAT_BOOTSTRAP = 'yyyy-mm-dd'
|
146
143
|
|
147
144
|
# With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the
|
148
145
|
# format defined by +DATETIME_FORMAT+ and must generate a DateTime object.
|
149
146
|
# In many cases <tt>Time.zone.parse</tt> is enough, for instance, <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code
|
150
147
|
# and modify it if needed.
|
151
|
-
Wice::Defaults::DATETIME_PARSER = lambda
|
148
|
+
Wice::Defaults::DATETIME_PARSER = lambda do|datetime_string|
|
152
149
|
if datetime_string.blank?
|
153
150
|
nil
|
154
151
|
elsif Time.zone
|
@@ -156,19 +153,18 @@ if defined?(Wice::Defaults)
|
|
156
153
|
else
|
157
154
|
Time.parse(datetime_string)
|
158
155
|
end
|
159
|
-
|
156
|
+
end
|
160
157
|
|
161
158
|
# The range of years to display in jQuery Datepicker.
|
162
159
|
# It can always be changed dynamically with the following javascript:
|
163
160
|
# $( ".hasDatepicker" ).datepicker( "option", "yearRange", "2000:2042" );
|
164
161
|
Wice::Defaults::DATEPICKER_YEAR_RANGE = (from = Date.current.year - 10).to_s + ':' + (from + 15).to_s
|
165
162
|
|
166
|
-
|
167
163
|
# With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the
|
168
164
|
# format defined by +DATETIME+ and must generate a Date object.
|
169
165
|
# In many cases <tt>Date.parse</tt> is enough, for instance, <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code
|
170
166
|
# and modify it if needed.
|
171
|
-
Wice::Defaults::DATE_PARSER = lambda
|
167
|
+
Wice::Defaults::DATE_PARSER = lambda do|date_string|
|
172
168
|
if date_string.blank?
|
173
169
|
nil
|
174
170
|
else
|
@@ -178,14 +174,13 @@ if defined?(Wice::Defaults)
|
|
178
174
|
nil
|
179
175
|
end
|
180
176
|
end
|
181
|
-
|
182
|
-
|
183
|
-
# Icon to popup the calendar.
|
184
|
-
Wice::Defaults::CALENDAR_ICON = "/assets/icons/grid/calendar_view_month.png"
|
185
|
-
|
186
|
-
# popup calendar will be shown relative to the popup trigger element or to the mouse pointer
|
187
|
-
Wice::Defaults::POPUP_PLACEMENT_STRATEGY = :trigger # :pointer
|
177
|
+
end
|
188
178
|
|
189
179
|
# The name of the page method (should correspond to Kaminari.config.page_method_name)
|
190
180
|
Wice::Defaults::PAGE_METHOD_NAME = :page
|
181
|
+
|
182
|
+
# By default ActiveRecord calls are always executed inside Model.unscoped{}.
|
183
|
+
# Setting <tt>USE_DEFAULT_SCOPE</tt> to true will use the default scope for all queries.
|
184
|
+
Wice::Defaults::USE_DEFAULT_SCOPE = false
|
185
|
+
|
191
186
|
end
|
@@ -1,20 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Wice
|
2
|
-
|
3
3
|
# to be mixed in into ActiveRecord::ConnectionAdapters::Column
|
4
4
|
module WiceGridExtentionToActiveRecordColumn #:nodoc:
|
5
|
+
# reference to the ActiveRecord model class
|
5
6
|
attr_accessor :model
|
6
7
|
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
9
|
class ActiveRecordColumnWrapper #:nodoc:
|
11
10
|
def initialize(column, all_filter_params, main_table, table_alias, custom_filter_active, filter_type) #:nodoc:
|
12
11
|
@column = column
|
13
|
-
@filter_type = filter_type
|
14
|
-
@all_filter_params, @main_table, @table_alias, @custom_filter_active =
|
15
|
-
all_filter_params, main_table, table_alias, custom_filter_active
|
16
|
-
end
|
17
12
|
|
13
|
+
# nil | Symbol
|
14
|
+
@filter_type = filter_type
|
15
|
+
|
16
|
+
# Hash { String => String | Array[String]}
|
17
|
+
@all_filter_params = all_filter_params
|
18
|
+
|
19
|
+
# nil | Boolean
|
20
|
+
@main_table = main_table
|
21
|
+
|
22
|
+
# nil | String
|
23
|
+
@table_alias = table_alias
|
24
|
+
|
25
|
+
# nil | Array[String] | Array[Array[...]] | Array[Symbol]
|
26
|
+
@custom_filter_active = custom_filter_active
|
27
|
+
end
|
18
28
|
|
19
29
|
def wg_initialize_request_parameters #:nodoc:
|
20
30
|
@request_params = nil
|
@@ -31,6 +41,7 @@ module Wice
|
|
31
41
|
# a datetime (with custom_filter it can be anything else, and not
|
32
42
|
# the datetime hash {fr: ..., to: ...})
|
33
43
|
if @request_params
|
44
|
+
|
34
45
|
if (@column.type == :datetime || @column.type == :timestamp) && @request_params.is_a?(Hash)
|
35
46
|
[:fr, :to].each do |sym|
|
36
47
|
if @request_params[sym]
|
@@ -48,6 +59,7 @@ module Wice
|
|
48
59
|
# a date (with custom_filter it can be anything else, and not
|
49
60
|
# the date hash {fr: ..., to: ...})
|
50
61
|
if @column.type == :date && @request_params.is_a?(Hash)
|
62
|
+
|
51
63
|
[:fr, :to].each do |sym|
|
52
64
|
if @request_params[sym]
|
53
65
|
if @request_params[sym].is_a?(String)
|
@@ -57,10 +69,11 @@ module Wice
|
|
57
69
|
end
|
58
70
|
end
|
59
71
|
end
|
72
|
+
|
60
73
|
end
|
61
74
|
end
|
62
75
|
|
63
|
-
|
76
|
+
[wg_generate_conditions, current_parameter_name]
|
64
77
|
end
|
65
78
|
|
66
79
|
def wg_generate_conditions #:nodoc:
|
@@ -72,12 +85,23 @@ module Wice
|
|
72
85
|
return custom_processor.generate_conditions(@table_alias, @request_params)
|
73
86
|
end
|
74
87
|
|
75
|
-
column_type = @filter_type || @column.type.to_s
|
88
|
+
column_type = @filter_type || @column.type.to_s.intern
|
89
|
+
|
90
|
+
filter_type = case column_type
|
91
|
+
when :date
|
92
|
+
ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATE)
|
93
|
+
when :datetime
|
94
|
+
ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATETIME)
|
95
|
+
when :timestamp
|
96
|
+
ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATETIME)
|
97
|
+
else
|
98
|
+
column_type
|
99
|
+
end
|
76
100
|
|
77
|
-
processor_class = ::Wice::Columns.get_conditions_generator_column_processor(
|
101
|
+
processor_class = ::Wice::Columns.get_conditions_generator_column_processor(filter_type)
|
78
102
|
|
79
103
|
if processor_class
|
80
|
-
return processor_class.new(self).generate_conditions(@table_alias, @request_params)
|
104
|
+
return processor_class.new(self, column_type).generate_conditions(@table_alias, @request_params)
|
81
105
|
else
|
82
106
|
Wice.log("No processor for database type #{column_type}!!!")
|
83
107
|
nil
|
@@ -92,13 +116,8 @@ module Wice
|
|
92
116
|
@column.model
|
93
117
|
end
|
94
118
|
|
95
|
-
|
96
119
|
def alias_or_table_name(table_alias) #:nodoc:
|
97
120
|
table_alias || @column.model.table_name
|
98
121
|
end
|
99
|
-
|
100
|
-
|
101
122
|
end
|
102
|
-
|
103
|
-
|
104
|
-
end
|
123
|
+
end
|