mongoid-data_table 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,6 +10,7 @@ module Mongoid
10
10
  attr_reader :klass,
11
11
  :controller,
12
12
  :cookies,
13
+ :raw_cookie,
13
14
  :cookie,
14
15
  :cookie_prefix,
15
16
  :options,
@@ -28,7 +29,7 @@ module Mongoid
28
29
  @options = klass.data_table_options.merge(options)
29
30
  @extension = block || options[:dataset] || klass.data_table_dataset || default_data_table_dataset
30
31
 
31
- @params = options[:params] || (controller.params.dup rescue {})
32
+ @params = (options[:params] || controller.params || {}).dup.symbolize_keys
32
33
  @criteria = options[:criteria] || klass.criteria
33
34
  @unscoped = options[:unscoped] || klass.unscoped
34
35
  @fields = options[:fields] || klass.data_table_fields
@@ -50,56 +51,102 @@ module Mongoid
50
51
  (@collection = nil).nil?
51
52
  end
52
53
 
53
- def load_cookie!(sInstance = nil)
54
+ def cookie(sInstance = nil)
55
+ @cookie ||= load_cookie!(sInstance)
56
+ end
57
+
58
+ def cookie!(sInstance = nil)
59
+ @cookie = nil
54
60
  sInstance ||= options[:sInstance]
55
- @cookie = @cookies[cookie_name(sInstance)]
61
+ @raw_cookie = cookies[cookie_name(sInstance)]
56
62
  begin
57
- @cookie = ::JSON.load(cookie) if cookie.is_a?(String)
58
- rescue
59
- @cookie = nil
60
- @cookies.delete cookie_name(sInstance)
61
- return self
63
+ @cookie = ::JSON.load(raw_cookie) if raw_cookie.kind_of?(String)
64
+ rescue JSON::ParserError
65
+ cookies.delete cookie_name(sInstance)
66
+ @cookie = {}
67
+ ensure
68
+ (@cookie ||= {}).symbolize_keys!
62
69
  end
63
- if cookie.present?
70
+ end
64
71
 
65
- state_params = HashWithIndifferentAccess.new.tap do |h|
72
+ def load_cookie!(sInstance = nil)
73
+ tap do
66
74
 
67
- h[:iDisplayStart] = cookie['iStart']
68
- h[:iDisplayLength] = cookie['iLength']
69
- h[:sSearch] = cookie['sFilter']
75
+ cookie!(sInstance)
70
76
 
71
- h[:iSortCol_0], h[:sSortDir_0] = (cookie['aaSorting'].first rescue [ nil, nil ])
77
+ if cookie.present? and cookie.kind_of?(Hash)
78
+ load_defaults!(cookie)
79
+ elsif (defaults = options[:defaults]).present? and defaults.kind_of?(Hash)
80
+ load_defaults!(defaults)
81
+ end
72
82
 
73
- begin
74
- (cookie['aaSearchCols'] || cookie['aoSearchCols']).each_with_index do |(value,regex),index|
75
- h[:"bRegex_#{index}"] = !regex
76
- h[:"sSearch_#{index}"] = value
77
- end
78
- rescue
79
- # do nothing
83
+ end
84
+ end
85
+
86
+ def load_defaults!(defaults = {})
87
+ tap do
88
+ state_params = Hash.new.tap do |hash|
89
+ hash[:iDisplayStart] = defaults[:iStart] if defaults.has_key?(:iStart)
90
+ hash[:iDisplayLength] = defaults[:iLength] if defaults.has_key?(:iLength)
91
+ hash[:sSearch] = defaults[:sFilter] if defaults.has_key?(:sFilter)
92
+
93
+ if defaults.has_key?(:aaSorting)
94
+ sorting = [*defaults[:aaSorting]].first
95
+
96
+ hash[:iSortCol_0] = [*sorting][0]
97
+ hash[:sSortDir_0] = [*sorting][1]
80
98
  end
81
99
 
