wice_grid_mongoid 0.5.7 → 6.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/.gitignore +4 -1
  2. data/Gemfile +17 -0
  3. data/Gemfile.lock +140 -0
  4. data/README.rdoc +19 -3
  5. data/Rakefile +1 -3
  6. data/VERSION +1 -1
  7. data/lib/filter_conditions_generators.rb +126 -0
  8. data/{generators/wice_grid_assets_prototype/templates/stylesheets → lib/generators/wice_grid/templates}/calendarview.css +0 -0
  9. data/{generators/wice_grid_assets_prototype/templates/javascripts → lib/generators/wice_grid/templates}/calendarview.js +0 -0
  10. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/arrow_down.gif +0 -0
  11. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/arrow_up.gif +0 -0
  12. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/calendar_view_month.png +0 -0
  13. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/delete.png +0 -0
  14. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/expand.png +0 -0
  15. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/page_white_excel.png +0 -0
  16. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/page_white_find.png +0 -0
  17. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/table.png +0 -0
  18. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/table_refresh.png +0 -0
  19. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/tick_all.png +0 -0
  20. data/{generators/common_templates → lib/generators/wice_grid/templates}/icons/untick_all.png +0 -0
  21. data/{generators/common_templates/stylesheets → lib/generators/wice_grid/templates}/wice_grid.css +0 -0
  22. data/{generators/common_templates/locales → lib/generators/wice_grid/templates}/wice_grid.yml +0 -0
  23. data/{generators/common_templates/initializers → lib/generators/wice_grid/templates}/wice_grid_config.rb +0 -0
  24. data/{generators/wice_grid_assets_jquery/templates/javascripts → lib/generators/wice_grid/templates}/wice_grid_jquery.js +0 -0
  25. data/{generators/wice_grid_assets_prototype/templates/javascripts → lib/generators/wice_grid/templates}/wice_grid_prototype.js +0 -0
  26. data/lib/generators/wice_grid/wice_grid_assets_jquery_generator.rb +32 -0
  27. data/lib/generators/wice_grid/wice_grid_assets_prototype_generator.rb +34 -0
  28. data/lib/grid_renderer.rb +36 -20
  29. data/lib/helpers/js_calendar_helpers.rb +0 -5
  30. data/lib/helpers/wice_grid_view_helpers.rb +113 -133
  31. data/lib/mongoid_field.rb +50 -0
  32. data/{tasks → lib/tasks}/wice_grid_tasks.rake +0 -0
  33. data/lib/view_columns.rb +23 -29
  34. data/lib/wice_grid.rb +91 -379
  35. data/lib/wice_grid_misc.rb +3 -3
  36. data/mongoid_wice_grid.gemspec +122 -0
  37. data/test/blueprint.rb +17 -0
  38. data/test/public/javascripts/jquery-1.4.2.min.js +154 -0
  39. data/test/public/javascripts/wice_grid.js +163 -0
  40. data/test/rails_mongoid_test.rb +104 -0
  41. data/test/rails_test_app.rb +71 -0
  42. data/test/require_gems.rb +19 -0
  43. data/test/spec_helper.rb +22 -0
  44. data/test/wice_grid_initializer.rb +215 -0
  45. data/wice_grid_mongoid.gemspec +43 -30
  46. metadata +45 -34
  47. data/generators/wice_grid_assets_jquery/templates/USAGE +0 -6
  48. data/generators/wice_grid_assets_jquery/wice_grid_assets_jquery_generator.rb +0 -35
  49. data/generators/wice_grid_assets_prototype/USAGE +0 -8
  50. data/generators/wice_grid_assets_prototype/wice_grid_assets_prototype_generator.rb +0 -37
  51. data/init.rb +0 -1
  52. data/install.rb +0 -1
  53. data/lib/table_column_matrix.rb +0 -51
  54. data/uninstall.rb +0 -1
data/lib/wice_grid.rb CHANGED
@@ -1,9 +1,7 @@
1
1
  # encoding: UTF-8
2
- require 'will_paginate.rb'
3
2
  require 'wice_grid_misc.rb'
