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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.inch.yml +3 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +181 -0
  5. data/.travis.yml +22 -0
  6. data/{CHANGELOG → CHANGELOG.md} +95 -31
  7. data/Gemfile +4 -1
  8. data/README.md +1517 -0
  9. data/Rakefile +51 -7
  10. data/{SAVED_QUERIES_HOWTO.rdoc → SAVED_QUERIES_HOWTO.md} +34 -31
  11. data/TODO.md +16 -0
  12. data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +4 -6
  13. data/lib/generators/wice_grid/install_generator.rb +2 -5
  14. data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +1 -0
  15. data/lib/generators/wice_grid/templates/wice_grid_config.rb +29 -34
  16. data/lib/wice/active_record_column_wrapper.rb +36 -17
  17. data/lib/wice/columns.rb +53 -52
  18. data/lib/wice/columns/column_action.rb +11 -13
  19. data/lib/wice/columns/column_boolean.rb +9 -11
  20. data/lib/wice/columns/column_bootstrap_datepicker.rb +48 -0
  21. data/lib/wice/columns/column_custom_dropdown.rb +22 -23
  22. data/lib/wice/columns/column_float.rb +2 -6
  23. data/lib/wice/columns/column_html5_datepicker.rb +31 -0
  24. data/lib/wice/columns/column_integer.rb +9 -13
  25. data/lib/wice/columns/column_jquery_datepicker.rb +49 -0
  26. data/lib/wice/columns/column_processor_index.rb +18 -13
  27. data/lib/wice/columns/column_rails_date_helper.rb +41 -0
  28. data/lib/wice/columns/column_rails_datetime_helper.rb +40 -0
  29. data/lib/wice/columns/column_range.rb +7 -11
  30. data/lib/wice/columns/column_string.rb +24 -20
  31. data/lib/wice/columns/common_date_datetime_mixin.rb +20 -0
  32. data/lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb +39 -0
  33. data/lib/wice/columns/common_js_date_datetime_mixin.rb +15 -0
  34. data/lib/wice/columns/{column_date.rb → common_rails_date_datetime_conditions_generator_mixin.rb} +4 -22
  35. data/lib/wice/columns/common_standard_helper_date_datetime_mixin.rb +22 -0
  36. data/lib/wice/grid_output_buffer.rb +19 -10
  37. data/lib/wice/grid_renderer.rb +146 -85
  38. data/lib/wice/helpers/bs_calendar_helpers.rb +6 -7
  39. data/lib/wice/helpers/js_calendar_helpers.rb +19 -17
  40. data/lib/wice/helpers/wice_grid_misc_view_helpers.rb +18 -18
  41. data/lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb +44 -49
  42. data/lib/wice/helpers/wice_grid_view_helpers.rb +131 -134
  43. data/lib/wice/kaminari_monkey_patching.rb +3 -1
  44. data/lib/wice/table_column_matrix.rb +23 -8
  45. data/lib/wice/wice_grid_controller.rb +12 -16
  46. data/lib/wice/wice_grid_core_ext.rb +12 -20
  47. data/lib/wice/wice_grid_misc.rb +131 -53
  48. data/lib/wice/wice_grid_serialized_queries_controller.rb +10 -11
  49. data/lib/wice/wice_grid_serialized_query.rb +4 -3
  50. data/lib/wice/wice_grid_spreadsheet.rb +19 -18
  51. data/lib/wice_grid.rb +144 -135
  52. data/spec/schema.rb +9 -0
  53. data/spec/spec_helper.rb +75 -0
  54. data/spec/support/active_record.rb +11 -0
  55. data/spec/support/wice_grid_test_config.rb +172 -0
  56. data/spec/wice/grid_output_buffer_spec.rb +41 -0
  57. data/spec/wice/table_column_matrix_spec.rb +38 -0
  58. data/spec/wice/wice_grid_misc_spec.rb +159 -0
  59. data/spec/wice/wice_grid_spreadsheet_spec.rb +14 -0
  60. data/test/readme.txt +1 -1
  61. data/vendor/assets/javascripts/wice_grid_init.js.coffee +14 -8
  62. data/vendor/assets/stylesheets/wice_grid.scss +84 -0
  63. data/wice_grid.gemspec +32 -16
  64. metadata +217 -25
  65. data/README.rdoc +0 -1325
  66. data/lib/generators/wice_grid/templates/wice_grid.scss +0 -140
  67. data/lib/wice/columns/column_datetime.rb +0 -171
  68. data/vendor/assets/images/icons/grid/arrow_down.gif +0 -0
  69. data/vendor/assets/images/icons/grid/arrow_up.gif +0 -0
  70. data/vendor/assets/images/icons/grid/calendar_view_month.png +0 -0
  71. data/vendor/assets/images/icons/grid/collapse.gif +0 -0
  72. data/vendor/assets/images/icons/grid/delete.png +0 -0
  73. data/vendor/assets/images/icons/grid/expand.gif +0 -0
  74. data/vendor/assets/images/icons/grid/page_white_excel.png +0 -0
  75. data/vendor/assets/images/icons/grid/page_white_find.png +0 -0
  76. data/vendor/assets/images/icons/grid/table.png +0 -0
  77. data/vendor/assets/images/icons/grid/table_refresh.png +0 -0
  78. data/vendor/assets/images/icons/grid/tick_all.png +0 -0
  79. data/vendor/assets/images/icons/grid/untick_all.png +0 -0
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  module Wice
2
3
  class <<self