100
+ if defaults.has_key?(:aoSearchCols)
101
+ [*defaults[:aoSearchCols]].each_with_index do |oSearch, index|
102
+ if oSearch.kind_of?(Hash)
103
+ oSearch.symbolize_keys!
104
+ hash[:"bRegex_#{index}"] = oSearch[:bRegex]
105
+ hash[:"sSearch_#{index}"] = URI.decode(oSearch[:sSearch])
106
+ else
107
+ hash[:"sSearch_#{index}"] = URI.decode(oSearch.to_s)
108
+ end
109
+ end
110
+ elsif defaults.has_key?(:aaSearchCols)
111
+ begin
112
+ [*defaults[:aaSearchCols]].each_with_index do |(value,regex),index|
113
+ hash[:"bRegex_#{index}"] = !regex
114
+ hash[:"sSearch_#{index}"] = URI.decode(value)
115
+ end
116
+ rescue
117
+ # do nothing
118
+ end
119
+ end
82
120
  end
83
121
 
84
122
  params.merge!(state_params)
85
123
 
86
124
  @collection = nil
87
-
88
125
  end
89
- return self
90
126
  end
91
127
 
92
128
  def search_fields
93
- return [] if cookie.blank?
94
- array = []
95
- begin
96
- (cookie['aaSearchCols'] || cookie['aoSearchCols']).each_with_index do |(value,regex),index|
97
- array.push(URI.decode(value.to_s))
129
+ return [] if cookie.blank? or not cookie.kind_of?(Hash)
130
+ [].tap do |array|
131
+
132
+ if cookie.has_key?(:aoSearchCols)
133
+ [*cookie[:aoSearchCols]].each_with_index do |oSearch, index|
134
+ if oSearch.kind_of?(Hash)
135
+ oSearch.symbolize_keys!
136
+ array.push(URI.decode(oSearch[:sSearch].to_s))
137
+ end
138
+ end
139
+ else
140
+ begin
141
+ [*cookie[:aaSearchCols]].each_with_index do |(value,regex),index|
142
+ array.push(URI.decode(value.to_s))
143
+ end
144
+ rescue
145
+ # do nothing
146
+ end
98
147
  end
99
- rescue
100
- # do nothing
148
+
101
149
  end
102
- return array
103
150
  end
104
151
 
105
152
  ## pagination options ##
@@ -144,18 +191,18 @@ module Mongoid
144
191
  protected
145
192
 
146
193
  def order_by_conditions
147
- order_params = params.dup.select { |k,v| k =~ /(i|s)Sort(Col|Dir)_\d+/ }
194
+ order_params = params.dup.select { |k,v| k.to_s =~ /(i|s)Sort(Col|Dir)_\d+/ }
148
195
  return options[:order_by] || [] if order_params.blank?
149
- order_params.select { |k,v| k =~ /iSortCol_\d+/ }.sort_by(&:first).map do |col,field|
150
- i = /iSortCol_(\d+)/.match(col)[1]
151
- [ fields[field.to_i], order_params["sSortDir_#{i}"] || :asc ]
196
+ order_params.select { |k,v| k.to_s =~ /iSortCol_\d+/ }.sort_by(&:first).map do |col,field|
197
+ i = /iSortCol_(\d+)/.match(col.to_s)[1]
198
+ [ fields[field.to_i], order_params[:"sSortDir_#{i}"] || :asc ]
152
199
  end
153
200
  end
154
201
 
155
202
  def filter_conditions
156
203
  return unless (query = params[:sSearch]).present?
157
204
 
158
- b_regex = Mongoid::Serialization.mongoize(params["bRegex"], Boolean)
205
+ b_regex = Mongoid::Serialization.mongoize(params[:bRegex], Boolean)
159
206
 