4
3
  require 'wice_grid_core_ext.rb'
5
4
  require 'grid_renderer.rb'
6
- require 'table_column_matrix.rb'
7
5
  require 'helpers/wice_grid_view_helpers.rb'
8
6
  require 'helpers/wice_grid_misc_view_helpers.rb'
9
7
  require 'helpers/wice_grid_serialized_queries_view_helpers.rb'
@@ -11,6 +9,7 @@ require 'helpers/wice_grid_view_helpers.rb'
11
9
  require 'helpers/js_calendar_helpers.rb'
12
10
  require 'grid_output_buffer.rb'
13
11
  require 'wice_grid_controller.rb'
12
+ require 'mongoid_field'
14
13
  require 'wice_grid_spreadsheet.rb'
15
14
  require 'wice_grid_serialized_queries_controller.rb'
16
15
  require 'js_adaptors/js_adaptor.rb'
@@ -18,15 +17,34 @@ require 'js_adaptors/jquery_adaptor.rb'
18
17
  require 'js_adaptors/prototype_adaptor.rb'
19
18
  require 'view_columns.rb'
20
19
 
21
- ActionView::Base.class_eval { include Wice::GridViewHelper }
22
- ActionController::Base.send(:include, Wice::Controller)
20
+
23
21
  ActionController::Base.send(:helper_method, :wice_grid_custom_filter_params)
24
22
 
25
23
  module Wice
26
24
 
25
+ class WiceGridRailtie < Rails::Railtie
26
+
27
+ initializer "wice_grid_railtie.configure_rails_initialization" do |app|
28
+ ActionController::Base.send(:include, Wice::Controller)
29
+ Mongoid::Field.send(:include, ::Wice::MongoidField)
30
+ ::ActionView::Base.class_eval { include Wice::GridViewHelper }
31
+
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
38
+ end
39
+
40
+ rake_tasks do
41
+ load 'tasks/wice_grid_tasks.rake'
42
+ end
43
+ end
44
+
27
45
  class WiceGrid
28
46
 
29
- attr_reader :klass, :name, :resultset, :custom_order, :query_store_model
47
+ attr_reader :klass, :name, :resultset, :custom_order, :query_store_model, :options, :controller
30
48
  attr_reader :ar_options, :status, :export_to_csv_enabled, :csv_file_name, :saved_query
31
49
  attr_writer :renderer
32
50
  attr_accessor :output_buffer, :view_helper_finished, :csv_tempfile
@@ -36,20 +54,9 @@ module Wice
36
54
  def initialize(klass, controller, opts = {}) #:nodoc:
37
55
  @controller = controller
38
56
 
39
- # check for will_paginate
40
- # raise WiceGridException.new("Plugin will_paginate not found! wice_grid requires will_paginate.")
41
- unless klass.respond_to?(:paginate)
42
- raise Wice::WiceGridException.new('will_paginate not found, WiceGrid cannot proceed. Please install gem mislav-will_paginate. ' +
43
- 'You might need to add github.com as the gem source before you install the gem: ' +
44
- 'gem sources -a http://gems.github.com')
57
+ unless klass.kind_of?(Class) && klass.ancestors.index(Mongoid::Document)
58
+ raise WiceGridArgumentError.new("The model class (second argument) must be a Class derived from Mongoid::Document")
45
59
  end
46
-
47
- unless klass.kind_of?(Class) && klass.ancestors.index(ActiveRecord::Base)
48
- raise WiceGridArgumentError.new("ActiveRecord model class (second argument) must be a Class derived from ActiveRecord::Base")
49
- end
50
-
51
- Wice.deprecated_call(:after, :with_resultset, opts)
52
-
53
60
  # validate :with_resultset & :with_paginated_resultset
54
61
  [:with_resultset, :with_paginated_resultset].each do |callback_symbol|
55
62
  unless [NilClass, Symbol, Proc].index(opts[callback_symbol].class)
@@ -79,7 +86,6 @@ module Wice
79
86
  :name => Defaults::GRID_NAME,