3
4
  # Used in routes.rb to define routes to the query processing controller.
@@ -10,18 +11,16 @@ module Wice
10
11
  controller = controller.to_s
11
12
 
12
13
  map.post '/wice_grid_serialized_queries/:grid_name',
13
- to: "#{controller}#create_saved_query",
14
- as: 'create_serialized_query'
14
+ to: "#{controller}#create_saved_query",
15
+ as: 'create_serialized_query'
15
16
 
16
17
  map.post '/wice_grid_serialized_queries/:grid_name/:id',
17
- to: "#{controller}#delete_saved_query",
18
- as: 'delete_serialized_query'
19
-
18
+ to: "#{controller}#delete_saved_query",
19
+ as: 'delete_serialized_query'
20
20
  end
21
21
  end
22
22
 
23
23
  module SerializedQueriesControllerMixin #:nodoc:
24
-
25
24
  def delete_saved_query #:nodoc:
26
25
  init
27
26
  if sq = @query_store_model.find_by_id_and_grid_name(params[:id], @grid_name)
@@ -59,19 +58,19 @@ module Wice
59
58
  @grid_title_id = "#{@grid_name}_title"
60
59
  @notification_messages = NlMessage['query_saved_message']
61
60
  else
62
- @error_messages = @saved_query.errors.map{ |_, msg| msg }.join(' ')
61
+ @error_messages = @saved_query.errors.map { |_, msg| msg }.join(' ')
63
62
  end
64
63
 
65
64
  render_asyns_result
66
65
  end
67
66
 
68
- def extra
67
+ def extra #:nodoc:
69
68
  params[:extra]
70
69
  end
71
70
 
72
71
  protected
73
72
 
