wice_grid 3.5.0 → 3.6.0.pre1
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.
- 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
|