80
87
  :order => nil,
81
88
  :order_direction => Defaults::ORDER_DIRECTION,
82
- :page => 1,
83
89
  :per_page => Defaults::PER_PAGE,
84
90
  :saved_query => nil,
85
91
  :select => nil,
@@ -105,11 +111,8 @@ module Wice
105
111
  raise WiceGridArgumentError.new("name of the grid can only contain alphanumeruc characters") unless @name =~ /^[a-zA-Z\d_]*$/
106
112
 
107
113
  @klass = klass
108
-
109
- @table_column_matrix = TableColumnMatrix.new
110
- @table_column_matrix.default_model_class = @klass
111
-
112
- @ar_options = {}
114
+ @criteria = Mongoid::Criteria.new(@klass)
115
+ @has_any_filter_criteria = false
113
116
  @status = HashWithIndifferentAccess.new
114
117
 
115
118
  if @options[:order]
@@ -128,12 +131,16 @@ module Wice
128
131
 
129
132
  process_loading_query
130
133
  process_params
131
-
132
- @ar_options_formed = false
133
-
134
- @method_scoping = @klass.send(:scoped_methods)[-1]
134
+ @criteria_formed = false
135
135
  end
136
136
 
137
+ def has_any_filter_criteria?
138
+ @has_any_filter_criteria
139
+ end
140
+
141
+ def has_more_to_show?
142
+ @status[:per_page].to_i < resultset.count
143
+ end
137
144
  # A block executed from within the plugin to process records of the current page.
138
145
  # The argument to the callback is the array of the records. See the README for more details.
139
146
  def with_paginated_resultset(&callback)
@@ -181,40 +188,21 @@ module Wice
181
188
  end
182
189
  end
183
190
 
184
- def declare_column(column_name, model_class, custom_filter_active, table_alias) #:nodoc:
185
- if model_class # this is an included table
186
- column = @table_column_matrix.get_column_by_model_class_and_column_name(model_class, column_name)
187
- raise WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{model_class.table_name}'!") if column.nil?
188
- main_table = false
189
- table_name = model_class.table_name
190
- else
191
- column = @table_column_matrix.get_column_in_default_model_class_by_column_name(column_name)
192
- if column.nil?
193
- raise WiceGridArgumentError.new("Column '#{column_name}' is not found in table '#{@klass.table_name}'! " +
194
- "If '#{column_name}' belongs to another table you should declare it in :include or :join when initialising " +
195
- "the grid, and specify :model_class in column declaration.")
196
- end
197
- main_table = true
198
- table_name = @table_column_matrix.default_model_class.table_name
199
- end
191
+ def declare_column(field_name, custom_filter_active) #:nodoc:
192
+ field = @klass.fields[field_name]
193
+ raise WiceGridArgumentError.new("Model #{@klass.name} does not have field '#{field_name}'.! ") unless field
200
194
 
201
- if column
202
- conditions, current_parameter_name = column.wg_initialize_request_parameters(@status[:f], main_table, table_alias, custom_filter_active)
203
- if @status[:f] && conditions.blank?
204
- @status[:f].delete(current_parameter_name)
205
- end
195
+ criteria_added = field.wice_add_filter_criteria(@status[:f], @criteria, custom_filter_active)
196
+ @status[:f].delete(field_name) if @status[:f] && !criteria_added
206
197
 
207
- @table_column_matrix.add_condition(column, conditions)
208
- [column, table_name , main_table]
209
- else
210
- nil
211
- end
198
+ @has_any_filter_criteria ||= criteria_added
199
+ [field, nil , true]
212
200
  end
213
201
 
214
- def form_ar_options(opts = {}) #:nodoc:
202
+ def form_criteria(opts = {}) #:nodoc:
215
203
 
216
- return if @ar_options_formed
217
- @ar_options_formed = true unless opts[:forget_generated_options]
204
+ return if @criteria_formed
205
+ @criteria_formed = true unless opts[:forget_generated_options]
218
206
 
219
207
  # validate @status[:order_direction]