74
- def render_asyns_result
73
+ def render_asyns_result #:nodoc:
75
74
  render json: {
76
75
  'error_messages' => @error_messages,
77
76
  'notification_messages' => @notification_messages,
@@ -80,9 +79,9 @@ module Wice
80
79
  end
81
80
 
82
81
  def init #:nodoc:
83
- @query_store_model = ::Wice::get_query_store_model
82
+ @query_store_model = ::Wice.get_query_store_model
84
83
  @confirm = params[:confirm] == '1' || params[:confirm] == 'true'
85
84
  @grid_name = params[:grid_name]
86
85
  end
87
86
  end
88
- end
87
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  class WiceGridSerializedQuery < ActiveRecord::Base #:nodoc:
2
3
  serialize :query
3
4
 
@@ -5,9 +6,9 @@ class WiceGridSerializedQuery < ActiveRecord::Base #:nodoc:
5
6
 
6
7
  validates_presence_of :name, message: 'Please submit the name of the custom query'
7
8
 
8
- def self.list(name, controller)
9
- conditions = {grid_name: name}
9
+ # returns a list of all serialized queries
10
+ def self.list(name, _controller)
11
+ conditions = { grid_name: name }
10
12
  self.where(conditions).to_a
11
13
  end
12
-
13
14
  end
@@ -1,18 +1,19 @@
1
- require 'csv'
2
-
3
- module Wice
4
- class Spreadsheet #:nodoc:
5
-
6
- attr_reader :tempfile
7
-
8
- def initialize(name, field_separator) #:nodoc:
9
- @tempfile = Tempfile.new(name)
10
- @csv = CSV.new(@tempfile, col_sep: field_separator)
11
- end
12
-
13
- def << (row) #:nodoc:
14
- @csv << row
15
- end
16
-
17
- end
18
- end
1
+ # encoding: utf-8
2
+ require 'csv'
3
+
4
+ module Wice
5
+ class Spreadsheet #:nodoc:
6
+
7
+ #:nodoc:
8
+ attr_reader :tempfile
9
+
10
+ def initialize(name, field_separator) #:nodoc:
11
+ @tempfile = Tempfile.new(name)
12
+ @csv = CSV.new(@tempfile, col_sep: field_separator)
13
+ end
14
+
15
+ def << (row) #:nodoc:
16
+ @csv << row
17
+ end
18
+ end
19
+ end
data/lib/wice_grid.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'wice/wice_grid_misc.rb'
2
3
  require 'wice/wice_grid_core_ext.rb'
3
4
  require 'wice/grid_renderer.rb'
@@ -15,50 +16,56 @@ require 'wice/wice_grid_spreadsheet.rb'
15
16
  require 'wice/wice_grid_serialized_queries_controller.rb'
16
17
  require 'wice/columns/column_processor_index.rb'
17
18
  require 'wice/columns.rb'
19
+ require 'wice/columns/common_date_datetime_mixin.rb'
20
+ require 'wice/columns/common_standard_helper_date_datetime_mixin.rb'
21
+ require 'wice/columns/common_js_date_datetime_mixin.rb'
22
+ require 'wice/columns/common_js_date_datetime_conditions_generator_mixin.rb'
23
+ require 'wice/columns/common_rails_date_datetime_conditions_generator_mixin.rb'
18
24
  require 'kaminari.rb'
19
25
 
20
-
21
26
  ActionController::Base.send(:helper_method, :wice_grid_custom_filter_params)
22
27
 
23
28
  module Wice
24
29
 
25
- class WiceGridEngine < ::Rails::Engine #:nodoc:
30
+ def self.on_action_view_load #:nodoc:
31
+ ::ActionView::Base.class_eval { include Wice::GridViewHelper }
32
+ [ActionView::Helpers::AssetTagHelper,
33
+ ActionView::Helpers::TagHelper,
34
+ ActionView::Helpers::JavaScriptHelper,
35
+ ActionView::Helpers::FormTagHelper].each do |m|
36
+ JsCalendarHelpers.send(:include, m)
37
+ end
26
38
 
27
- initializer "wice_grid_railtie.configure_rails_initialization" do |app|
39
+ Columns.load_column_processors
40
+ require 'wice/wice_grid_serialized_query.rb'
28
41
 
42
+ # It is here only because of this: https://github.com/amatsuda/kaminari/pull/267
43
+ require 'wice/kaminari_monkey_patching.rb'
44
+ end
45
+
46
+ class WiceGridEngine < ::Rails::Engine #:nodoc:
47
+ initializer 'wice_grid_railtie.configure_rails_initialization' do |_app|
29
48
  ActiveSupport.on_load :action_controller do
30
49
  ActionController::Base.send(:include, Wice::Controller)
31
50
  end
32
51
 
33
52
  ActiveSupport.on_load :active_record do
34
53
  ActiveRecord::ConnectionAdapters::Column.send(:include, ::Wice::WiceGridExtentionToActiveRecordColumn)
35
- ActiveRecord::Base.send(:include, ::Wice::MergeConditions)
36
54
  end
37
55
 
38
56
  ActiveSupport.on_load :action_view do
39
- ::ActionView::Base.class_eval { include Wice::GridViewHelper }
40
- [ActionView::Helpers::AssetTagHelper,
41
- ActionView::Helpers::TagHelper,
42
- ActionView::Helpers::JavaScriptHelper,
43
- ActionView::Helpers::FormTagHelper].each do |m|
44
- JsCalendarHelpers.send(:include, m)
45
- end
46
-
47
- Columns.load_column_processors
48
- require 'wice/wice_grid_serialized_query.rb'
49
-
50
- # It is here only until this pull request is pulled: https://github.com/amatsuda/kaminari/pull/267
51
- require 'wice/kaminari_monkey_patching.rb'
57
+ ::Wice.on_action_view_load
52
58
  end
53
59
  end
54
60
 
55
- initializer "wice_grid_railtie.configure_rails_assets_precompilation" do |app|
61
+ initializer 'wice_grid_railtie.configure_rails_assets_precompilation' do |app|
56
62
  app.config.assets.precompile << 'icons/grid/*'
57
63
  end
58
64
  end
59
65
 
60
- class WiceGrid
61
66
 
67
+ # Main class responsible for keeping the state of the grid, building an ActiveRelation, and running queries
68
+ class WiceGrid
62
69
  attr_reader :klass, :name, :resultset, :custom_order, :query_store_model #:nodoc:
63
70
  attr_reader :ar_options, :status, :export_to_csv_enabled, :csv_file_name, :csv_field_separator, :saved_query #:nodoc:
64
71
  attr_writer :renderer #:nodoc:
@@ -70,29 +77,29 @@ module Wice
70
77
  @controller = controller
71
78
 
72
79
  @relation = klass_or_relation
73
- @klass = @relation.kind_of?(Class) && @relation.ancestors.index(ActiveRecord::Base) ?
74
- klass_or_relation :
80
+ @klass = if @relation.is_a?(Class) && @relation.ancestors.index(ActiveRecord::Base)
81
+ klass_or_relation
82
+ else
75
83
  klass_or_relation.klass
84
+ end
76
85
 
77
- unless @klass.kind_of?(Class) && @klass.ancestors.index(ActiveRecord::Base)
78
- raise WiceGridArgumentError.new("ActiveRecord model class (second argument) must be a Class derived from ActiveRecord::Base")
86
+ unless @klass.is_a?(Class) && @klass.ancestors.index(ActiveRecord::Base)
87
+ fail WiceGridArgumentError.new('ActiveRecord model class (second argument) must be a Class derived from ActiveRecord::Base')
79
88
  end
80
89
 
81
90
  # validate :with_resultset & :with_paginated_resultset
82
91
  [:with_resultset, :with_paginated_resultset].each do |callback_symbol|
83
92
  unless [NilClass, Symbol, Proc].index(opts[callback_symbol].class)
84
- raise WiceGridArgumentError.new(":#{callback_symbol} must be either a Proc or Symbol object")
93
+ fail WiceGridArgumentError.new(":#{callback_symbol} must be either a Proc or Symbol object")
85
94
  end
86
95
  end
87
96
 
88
- opts[:order_direction].downcase! if opts[:order_direction].kind_of?(String)
97
+ opts[:order_direction].downcase! if opts[:order_direction].is_a?(String)
89
98
 
90
99
  # validate :order_direction
91
- if opts[:order_direction] && ! (opts[:order_direction] == 'asc' ||
92
- opts[:order_direction] == :asc ||
93
- opts[:order_direction] == 'desc' ||
100
+ if opts[:order_direction] && ! (opts[:order_direction] == 'asc' || opts[:order_direction] == :asc || opts[:order_direction] == 'desc' ||
94
101
  opts[:order_direction] == :desc)
95
- raise WiceGridArgumentError.new(":order_direction must be either 'asc' or 'desc'.")
102
+ fail WiceGridArgumentError.new(":order_direction must be either 'asc' or 'desc'.")
96
103
  end
97
104
 
98
105
  begin
@@ -100,26 +107,27 @@ module Wice
100
107
  @options = {
101
108
  conditions: nil,
102
109
  csv_file_name: nil,
103
- csv_field_separator: Defaults::CSV_FIELD_SEPARATOR,
110
+ csv_field_separator: ConfigurationProvider.value_for(:CSV_FIELD_SEPARATOR),
104
111
  custom_order: {},
105
- enable_export_to_csv: Defaults::ENABLE_EXPORT_TO_CSV,
112
+ enable_export_to_csv: ConfigurationProvider.value_for(:ENABLE_EXPORT_TO_CSV),
106
113
  group: nil,
107
114
  include: nil,
108
115
  joins: nil,
109
- name: Defaults::GRID_NAME,
116
+ name: ConfigurationProvider.value_for(:GRID_NAME),
110
117
  order: nil,
111
- order_direction: Defaults::ORDER_DIRECTION,
118
+ order_direction: ConfigurationProvider.value_for(:ORDER_DIRECTION),
112
119
  page: 1,
113
- page_method_name: Defaults::PAGE_METHOD_NAME,
114
- per_page: Defaults::PER_PAGE,
120
+ page_method_name: ConfigurationProvider.value_for(:PAGE_METHOD_NAME),
121
+ per_page: ConfigurationProvider.value_for(:PER_PAGE),
115
122
  saved_query: nil,
116
123
  total_entries: nil,
117
124
  with_paginated_resultset: nil,
118
- with_resultset: nil
125
+ with_resultset: nil,
126
+ use_default_scope: ConfigurationProvider.value_for(:USE_DEFAULT_SCOPE)
119
127
  }
120
128
  rescue NameError
121
- raise NameError.new('A constant is missing in wice_grid_config.rb: ' + $!.message +
122
- '. This can happen when you upgrade the WiceGrid to a newer version with a new configuration constant. ' +
129
+ raise NameError.new('A constant is missing in wice_grid_config.rb: ' + $ERROR_INFO.message +
130
+ '. This can happen when you upgrade the WiceGrid to a newer version with a new configuration constant. ' \
123
131
  'Add the constant manually or re-run `bundle exec rails g wice_grid:install`.')
124
132
  end
125
133
  # validate parameters
@@ -135,9 +143,9 @@ module Wice
135
143
  when Symbol
136
144
  @name = @name.to_s
137
145
  else
138
- raise WiceGridArgumentError.new("name of the grid should be a string or a symbol")
146
+ fail WiceGridArgumentError.new('name of the grid should be a string or a symbol')
139
147
  end
140
- raise WiceGridArgumentError.new("name of the grid can only contain alphanumeruc characters") unless @name =~ /^[a-zA-Z\d_]*$/
148
+ fail WiceGridArgumentError.new('name of the grid can only contain alphanumeruc characters') unless @name =~ /^[a-zA-Z\d_]*$/
141
149
 
142
150
  @table_column_matrix = TableColumnMatrix.new
143
151
  @table_column_matrix.default_model_class = @klass
@@ -162,7 +170,6 @@ module Wice
162
170
  process_params
163
171
 
164
172
  @ar_options_formed = false
165
-
166
173
  end
167
174
 
168
175
  # A block executed from within the plugin to process records of the current page.
@@ -212,18 +219,29 @@ module Wice
212
219
  end
213
220
  end
214
221
 
215
- def declare_column(column_name, model, custom_filter_active, table_alias, filter_type) #:nodoc:
222
+ # declare_column(String, ActiveRecord, CustomFilterSpec, nil | string, nil | Boolean)
223
+ def declare_column(
224
+ column_name: nil,
225
+ model: nil,
226
+ custom_filter_active: nil,
227
+ table_alias: nil,
228
+ filter_type: nil,
229
+ assocs: []) #:nodoc:
230
+
231
+
232
+ @options[:include] = Wice.build_includes(@options[:include], assocs)
233
+
216
234
  if model # this is an included table
217
235
  column = @table_column_matrix.get_column_by_model_class_and_column_name(model, column_name)
218
- raise WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{model.table_name}'!") if column.nil?
236
+ fail WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{model.table_name}'!") if column.nil?
219
237
  main_table = false
220
238
  table_name = model.table_name
221
239
  else
222
240
  column = @table_column_matrix.get_column_in_default_model_class_by_column_name(column_name)
223
241
  if column.nil?
224
- raise WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{@klass.table_name}'! " +
225
- "If '#{column_name}' belongs to another table you should declare it in :include or :join when initialising " +
226
- "the grid, and specify :model in column declaration.")
242
+ fail WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{@klass.table_name}'! " \
243
+ "If '#{column_name}' belongs to another table you should declare it in :include or :join when initialising " \
244
+ 'the grid, and specify :model in column declaration.')
227
245
  end
228
246
  main_table = true
229
247
  table_name = @table_column_matrix.default_model_class.table_name
@@ -238,14 +256,13 @@ module Wice
238
256
  end
239
257
 
240
258
  @table_column_matrix.add_condition(column, conditions)
241
- [column, table_name , main_table]
242
- else
243
- nil
259
+
260
+ # [ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::Column, String, Boolean]
261
+ [column, table_name, main_table]
244
262
  end
245
263
  end
246
264
 
247
265
  def form_ar_options(opts = {}) #:nodoc:
248
-
249
266
  return if @ar_options_formed
250
267
  @ar_options_formed = true unless opts[:forget_generated_options]
251
268
 
@@ -266,11 +283,17 @@ module Wice
266
283
  # @status.delete(:f)
267
284
  # end
268
285
 
269
- @ar_options[:conditions] = klass.send(:merge_conditions, @status[:conditions], * @table_column_matrix.conditions )
286
+ initial_conditions_active_relation = @klass.where(@status[:conditions])
287
+
288
+ @ar_options[:conditions] =
289
+ @table_column_matrix.conditions.reduce(initial_conditions_active_relation) do |active_relation_accu, cond|
290
+ conditions_active_relation = @klass.where(cond)
291
+ active_relation_accu.merge(conditions_active_relation)
292
+ end
270
293
 
271
294
  # conditions processed
272
295
 
273
- if (! opts[:skip_ordering]) && ! @status[:order].blank?
296
+ if (!opts[:skip_ordering]) && ! @status[:order].blank?
274
297
  @ar_options[:order] = add_custom_order_sql(complete_column_name(@status[:order]))
275
298
 
276
299
  @ar_options[:order] += ' ' + @status[:order_direction]
@@ -287,19 +310,15 @@ module Wice
287
310
  if (show_all_limit = Wice::ConfigurationProvider.value_for(:SHOW_ALL_ALLOWED_UP_TO, strict: false)) && all_record_mode?
288
311
  if do_count > show_all_limit # force-reset SHOW-ALL to pagination
289
312
  @status[:pp] = nil
290
- else
291
- # no resetting
292
313
  end
293
314
  end
294
315
 
295
316
  end
296
-
297
317
  end
298
318
 
299
-
300
- def add_references relation
319
+ def add_references(relation) #:nodoc:
301
320
  if @ar_options[:include] && relation.respond_to?(:references)
302
- refs = [@ar_options[:include]] unless @ar_options[:include].is_a?(Array)
321
+ # refs = [@ar_options[:include]] unless @ar_options[:include].is_a?(Array)
303
322
  relation = relation.references(* @ar_options[:include])
304
323
  end
305
324
  relation
@@ -308,27 +327,27 @@ module Wice
308
327
  # TO DO: what to do with other @ar_options values?
309
328
  def read #:nodoc:
310
329
  form_ar_options
311
- @klass.unscoped do
330
+ use_default_or_unscoped do
312
331
  @resultset = if self.output_csv? || all_record_mode?
313
- relation = @relation.
314
- includes(@ar_options[:include]).
315
- joins( @ar_options[:joins]).
316
- order( @ar_options[:order]).
317
- group( @ar_options[:group]).
318
- where( @ar_options[:conditions])
332
+ relation = @relation
333
+ .includes(@ar_options[:include])
334
+ .joins(@ar_options[:joins])
335
+ .order(@ar_options[:order])
336
+ .group(@ar_options[:group])
337
+ .merge(@ar_options[:conditions])
319
338
  relation = add_references relation
320
339
 
321
340
  relation
322
341
  else
323
342
  # p @ar_options
324
- relation = @relation.
325
- send( @options[:page_method_name], @ar_options[:page]).
326
- per( @ar_options[:per_page]).
327
- includes(@ar_options[:include]).
328
- joins( @ar_options[:joins]).
329
- order( @ar_options[:order]).
330
- group( @ar_options[:group]).
331
- where( @ar_options[:conditions])
343
+ relation = @relation
344
+ .send(@options[:page_method_name], @ar_options[:page])
345
+ .per(@ar_options[:per_page])
346
+ .includes(@ar_options[:include])
347
+ .joins(@ar_options[:joins])
348
+ .order(@ar_options[:order])
349
+ .group(@ar_options[:group])
350
+ .merge(@ar_options[:conditions])
332
351
 
333
352
  relation = add_references relation
334
353
 
@@ -338,7 +357,6 @@ module Wice
338
357
  invoke_resultset_callbacks
339
358
  end
340
359
 
341
-
342
360
  # core workflow methods END
343
361
 
344
362
  # Getters
@@ -366,7 +384,7 @@ module Wice
366
384
 
367
385
  def ordered_by?(column) #:nodoc:
368
386
  return nil if @status[:order].blank?
369
- if column.main_table && ! offs = @status[:order].index('.')
387
+ if column.main_table && ! @status[:order].index('.')
370
388
  @status[:order] == column.attribute
371
389
  else
372
390
  @status[:order] == column.table_alias_or_table_name + '.' + column.attribute
@@ -377,13 +395,12 @@ module Wice
377
395
  @status[:order]
378
396
  end
379
397
 
380
-
381
398
  def order_direction #:nodoc:
382
399
  @status[:order_direction]
383
400
  end
384
401
 
385
402
  def filtering_on? #:nodoc:
386
- not @status[:f].blank?
403
+ !@status[:f].blank?
387
404
  end
388
405
 
389
406
  def filtered_by #:nodoc:
@@ -391,7 +408,7 @@ module Wice
391
408
  end
392
409
 
393
410
  def filtered_by?(view_column) #:nodoc:
394
- @status[:f].nil? ? false : @status[:f].has_key?(view_column.attribute_name_fully_qualified_for_all_but_main_table_columns)
411
+ @status[:f].nil? ? false : @status[:f].key?(view_column.attribute_name_fully_qualified_for_all_but_main_table_columns)
395
412
  end
396
413
 
397
414
  def get_state_as_parameter_value_pairs(including_saved_query_request = false) #:nodoc:
@@ -410,13 +427,13 @@ module Wice
410
427
  end
411
428
 
412
429
  if including_saved_query_request && @saved_query
413
- res << ["#{name}[q]", @saved_query.id ]
430
+ res << ["#{name}[q]", @saved_query.id]
414
431
  end
415
432
 
416
- [:order, :order_direction].select{|parameter|
433
+ [:order, :order_direction].select do|parameter|
417
434
  status[parameter]
418
- }.collect do |parameter|
419
- res << ["#{name}[#{parameter}]", status[parameter] ]
435
+ end.collect do |parameter|
436
+ res << ["#{name}[#{parameter}]", status[parameter]]
420
437
  end
421
438
 
422
439
  res
@@ -427,13 +444,14 @@ module Wice
427
444
  do_count
428
445
  end
429
446
 
430
- def do_count
431
- @relation.count(
432
- conditions: @ar_options[:conditions],
433
- joins: @ar_options[:joins],
434
- include: @ar_options[:include],
435
- group: @ar_options[:group]
436
- )
447
+ def do_count #:nodoc:
448
+ @relation
449
+ .all
450
+ .merge(@ar_options[:conditions]).count(
451
+ joins: @ar_options[:joins],
452
+ include: @ar_options[:include],
453
+ group: @ar_options[:group]
454
+ )
437
455
  end
438
456
 
439
457
  alias_method :size, :count
@@ -444,12 +462,11 @@ module Wice
444
462
 
445
463
  # with this variant we get even those values which do not appear in the resultset
446
464
  def distinct_values_for_column(column) #:nodoc:
447
- res = column.model.select("distinct #{column.name}").order("#{column.name} asc").collect{|ar|
465
+ column.model.select("distinct #{column.name}").order("#{column.name} asc").collect do|ar|
448
466
  ar[column.name]
449
- }.reject{|e| e.blank?}.map{|i|[i,i]}
467
+ end.reject(&:blank?).map { |i| [i, i] }
450
468
  end
451
469
 
452
-
453
470
  def distinct_values_for_column_in_resultset(messages) #:nodoc:
454
471
  uniq_vals = Set.new
455
472
 
@@ -457,15 +474,15 @@ module Wice
457
474
  v = ar.deep_send(*messages)
458
475
  uniq_vals << v unless v.nil?
459
476
  end
460
- return uniq_vals.to_a.map{|i|
477
+ uniq_vals.to_a.map do|i|
461
478
  if i.is_a?(Array) && i.size == 2
462
479
  i
463
480
  elsif i.is_a?(Hash) && i.size == 1
464
481
  i.to_a.flatten
465
482
  else
466
- [i,i]
483
+ [i, i]
467
484
  end
468
- }.sort{|a,b| a[0]<=>b[0]}
485
+ end.sort { |a, b| a[0] <=> b[0] }
469
486
  end
470
487
 
471
488
  def output_csv? #:nodoc:
@@ -481,27 +498,23 @@ module Wice
481
498
  end
482
499
 
483
500
  def dump_status #:nodoc:
484
- " params: #{params[name].inspect}\n" +
485
- " status: #{@status.inspect}\n" +
486
- " ar_options #{@ar_options.inspect}\n"
501
+ " params: #{params[name].inspect}\n" + " status: #{@status.inspect}\n" \
502
+ " ar_options #{@ar_options.inspect}\n"
487
503
  end
488
504
 
489
-
490
505
  # Returns the list of objects browsable through all pages with the current filters.
491
506
  # Should only be called after the +grid+ helper.
492
507
  def all_pages_records
493
- raise WiceGridException.new("all_pages_records can only be called only after the grid view helper") unless self.view_helper_finished
508
+ fail WiceGridException.new('all_pages_records can only be called only after the grid view helper') unless self.view_helper_finished
494
509
  resultset_without_paging_with_user_filters
495
510
  end
496
511
 
497
512
  # Returns the list of objects displayed on current page. Should only be called after the +grid+ helper.
498
513
  def current_page_records
499
- raise WiceGridException.new("current_page_records can only be called only after the grid view helper") unless self.view_helper_finished
514
+ fail WiceGridException.new('current_page_records can only be called only after the grid view helper') unless self.view_helper_finished
500
515
  @resultset
501
516
  end
502
517
 
503
-
504
-
505
518
  protected
506
519
 
507
520
  def invoke_resultset_callback(callback, argument) #:nodoc:
@@ -518,22 +531,18 @@ module Wice
518
531
  invoke_resultset_callback(@options[:with_resultset], self.active_relation_for_resultset_without_paging_with_user_filters)
519
532
  end
520
533
 
521
-
522
-
523
534
  def add_custom_order_sql(fully_qualified_column_name) #:nodoc:
524
- custom_order = if @options[:custom_order].has_key?(fully_qualified_column_name)
535
+ custom_order = if @options[:custom_order].key?(fully_qualified_column_name)
525
536
  @options[:custom_order][fully_qualified_column_name]
526
537
  else
527
538
  if view_column = @renderer[fully_qualified_column_name]
528
539
  view_column.custom_order
529
- else
530
- nil
531
540
  end
532
541
  end
533
542
 
534
543
  if custom_order.blank?
535
544
  if ActiveRecord::ConnectionAdapters.const_defined?(:SQLite3Adapter) && ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters::SQLite3Adapter)