160
207
  {
161
208
  "$or" => klass.data_table_searchable_fields.map { |field|
@@ -165,15 +212,15 @@ module Mongoid
165
212
  end
166
213
 
167
214
  def filter_field_conditions
168
- params.dup.select { |k,v| k =~ /sSearch_\d+/ }.inject({}) do |h,(k,v)|
169
- i = /sSearch_(\d+)/.match(k)[1]
215
+ params.dup.select { |k,v| k.to_s =~ /sSearch_\d+/ }.inject({}) do |h,(k,v)|
216
+ i = /sSearch_(\d+)/.match(k.to_s)[1]
170
217
 
171
218
  field_name = fields[i.to_i]
172
219
  #field = klass.fields.dup[field_name]
173
220
  #field_type = field.respond_to?(:type) ? field.type : Object
174
221
 
175
- query = params["sSearch_#{i}"]
176
- b_regex = Mongoid::Serialization.mongoize(params["bRegex_#{i}"], Boolean)
222
+ query = params[:"sSearch_#{i}"]
223
+ b_regex = Mongoid::Serialization.mongoize(params[:"bRegex_#{i}"], Boolean)
177
224
 
178
225
  h[field_name] = (b_regex === true) ? data_table_regex(query) : query if query.present?
179
226
  h
@@ -215,7 +262,7 @@ module Mongoid
215
262
  def method_missing(method, *args, &block) #:nodoc:
216
263
  collection.send(method, *args, &block)
217
264
  end
218
- 1
265
+
219
266
  end
220
267
  end
221
268
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module DataTable
3
- VERSION = "1.3.2"
3
+ VERSION = "1.3.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-data_table
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-01-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &70327813848740 !ruby/object:Gem::Requirement
17
+ requirement: &70315738250380 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 3.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70327813848740
25
+ version_requirements: *70315738250380
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: kaminari
28
- requirement: &70327813847520 !ruby/object:Gem::Requirement
28
+ requirement: &70315738249020 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.13.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70327813847520
36
+ version_requirements: *70315738249020
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rake
39
- requirement: &70327813846940 !ruby/object:Gem::Requirement
39
+ requirement: &70315738260540 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70327813846940
47
+ version_requirements: *70315738260540
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: bson_ext
50
- requirement: &70327813845920 !ruby/object:Gem::Requirement
50
+ requirement: &70315738259860 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '1.3'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70327813845920
58
+ version_requirements: *70315738259860
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: mongoid
61
- requirement: &70327813844780 !ruby/object:Gem::Requirement
61
+ requirement: &70315738258900 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '2.1'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70327813844780
69
+ version_requirements: *70315738258900
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: mocha
72
- requirement: &70327813843500 !ruby/object:Gem::Requirement
72
+ requirement: &70315738256360 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 0.10.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70327813843500
80
+ version_requirements: *70315738256360
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rspec
83
- requirement: &70327813842980 !ruby/object:Gem::Requirement
83
+ requirement: &70315738253380 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '2.8'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70327813842980
91
+ version_requirements: *70315738253380
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: guard
94
- requirement: &70327813842320 !ruby/object:Gem::Requirement
94
+ requirement: &70315738268160 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0.10'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70327813842320
102
+ version_requirements: *70315738268160
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: guard-rspec
105
- requirement: &70327813857980 !ruby/object:Gem::Requirement
105
+ requirement: &70315738266640 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70327813857980
113
+ version_requirements: *70315738266640
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: guard-spork
116
- requirement: &70327813857120 !ruby/object:Gem::Requirement
116
+ requirement: &70315738264940 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *70327813857120
124
+ version_requirements: *70315738264940
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: spork
127
- requirement: &70327813855780 !ruby/object:Gem::Requirement
127
+ requirement: &70315738264080 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 0.9.0.rc
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *70327813855780
135
+ version_requirements: *70315738264080
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rb-fsevent
138
- requirement: &70327813854820 !ruby/object:Gem::Requirement
138
+ requirement: &70315738263400 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *70327813854820
146
+ version_requirements: *70315738263400
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: growl
149
- requirement: &70327813853180 !ruby/object:Gem::Requirement
149
+ requirement: &70315738262740 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *70327813853180
157
+ version_requirements: *70315738262740
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: libnotify
160
- requirement: &70327813852340 !ruby/object:Gem::Requirement
160
+ requirement: &70315738262220 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,7 +165,7 @@ dependencies:
165
165
  version: '0'
166
166
  type: :development
167
167
  prerelease: false
168
- version_requirements: *70327813852340
168
+ version_requirements: *70315738262220
169
169
  description: Simple data preparation from Mongoid to the jQuery DataTables plugin
170
170
  email:
171
171
  - jason.dew@gmail.com