220
208
  @status[:order_direction] = case @status[:order_direction]
@@ -226,42 +214,38 @@ module Wice
226
214
  ''
227
215
  end
228
216
 
229
- # conditions
230
- if @table_column_matrix.generated_conditions.size == 0
231
- @status.delete(:f)
232
- end
233
-
234
- @ar_options[:conditions] = klass.send(:merge_conditions, @status[:conditions], * @table_column_matrix.conditions )
235
- # conditions processed
217
+ @status.delete(:f) if !@has_any_filter_criteria
236
218
 
237
- if (! opts[:skip_ordering]) && @status[:order]
238
- @ar_options[:order] = add_custom_order_sql(complete_column_name(@status[:order]))
239
-
240
- @ar_options[:order] += ' ' + @status[:order_direction]
219
+ if !opts[:skip_ordering] && @status[:order]
220
+ order_by = @status[:order].to_sym.send( @status[:order_direction].to_sym )
221
+ @criteria.order_by(order_by)
241
222
  end
242
223
 
243
- if self.output_html?
244
- @ar_options[:per_page] = if all_record_mode?
245
- # reset the :pp value in all records mode
246
- @status[:pp] = count_resultset_without_paging_without_user_filters
247
- else
248
- @status[:per_page]
249
- end
224
+ @criteria.limit(@status[:per_page].to_i)
225
+ # #fix-this, Criteria must respect options
226
+ # if self.output_html?
227
+ # @criteria[:per_page] = if all_record_mode?
228
+ # # reset the :pp value in all records mode
229
+ # @status[:pp] = count_resultset_without_paging_without_user_filters
230
+ # else
231
+ # @status[:per_page]
232
+ # end
250
233
 
251
- @ar_options[:page] = @status[:page]
252
- @ar_options[:total_entries] = @status[:total_entries] if @status[:total_entries]
253
- end
234
+ # @criteria[:page] = @status[:page]
235
+ # @criteria[:total_entries] = @status[:total_entries] if @status[:total_entries]
236
+ # end
254
237
 
255
- @ar_options[:joins] = @options[:joins]
256
- @ar_options[:include] = @options[:include]
257
- @ar_options[:group] = @options[:group]
258
- @ar_options[:select] = @options[:select]
238
+ # @criteria[:joins] = @options[:joins]
239
+ # @criteria[:include] = @options[:include]
240
+ # @criteria[:group] = @options[:group]
241
+ # @criteria[:select] = @options[:select]
259
242
  end
260
243
 
261
244
  def read #:nodoc:
262
- form_ar_options
245
+ form_criteria
263
246
  with_exclusive_scope do
264
- @resultset = self.output_csv? ? @klass.find(:all, @ar_options) : @klass.paginate(@ar_options)
247
+ @criteria.options[:limit] = nil if @resultset = self.output_csv?
248
+ @resultset = @criteria
265
249
  end
266
250
  invoke_resultset_callbacks
267
251
  end
@@ -272,12 +256,8 @@ module Wice
272
256
  # Getters
273
257
 
274
258
  def filter_params(view_column) #:nodoc:
275
- column_name = view_column.attribute_name_fully_qualified_for_all_but_main_table_columns
276
- if @status[:f] && @status[:f][column_name]
277
- @status[:f][column_name]
278
- else
279
- {}
280
- end
259
+ return (@status[:f][view_column.attribute_name] || {}) if @status[:f]
260
+ {}
281
261
  end
282
262
 
283
263
  def resultset #:nodoc:
@@ -294,11 +274,7 @@ module Wice
294
274
 
295
275
  def ordered_by?(column) #:nodoc:
296
276
  return nil if @status[:order].blank?
297
- if column.main_table && ! offs = @status[:order].index('.')
298
- @status[:order] == column.attribute_name
299
- else
300
- @status[:order] == column.table_alias_or_table_name + '.' + column.attribute_name
301
- end
277
+ @status[:order] == column.attribute_name
302
278
  end
303
279
 
304
280
  def ordered_by #:nodoc:
@@ -319,7 +295,7 @@ module Wice
319
295
  end