536
- fully_qualified_column_name.strip.split('.').map{|chunk| ActiveRecord::Base.connection.quote_table_name(chunk)}.join('.')
545
+ fully_qualified_column_name.strip.split('.').map { |chunk| ActiveRecord::Base.connection.quote_table_name(chunk) }.join('.')
537
546
  else
538
547
  ActiveRecord::Base.connection.quote_table_name(fully_qualified_column_name.strip)
539
548
  end
@@ -543,7 +552,7 @@ module Wice
543
552
  elsif custom_order.is_a? Proc
544
553
  custom_order.call(fully_qualified_column_name)
545
554
  else
546
- raise WiceGridArgumentError.new("invalid custom order #{custom_order.inspect}")
555
+ fail WiceGridArgumentError.new("invalid custom order #{custom_order.inspect}")
547
556
  end
548
557
  end
549
558
  end
@@ -564,14 +573,14 @@ module Wice
564
573
  params[name]
565
574
  end
566
575
 
567
-
568
576
  def resultset_without_paging_without_user_filters #:nodoc:
569
577
  form_ar_options
570
- @klass.unscoped do
571
- relation = @relation.joins(@ar_options[:joins]).
572
- includes(@ar_options[:include]).
573
- group(@ar_options[:group]).
574
- where(@options[:conditions])
578
+
579
+ use_default_or_unscoped do
580
+ relation = @relation.joins(@ar_options[:joins])
581
+ .includes(@ar_options[:include])
582
+ .group(@ar_options[:group])
583
+ .where(@options[:conditions])
575
584
 