320
296
 
321
297
  def filtered_by?(view_column) #:nodoc:
322
- @status[:f].nil? ? false : @status[:f].has_key?(view_column.attribute_name_fully_qualified_for_all_but_main_table_columns)
298
+ @status[:f] && @status[:f].has_key?(view_column.attribute_name)
323
299
  end
324
300
 
325
301
  def get_state_as_parameter_value_pairs(including_saved_query_request = false) #:nodoc:
@@ -351,8 +327,8 @@ module Wice
351
327
  end
352
328
 
353
329
  def count #:nodoc:
354
- form_ar_options(:skip_ordering => true, :forget_generated_options => true)
355
- @klass.count(:conditions => @ar_options[:conditions], :joins => @ar_options[:joins], :include => @ar_options[:include], :group => @ar_options[:group])
330
+ form_criteria(:skip_ordering => true, :forget_generated_options => true)
331
+ @klass.count(:conditions => @criteria[:conditions], :joins => @criteria[:joins], :include => @criteria[:include], :group => @criteria[:group])
356
332
  end
357
333
 
358
334
  alias_method :size, :count
@@ -402,7 +378,7 @@ module Wice
402
378
  def dump_status #:nodoc:
403
379
  " params: #{params[name].inspect}\n" +
404
380
  " status: #{@status.inspect}\n" +
405
- " ar_options #{@ar_options.inspect}\n"
381
+ " ar_options #{@criteria.inspect}\n"
406
382
  end
407
383
 
408
384
 
@@ -443,45 +419,14 @@ module Wice
443
419
  end
444
420
 
445
421
  def with_exclusive_scope #:nodoc:
446
- if @method_scoping
447
- @klass.send(:with_exclusive_scope, @method_scoping) do
448
- yield
449
- end
450
- else
451
- yield
452
- end
453
- end
454
-
455
-
456
- def add_custom_order_sql(fully_qualified_column_name) #:nodoc:
457
- custom_order = if @options[:custom_order].has_key?(fully_qualified_column_name)
458
- @options[:custom_order][fully_qualified_column_name]
459
- else
460
- if view_column = @renderer[fully_qualified_column_name]
461
- view_column.custom_order
462
- else
463
- nil
464
- end
465
- end
466
-
467
- if custom_order.blank?
468
- ActiveRecord::Base.connection.quote_table_name(fully_qualified_column_name.strip)
469
- else
470
- if custom_order.is_a? String
471
- custom_order.gsub(/\?/, fully_qualified_column_name)
472
- elsif custom_order.is_a? Proc
473
- custom_order.call(fully_qualified_column_name)
474
- else
475
- raise WiceGridArgumentError.new("invalid custom order #{custom_order.inspect}")
476
- end
477
- end
422
+ yield
478
423
  end
479
424
 
480
425
  def complete_column_name(col_name) #:nodoc:
481
426
  if col_name.index('.') # already has a table name
482
427
  col_name
483
428
  else # add the default table
484
- "#{@klass.table_name}.#{col_name}"
429
+ "#{@klass.collection_name}.#{col_name}"
485
430
  end
486
431
  end
487
432
 
@@ -495,22 +440,22 @@ module Wice
495
440
 
496
441
 
497
442
  def resultset_without_paging_without_user_filters #:nodoc:
498
- form_ar_options
443
+ form_criteria
499
444
  with_exclusive_scope do