576
585
  relation = add_references relation
577
586
 
@@ -593,35 +602,39 @@ module Wice
593
602
  # end
594
603
 
595
604
  def resultset_without_paging_with_user_filters #:nodoc:
596
- @klass.unscoped do
597
- active_relation_for_resultset_without_paging_with_user_filters.to_a
598
- end
605
+ active_relation_for_resultset_without_paging_with_user_filters.to_a
599
606
  end
600
607
 
601
608
  def active_relation_for_resultset_without_paging_with_user_filters #:nodoc:
602
609
  form_ar_options
603
610
  relation = nil
604
- @klass.unscoped do
605
- relation = @relation.
606
- where(@ar_options[:conditions]).
607
- joins(@ar_options[:joins]).
608
- includes(@ar_options[:include]).
609
- order(@ar_options[:order])
611
+
612
+ use_default_or_unscoped do
613
+ relation = @relation
614
+ .joins(@ar_options[:joins])
615
+ .includes(@ar_options[:include])
616
+ .order(@ar_options[:order])
617
+ .merge(@ar_options[:conditions])
610
618
 
611
619
  relation = add_references relation
612
620
  end
613
621
  relation
614
622
  end
615
623
 
616
-
617
-
618
624
  def load_query(query_id) #:nodoc:
619
- @query_store_model ||= Wice::get_query_store_model
625
+ @query_store_model ||= Wice.get_query_store_model
620
626
  query = @query_store_model.find_by_id_and_grid_name(query_id, self.name)