500
- @klass.find(:all, :joins => @ar_options[:joins],
501
- :include => @ar_options[:include],
502
- :group => @ar_options[:group],
445
+ @klass.find(:all, :joins => @criteria[:joins],
446
+ :include => @criteria[:include],
447
+ :group => @criteria[:group],
503
448
  :conditions => @options[:conditions])
504
449
  end
505
450
  end
506
451
 
507
452
  def count_resultset_without_paging_without_user_filters #:nodoc:
508
- form_ar_options
453
+ form_criteria
509
454
  with_exclusive_scope do
510
455
  @klass.count(
511
- :joins => @ar_options[:joins],
512
- :include => @ar_options[:include],
513
- :group => @ar_options[:group],
456
+ :joins => @criteria[:joins],
457
+ :include => @criteria[:include],
458
+ :group => @criteria[:group],
514
459
  :conditions => @options[:conditions]
515
460
  )
516
461
  end
@@ -518,13 +463,13 @@ module Wice
518
463
 
519
464
 
520
465
  def resultset_without_paging_with_user_filters #:nodoc:
521
- form_ar_options
466
+ form_criteria
522
467
  with_exclusive_scope do
523
- @klass.find(:all, :joins => @ar_options[:joins],
524
- :include => @ar_options[:include],
525
- :group => @ar_options[:group],
526
- :conditions => @ar_options[:conditions],
527
- :order => @ar_options[:order])
468
+ @klass.find(:all, :joins => @criteria[:joins],
469
+ :include => @criteria[:include],
470
+ :group => @criteria[:group],
471
+ :conditions => @criteria[:conditions],
472
+ :order => @criteria[:order])
528
473
  end
529
474
  end
530
475
 
@@ -571,239 +516,6 @@ module Wice
571
516
  end
572
517
  end
573
518
 
574
- # to be mixed in into ActiveRecord::ConnectionAdapters::Column
575
- module WiceGridExtentionToActiveRecordColumn #:nodoc:
576
-
577
- attr_accessor :model_klass
578
-
579
- def alias_or_table_name(table_alias)
580
- table_alias || self.model_klass.table_name
581
- end
582
-
583
- def wg_initialize_request_parameters(all_filter_params, main_table, table_alias, custom_filter_active) #:nodoc:
584
- @request_params = nil
585
- return if all_filter_params.nil?
586
-
587
- # if the parameter does not specify the table name we only allow columns in the default table to use these parameters
588
- if main_table && @request_params = all_filter_params[self.name]
589
- current_parameter_name = self.name
590
- elsif @request_params = all_filter_params[alias_or_table_name(table_alias) + '.' + self.name]
591
- current_parameter_name = alias_or_table_name(table_alias) + '.' + self.name
592
- end
593
-
594
- # Preprocess incoming parameters for datetime, if what's coming in is
595
- # a datetime (with custom_filter it can be anything else, and not
596
- # the datetime hash {:fr => ..., :to => ...})
597
- if @request_params
598
- if (self.type == :datetime || self.type == :timestamp) && @request_params.is_a?(Hash)
599
- [:fr, :to].each do |sym|
600
- if @request_params[sym]
601
- if @request_params[sym].is_a?(String)
602
- @request_params[sym] = Wice::Defaults::DATETIME_PARSER.call(@request_params[sym])
603
- elsif @request_params[sym].is_a?(Hash)
604
- @request_params[sym] = ::Wice::GridTools.params_2_datetime(@request_params[sym])
605
- end
606
- end
607
- end
608
-
609
- end
610
-
611
- # Preprocess incoming parameters for date, if what's coming in is
612
- # a date (with custom_filter it can be anything else, and not
613
- # the date hash {:fr => ..., :to => ...})
614
- if self.type == :date && @request_params.is_a?(Hash)
615
- [:fr, :to].each do |sym|
616
- if @request_params[sym]
617
- if @request_params[sym].is_a?(String)
618
- @request_params[sym] = Wice::Defaults::DATE_PARSER.call(@request_params[sym])
619
- elsif @request_params[sym].is_a?(Hash)
620
- @request_params[sym] = ::Wice::GridTools.params_2_date(@request_params[sym])
621
- end
622
- end
623
- end
624
- end
625
- end
626
-
627
- return wg_generate_conditions(table_alias, custom_filter_active), current_parameter_name
628
- end
629
-
630
- def wg_generate_conditions(table_alias, custom_filter_active) #:nodoc:
631
- return nil if @request_params.nil?
632
-
633
- if custom_filter_active
634
- return ::Wice::FilterConditionsGeneratorCustomFilter.new(self).generate_conditions(table_alias, @request_params)
635
- end
636
-
637
- column_type = self.type.to_s
638
-
639
- processor_class = ::Wice::FilterConditionsGenerator.handled_type[column_type]
640
-
641
- if processor_class
642
- return processor_class.new(self).generate_conditions(table_alias, @request_params)
643
- else
644
- Wice.log("No processor for database type #{column_type}!!!")
645
- nil
646
- end
647
- end
648
-
649
- end
650
-
651
- class FilterConditionsGenerator #:nodoc:
652
-
653
- cattr_accessor :handled_type
654
- @@handled_type = HashWithIndifferentAccess.new
655
-
656
- def initialize(column) #:nodoc:
657
- @column = column
658
- end
659
- end
660
-
661
- class FilterConditionsGeneratorCustomFilter < FilterConditionsGenerator #:nodoc:
662
-
663
- def generate_conditions(table_alias, opts) #:nodoc:
664
- if opts.empty?
665
- Wice.log "empty parameters for the grid custom filter"
666
- return false
667
- end
668
- opts = (opts.kind_of?(Array) && opts.size == 1) ? opts[0] : opts
669
-
670
- if opts.kind_of?(Array)
671
- opts_with_special_values, normal_opts = opts.partition{|v| ::Wice::GridTools.special_value(v)}
672
519
 
673
- conditions_ar = if normal_opts.size > 0
674
- [" #{@column.alias_or_table_name(table_alias)}.#{@column.name} IN ( " + (['?'] * normal_opts.size).join(', ') + ' )'] + normal_opts
675
- else
676
- []
677
- end
678
-
679
- if opts_with_special_values.size > 0
680
- special_conditions = opts_with_special_values.collect{|v| " #{@column.alias_or_table_name(table_alias)}.#{@column.name} is " + v}.join(' or ')
681
- if conditions_ar.size > 0
682
- conditions_ar[0] = " (#{conditions_ar[0]} or #{special_conditions} ) "
683
- else
684
- conditions_ar = " ( #{special_conditions} ) "
685
- end
686
- end
687
- conditions_ar
688
- else
689
- if ::Wice::GridTools.special_value(opts)
690
- " #{@column.alias_or_table_name(table_alias)}.#{@column.name} is " + opts
691
- else
692
- [" #{@column.alias_or_table_name(table_alias)}.#{@column.name} = ?", opts]
693
- end
694
- end
695
- end
696
-
697
- end
698
-
699
- class FilterConditionsGeneratorBoolean < FilterConditionsGenerator #:nodoc:
700
- @@handled_type[:boolean] = self
701
-
702
- def generate_conditions(table_alias, opts) #:nodoc:
703
- unless (opts.kind_of?(Array) && opts.size == 1)
704
- Wice.log "invalid parameters for the grid boolean filter - must be an one item array: #{opts.inspect}"
705
- return false
706
- end
707
- opts = opts[0]
708
- if opts == 'f'
709
- [" (#{@column.alias_or_table_name(table_alias)}.#{@column.name} = ? or #{@column.alias_or_table_name(table_alias)}.#{@column.name} is null) ", false]
710
- elsif opts == 't'
711
- [" #{@column.alias_or_table_name(table_alias)}.#{@column.name} = ?", true]
712
- else
713
- nil
714
- end
715
- end
716
- end
717
-
718
- class FilterConditionsGeneratorString < FilterConditionsGenerator #:nodoc:
719
- @@handled_type[:string] = self
720
- @@handled_type[:text] = self
721
-
722
- def generate_conditions(table_alias, opts) #:nodoc:
723
- if opts.kind_of? String
724
- string_fragment = opts
725
- negation = ''
726
- elsif (opts.kind_of? Hash) && opts.has_key?(:v)
727
- string_fragment = opts[:v]
728
- negation = opts[:n] == '1' ? 'NOT' : ''
729
- else
730
- Wice.log "invalid parameters for the grid string filter - must be a string: #{opts.inspect} or a Hash with keys :v and :n"
731
- return false
732
- end
733
- if string_fragment.empty?
734
- Wice.log "invalid parameters for the grid string filter - empty string"
735
- return false
736
- end
737
- [" #{negation} #{@column.alias_or_table_name(table_alias)}.#{@column.name} #{::Wice.get_string_matching_operators(@column.model_klass)} ?",
738
- '%' + string_fragment + '%']
739
- end
740
-
741
- end
742
-
743
- class FilterConditionsGeneratorInteger < FilterConditionsGenerator #:nodoc:
744
- @@handled_type[:integer] = self
745
- @@handled_type[:float] = self
746
- @@handled_type[:decimal] = self
747
-
748
- def generate_conditions(table_alias, opts) #:nodoc:
749
- unless opts.kind_of? Hash
750
- Wice.log "invalid parameters for the grid integer filter - must be a hash"
751
- return false
752
- end
753
- conditions = [[]]
754
- if opts[:fr]
755
- if opts[:fr] =~ /\d/
756
- conditions[0] << " #{@column.alias_or_table_name(table_alias)}.#{@column.name} >= ? "
757
- conditions << opts[:fr]
758
- else
759
- opts.delete(:fr)
760
- end
761
- end
762
-
763
- if opts[:to]
764
- if opts[:to] =~ /\d/
765
- conditions[0] << " #{@column.alias_or_table_name(table_alias)}.#{@column.name} <= ? "
766
- conditions << opts[:to]
767
- else
768
- opts.delete(:to)
769
- end
770
- end
771
-
772
- if conditions.size == 1
773
- Wice.log "invalid parameters for the grid integer filter - either range limits are not supplied or they are not numeric"
774
- return false
775
- end
776
-
777
- conditions[0] = conditions[0].join(' and ')
778
-
779
- return conditions
780
- end
781
- end
782
-
783
- class FilterConditionsGeneratorDate < FilterConditionsGenerator #:nodoc:
784
- @@handled_type[:date] = self
785
- @@handled_type[:datetime] = self
786
- @@handled_type[:timestamp] = self
787
-
788
- def generate_conditions(table_alias, opts) #:nodoc:
789
- conditions = [[]]
790
- if opts[:fr]
791
- conditions[0] << " #{@column.alias_or_table_name(table_alias)}.#{@column.name} >= ? "
792
- conditions << opts[:fr]
793
- end
794
-
795
- if opts[:to]
796
- conditions[0] << " #{@column.alias_or_table_name(table_alias)}.#{@column.name} <= ? "
797
- conditions << opts[:to]
798
- end
799
-
800
- return false if conditions.size == 1
801
-
802
- conditions[0] = conditions[0].join(' and ')
803
- return conditions
804
- end
805
- end
806
520
 
807
521
  end
808
-
809
- ActiveRecord::ConnectionAdapters::Column.send(:include, ::Wice::WiceGridExtentionToActiveRecordColumn)
@@ -29,7 +29,7 @@ module Wice
29
29
 
30
30
  def get_string_matching_operators(model) #:nodoc:
31
31
  if defined?(Wice::Defaults::STRING_MATCHING_OPERATORS) && Wice::Defaults::STRING_MATCHING_OPERATORS.is_a?(Hash) &&
32
- str_matching_operator = Wice::Defaults::STRING_MATCHING_OPERATORS[model.connection.class.to_s]
32
+ str_matching_operator =(Wice::Defaults::STRING_MATCHING_OPERATORS[model.connection.class.to_s] rescue nil)
33
33
  str_matching_operator
34
34
  else
35
35
  Wice::Defaults::STRING_MATCHING_OPERATOR
@@ -45,7 +45,7 @@ module Wice
45
45
  end
46
46
 
47
47
  def log(message) #:nodoc:
48
- ActiveRecord::Base.logger.info('WiceGrid: ' + message)
48
+ ActionController::Base.logger.info('WiceGrid: ' + message)
49
49
  end
50
50
  end
51
51
 
@@ -96,4 +96,4 @@ module Wice
96
96
  class WiceGridException < Exception #:nodoc:
97
97
  include ExceptionsMixin
98
98
  end
99
- end
99
+ end