621
- Wice::log("Query with id #{query_id} for grid '#{self.name}' not found!!!") if query.nil?
627
+ Wice.log("Query with id #{query_id} for grid '#{self.name}' not found!!!") if query.nil?
622
628
  query
623
629
  end
624
630
 
631
+ def use_default_or_unscoped #:nodoc:
632
+ if @options[:use_default_scope]
633
+ yield
634
+ else
635
+ @klass.unscoped { yield }
636
+ end
637
+ end
625
638
 
626
639
  end
627
640
 
@@ -635,7 +648,7 @@ module Wice
635
648
  # create a Time instance out of parameters
636
649
  def params_2_datetime(par) #:nodoc:
637
650
  return nil if par.blank?
638
- params = [par[:year], par[:month], par[:day], par[:hour], par[:minute]].collect{|v| v.blank? ? nil : v.to_i}
651
+ params = [par[:year], par[:month], par[:day], par[:hour], par[:minute]].collect { |v| v.blank? ? nil : v.to_i }
639
652
  begin
640
653
  Time.local(*params)
641
654
  rescue ArgumentError, TypeError
@@ -646,17 +659,13 @@ module Wice
646
659
  # create a Date instance out of parameters
647
660
  def params_2_date(par) #:nodoc:
648
661
  return nil if par.blank?
649
- params = [par[:year], par[:month], par[:day]].collect{|v| v.blank? ? nil : v.to_i}
662
+ params = [par[:year], par[:month], par[:day]].collect { |v| v.blank? ? nil : v.to_i }
650
663
  begin
651
664
  Date.civil(*params)
652
665
  rescue ArgumentError, TypeError
653
666
  nil
654
667
  end
655
668
  end
656
-
657
669
  end
658
670
  end
659
-
660
-
661
-
662
671
  end