datagrid 1.6.3 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -1
- data/Readme.markdown +11 -11
- data/app/views/datagrid/_enum_checkboxes.html.erb +2 -2
- data/app/views/datagrid/_form.html.erb +2 -3
- data/app/views/datagrid/_order_for.html.erb +2 -2
- data/app/views/datagrid/_range_filter.html.erb +3 -3
- data/datagrid.gemspec +10 -14
- data/lib/datagrid/active_model.rb +25 -29
- data/lib/datagrid/column_names_attribute.rb +11 -9
- data/lib/datagrid/columns/column.rb +10 -8
- data/lib/datagrid/columns.rb +142 -176
- data/lib/datagrid/configuration.rb +6 -1
- data/lib/datagrid/core.rb +63 -30
- data/lib/datagrid/drivers/abstract_driver.rb +2 -1
- data/lib/datagrid/drivers/active_record.rb +4 -3
- data/lib/datagrid/drivers/array.rb +2 -1
- data/lib/datagrid/drivers/mongo_mapper.rb +2 -1
- data/lib/datagrid/drivers/mongoid.rb +3 -2
- data/lib/datagrid/drivers/sequel.rb +8 -3
- data/lib/datagrid/drivers.rb +2 -1
- data/lib/datagrid/engine.rb +3 -2
- data/lib/datagrid/filters/base_filter.rb +8 -4
- data/lib/datagrid/filters/boolean_filter.rb +2 -1
- data/lib/datagrid/filters/composite_filters.rb +8 -12
- data/lib/datagrid/filters/dynamic_filter.rb +1 -1
- data/lib/datagrid/filters/extended_boolean_filter.rb +2 -1
- data/lib/datagrid/filters/select_options.rb +34 -1
- data/lib/datagrid/filters.rb +52 -30
- data/lib/datagrid/form_builder.rb +53 -35
- data/lib/datagrid/helper.rb +43 -61
- data/lib/datagrid/locale/en.yml +5 -1
- data/lib/datagrid/ordering.rb +15 -15
- data/lib/datagrid/renderer.rb +71 -15
- data/lib/datagrid/rspec.rb +4 -4
- data/lib/datagrid/scaffold.rb +1 -1
- data/lib/datagrid/utils.rb +1 -0
- data/lib/datagrid/version.rb +1 -1
- data/lib/datagrid.rb +2 -1
- data/templates/grid.rb.erb +1 -1
- data/templates/index.html.erb +1 -1
- metadata +8 -9
- data/lib/datagrid/filters/boolean_enum_filter.rb +0 -17
data/lib/datagrid/columns.rb
CHANGED
@@ -6,143 +6,114 @@ module Datagrid
|
|
6
6
|
module Columns
|
7
7
|
require "datagrid/columns/column"
|
8
8
|
|
9
|
+
# @!method default_column_options=
|
10
|
+
# @param value [Hash] default options passed to #column method call
|
11
|
+
# @return [Hash] default options passed to #column method call
|
12
|
+
# @example
|
13
|
+
# # Disable default order
|
14
|
+
# self.default_column_options = { order: false }
|
15
|
+
# # Makes entire report HTML
|
16
|
+
# self.default_column_options = { html: true }
|
17
|
+
|
18
|
+
# @!method default_column_options
|
19
|
+
# @return [Hash]
|
20
|
+
# @see #default_column_options=
|
21
|
+
|
22
|
+
# @!method batch_size=
|
23
|
+
# @param value [Integer] Specify a default batch size when generating CSV or just data. Default: 1000
|
24
|
+
# @return [Integer] Specify a default batch size when generating CSV or just data.
|
25
|
+
# @example
|
26
|
+
# self.batch_size = 500
|
27
|
+
# # Disable batches
|
28
|
+
# self.batch_size = nil
|
29
|
+
#
|
30
|
+
|
31
|
+
# @!method batch_size
|
32
|
+
# @return [Integer]
|
33
|
+
# @see #batch_size=
|
34
|
+
|
35
|
+
# @visibility private
|
9
36
|
def self.included(base)
|
10
37
|
base.extend ClassMethods
|
11
38
|
base.class_eval do
|
12
|
-
|
13
39
|
include Datagrid::Core
|
14
40
|
|
15
|
-
class_attribute :default_column_options, :
|
16
|
-
|
17
|
-
|
18
|
-
class_attribute :
|
19
|
-
self.batch_size = 1000
|
20
|
-
|
21
|
-
class_attribute :columns_array
|
22
|
-
self.columns_array = []
|
23
|
-
|
24
|
-
class_attribute :cached
|
25
|
-
self.cached = false
|
26
|
-
|
27
|
-
|
41
|
+
class_attribute :default_column_options, instance_writer: false, default: {}
|
42
|
+
class_attribute :batch_size, default: 1000
|
43
|
+
class_attribute :columns_array, default: []
|
44
|
+
class_attribute :cached, default: false
|
28
45
|
class_attribute :decorator, instance_writer: false
|
29
|
-
|
30
46
|
end
|
31
|
-
base.
|
32
|
-
end
|
47
|
+
base.include InstanceMethods
|
48
|
+
end
|
33
49
|
|
34
50
|
module ClassMethods
|
35
51
|
|
36
|
-
|
37
|
-
# :
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
# Specify a default batch size when generating CSV or just data
|
42
|
-
# Default: 1000
|
43
|
-
#
|
44
|
-
# self.batch_size = 500
|
45
|
-
# # Disable batches
|
46
|
-
# self.batch_size = nil
|
47
|
-
#
|
48
|
-
|
49
|
-
##
|
50
|
-
# :method: batch_size
|
51
|
-
#
|
52
|
-
# :call-seq: batch_size
|
53
|
-
#
|
54
|
-
# Returns specified batch_size configuration variable
|
55
|
-
# See <tt>batch_size=</tt> for more information
|
56
|
-
#
|
57
|
-
|
58
|
-
##
|
59
|
-
# :method: default_column_options=
|
60
|
-
#
|
61
|
-
# :call-seq: default_column_options=(options)
|
62
|
-
#
|
63
|
-
# Specifies default options for `column` method.
|
64
|
-
# They still can be overwritten at column level.
|
65
|
-
#
|
66
|
-
# # Disable default order
|
67
|
-
# self.default_column_options = { :order => false }
|
68
|
-
# # Makes entire report HTML
|
69
|
-
# self.default_column_options = { :html => true }
|
70
|
-
#
|
71
|
-
|
72
|
-
##
|
73
|
-
# :method: default_column_options
|
74
|
-
#
|
75
|
-
# :call-seq: default_column_options
|
76
|
-
#
|
77
|
-
# Returns specified default column options hash
|
78
|
-
# See <tt>default_column_options=</tt> for more information
|
79
|
-
#
|
80
|
-
|
81
|
-
# Returns a list of columns defined.
|
82
|
-
# All column definistion are returned by default
|
83
|
-
# You can limit the output with only columns you need like:
|
84
|
-
#
|
52
|
+
# @param data [Boolean] if true returns only columns with data representation. Default: false.
|
53
|
+
# @param html [Boolean] if true returns only columns with html columns. Default: false.
|
54
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
55
|
+
# @return [Array<Datagrid::Columns::Column>] column definition objects
|
56
|
+
# @example
|
85
57
|
# GridClass.columns(:id, :name)
|
86
|
-
|
87
|
-
|
88
|
-
#
|
89
|
-
# * :data - if true returns only columns with data representation. Default: false.
|
90
|
-
# * :html - if true returns only columns with html columns. Default: false.
|
91
|
-
def columns(*args, data: false, html: false)
|
92
|
-
filter_columns(columns_array, *args, data: data, html: html)
|
58
|
+
def columns(*column_names, data: false, html: false)
|
59
|
+
filter_columns(columns_array, *column_names, data: data, html: html)
|
93
60
|
end
|
94
61
|
|
95
62
|
# Defines new datagrid column
|
96
63
|
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
# * <tt>block</tt> - proc to calculate a column value
|
64
|
+
# @param name [Symbol] column name
|
65
|
+
# @param query [String, nil] a string representing the query to select this column (supports only ActiveRecord)
|
66
|
+
# @param options [Hash<Symbol, Object>] hash of options
|
67
|
+
# @param block [Block] proc to calculate a column value
|
68
|
+
# @return [Datagrid::Columns::Column]
|
103
69
|
#
|
104
70
|
# Available options:
|
105
71
|
#
|
106
|
-
# * <tt
|
107
|
-
# * <tt
|
72
|
+
# * <tt>html</tt> - determines if current column should be present in html table and how is it formatted
|
73
|
+
# * <tt>order</tt> - determines if this column could be sortable and how.
|
108
74
|
# The value of order is explicitly passed to ORM ordering method.
|
109
75
|
# Ex: <tt>"created_at, id"</tt> for ActiveRecord, <tt>[:created_at, :id]</tt> for Mongoid
|
110
|
-
# * <tt
|
76
|
+
# * <tt>order_desc</tt> - determines a descending order for given column
|
111
77
|
# (only in case when <tt>:order</tt> can not be easily reversed by ORM)
|
112
|
-
# * <tt
|
78
|
+
# * <tt>order_by_value</tt> - used in case it is easier to perform ordering at ruby level not on database level.
|
113
79
|
# Warning: using ruby to order large datasets is very unrecommended.
|
114
80
|
# If set to true - datagrid will use column value to order by this column
|
115
81
|
# If block is given - datagrid will use value returned from block
|
116
|
-
# * <tt
|
117
|
-
# * <tt
|
118
|
-
# * <tt
|
119
|
-
# * <tt
|
120
|
-
# * <tt
|
121
|
-
# * <tt
|
122
|
-
# * <tt
|
123
|
-
#
|
124
|
-
#
|
82
|
+
# * <tt>mandatory</tt> - if true, column will never be hidden with #column_names selection
|
83
|
+
# * <tt>url</tt> - a proc with one argument, pass this option to easily convert the value into an URL
|
84
|
+
# * <tt>before</tt> - determines the position of this column, by adding it before the column passed here
|
85
|
+
# * <tt>after</tt> - determines the position of this column, by adding it after the column passed here
|
86
|
+
# * <tt>if</tt> - the column is shown if the reult of calling this argument is true
|
87
|
+
# * <tt>unless</tt> - the column is shown unless the reult of calling this argument is true
|
88
|
+
# * <tt>preload</tt> - spefies which associations of the scope should be preloaded for this column
|
89
|
+
#
|
90
|
+
# @see https://github.com/bogdan/datagrid/wiki/Columns
|
125
91
|
def column(name, query = nil, **options, &block)
|
126
92
|
define_column(columns_array, name, query, **options, &block)
|
127
93
|
end
|
128
94
|
|
129
95
|
# Returns column definition with given name
|
96
|
+
# @return [Datagrid::Columns::Column, nil]
|
130
97
|
def column_by_name(name)
|
131
98
|
find_column_by_name(columns_array, name)
|
132
99
|
end
|
133
100
|
|
134
101
|
# Returns an array of all defined column names
|
102
|
+
# @return [Array<Datagrid::Columns::Column>]
|
135
103
|
def column_names
|
136
104
|
columns.map(&:name)
|
137
105
|
end
|
138
106
|
|
139
|
-
|
107
|
+
# @!visibility private
|
108
|
+
def respond_to(&block)
|
140
109
|
Datagrid::Columns::Column::ResponseFormat.new(&block)
|
141
110
|
end
|
142
111
|
|
143
112
|
# Formats column value for HTML.
|
144
113
|
# Helps to distinguish formatting as plain data and HTML
|
145
|
-
#
|
114
|
+
# @param value [Object] Value to be formatted
|
115
|
+
# @return [Datagrid::Columns::Column::ResponseFormat] Format object
|
116
|
+
# @example
|
146
117
|
# column(:name) do |model|
|
147
118
|
# format(model.name) do |value|
|
148
119
|
# content_tag(:strong, value)
|
@@ -165,7 +136,8 @@ module Datagrid
|
|
165
136
|
|
166
137
|
# Defines a model decorator that will be used to define a column value.
|
167
138
|
# All column blocks will be given a decorated version of the model.
|
168
|
-
#
|
139
|
+
# @return [void]
|
140
|
+
# @example
|
169
141
|
# decorate { |user| UserPresenter.new(user) }
|
170
142
|
#
|
171
143
|
# decorate { UserPresenter } # a shortcut
|
@@ -180,12 +152,14 @@ module Datagrid
|
|
180
152
|
block_given? ? yield(presenter) : presenter
|
181
153
|
end
|
182
154
|
|
183
|
-
|
155
|
+
# @!visibility private
|
156
|
+
def inherited(child_class)
|
184
157
|
super(child_class)
|
185
158
|
child_class.columns_array = self.columns_array.clone
|
186
159
|
end
|
187
160
|
|
188
|
-
|
161
|
+
# @!visibility private
|
162
|
+
def filter_columns(columns_array, *names, data: false, html: false)
|
189
163
|
names.compact!
|
190
164
|
names.map!(&:to_sym)
|
191
165
|
columns_array.select do |column|
|
@@ -195,7 +169,8 @@ module Datagrid
|
|
195
169
|
end
|
196
170
|
end
|
197
171
|
|
198
|
-
|
172
|
+
# @!visibility private
|
173
|
+
def define_column(columns, name, query = nil, **options, &block)
|
199
174
|
check_scope_defined!("Scope should be defined before columns")
|
200
175
|
block ||= lambda do |model|
|
201
176
|
model.send(name)
|
@@ -205,19 +180,22 @@ module Datagrid
|
|
205
180
|
self, name, query, default_column_options.merge(options), &block
|
206
181
|
)
|
207
182
|
columns.insert(position, column)
|
183
|
+
column
|
208
184
|
end
|
209
185
|
|
210
|
-
|
186
|
+
# @!visibility private
|
187
|
+
def find_column_by_name(columns,name)
|
211
188
|
return name if name.is_a?(Datagrid::Columns::Column)
|
212
189
|
columns.find do |col|
|
213
190
|
col.name.to_sym == name.to_sym
|
214
191
|
end
|
215
192
|
end
|
216
193
|
|
217
|
-
end
|
194
|
+
end
|
218
195
|
|
219
196
|
module InstanceMethods
|
220
197
|
|
198
|
+
# @!visibility private
|
221
199
|
def assets
|
222
200
|
append_column_preload(
|
223
201
|
driver.append_column_queries(
|
@@ -226,27 +204,23 @@ module Datagrid
|
|
226
204
|
)
|
227
205
|
end
|
228
206
|
|
229
|
-
#
|
230
|
-
#
|
231
|
-
# Arguments:
|
232
|
-
#
|
233
|
-
# * <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
|
207
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
208
|
+
# @return [Array<String>] human readable column names. See also "Localization" section
|
234
209
|
def header(*column_names)
|
235
210
|
data_columns(*column_names).map(&:header)
|
236
211
|
end
|
237
212
|
|
238
|
-
#
|
239
|
-
#
|
240
|
-
#
|
241
|
-
#
|
242
|
-
# * <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
|
213
|
+
# @param asset [Object] asset from datagrid scope
|
214
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
215
|
+
# @return [Array<Object>] column values for given asset
|
243
216
|
def row_for(asset, *column_names)
|
244
217
|
data_columns(*column_names).map do |column|
|
245
218
|
data_value(column, asset)
|
246
219
|
end
|
247
220
|
end
|
248
221
|
|
249
|
-
#
|
222
|
+
# @param asset [Object] asset from datagrid scope
|
223
|
+
# @return [Hash] A mapping where keys are column names and values are column values for the given asset
|
250
224
|
def hash_for(asset)
|
251
225
|
result = {}
|
252
226
|
self.data_columns.each do |column|
|
@@ -255,22 +229,16 @@ module Datagrid
|
|
255
229
|
result
|
256
230
|
end
|
257
231
|
|
258
|
-
#
|
259
|
-
#
|
260
|
-
# Arguments:
|
261
|
-
#
|
262
|
-
# * <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
|
232
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
233
|
+
# @return [Array<Array<Object>>] with data for each row in datagrid assets without header
|
263
234
|
def rows(*column_names)
|
264
235
|
map_with_batches do |asset|
|
265
236
|
self.row_for(asset, *column_names)
|
266
237
|
end
|
267
238
|
end
|
268
239
|
|
269
|
-
#
|
270
|
-
#
|
271
|
-
# Arguments:
|
272
|
-
#
|
273
|
-
# * <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
|
240
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
241
|
+
# @return [Array<Array<Object>>] data for each row in datagrid assets with header.
|
274
242
|
def data(*column_names)
|
275
243
|
self.rows(*column_names).unshift(self.header(*column_names))
|
276
244
|
end
|
@@ -278,36 +246,31 @@ module Datagrid
|
|
278
246
|
# Return Array of Hashes where keys are column names and values are column values
|
279
247
|
# for each row in filtered datagrid relation.
|
280
248
|
#
|
281
|
-
#
|
282
|
-
#
|
283
|
-
#
|
284
|
-
#
|
285
|
-
#
|
286
|
-
#
|
287
|
-
# end
|
288
|
-
#
|
289
|
-
# Model.create!(:name => "One")
|
290
|
-
# Model.create!(:name => "Two")
|
249
|
+
# @example
|
250
|
+
# class MyGrid
|
251
|
+
# scope { Model }
|
252
|
+
# column(:id)
|
253
|
+
# column(:name)
|
254
|
+
# end
|
291
255
|
#
|
292
|
-
#
|
256
|
+
# Model.create!(name: "One")
|
257
|
+
# Model.create!(name: "Two")
|
293
258
|
#
|
259
|
+
# MyGrid.new.data_hash # => [{name: "One"}, {name: "Two"}]
|
294
260
|
def data_hash
|
295
261
|
map_with_batches do |asset|
|
296
262
|
hash_for(asset)
|
297
263
|
end
|
298
264
|
end
|
299
265
|
|
300
|
-
#
|
301
|
-
#
|
302
|
-
#
|
303
|
-
# Also you can specify options hash as last argument that is proxied to
|
304
|
-
# Ruby CSV library.
|
305
|
-
#
|
306
|
-
# Example:
|
266
|
+
# @param column_names [Array<String>]
|
267
|
+
# @param options [Hash] CSV generation options
|
268
|
+
# @return [String] a CSV representation of the data in the grid
|
307
269
|
#
|
270
|
+
# @example
|
308
271
|
# grid.to_csv
|
309
272
|
# grid.to_csv(:id, :name)
|
310
|
-
# grid.to_csv(:
|
273
|
+
# grid.to_csv(col_sep: ';')
|
311
274
|
def to_csv(*column_names, **options)
|
312
275
|
require "csv"
|
313
276
|
CSV.generate(
|
@@ -322,41 +285,43 @@ module Datagrid
|
|
322
285
|
end
|
323
286
|
|
324
287
|
|
325
|
-
#
|
326
|
-
#
|
327
|
-
#
|
328
|
-
#
|
288
|
+
# @param column_names [Array<Symbol, String>]
|
289
|
+
# @return [Array<Datagrid::Columns::Column>] all columns selected in grid instance
|
290
|
+
# @example
|
329
291
|
# MyGrid.new.columns # => all defined columns
|
330
|
-
# grid = MyGrid.new(:
|
292
|
+
# grid = MyGrid.new(column_names: [:id, :name])
|
331
293
|
# grid.columns # => id and name columns
|
332
294
|
# grid.columns(:id, :category) # => id and category column
|
333
|
-
def columns(*
|
295
|
+
def columns(*column_names, data: false, html: false)
|
334
296
|
self.class.filter_columns(
|
335
|
-
columns_array, *
|
297
|
+
columns_array, *column_names, data: data, html: html
|
336
298
|
).select do |column|
|
337
299
|
column.enabled?(self)
|
338
300
|
end
|
339
301
|
end
|
340
302
|
|
341
|
-
#
|
342
|
-
|
343
|
-
|
303
|
+
# @param column_names [Array<String, Symbol>] list of column names if you want to limit data only to specified columns
|
304
|
+
# @return columns that can be represented in plain data(non-html) way
|
305
|
+
def data_columns(*column_names, **options)
|
306
|
+
self.columns(*column_names, **options, data: true)
|
344
307
|
end
|
345
308
|
|
346
|
-
#
|
347
|
-
|
348
|
-
|
309
|
+
# @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
|
310
|
+
# @return all columns that can be represented in HTML table
|
311
|
+
def html_columns(*column_names, **options)
|
312
|
+
self.columns(*column_names, **options, html: true)
|
349
313
|
end
|
350
314
|
|
351
315
|
# Finds a column definition by name
|
316
|
+
# @param name [String, Symbol] column name to be found
|
317
|
+
# @return [Datagrid::Columns::Column, nil]
|
352
318
|
def column_by_name(name)
|
353
319
|
self.class.find_column_by_name(columns_array, name)
|
354
320
|
end
|
355
321
|
|
356
322
|
# Gives ability to have a different formatting for CSV and HTML column value.
|
357
323
|
#
|
358
|
-
#
|
359
|
-
#
|
324
|
+
# @example
|
360
325
|
# column(:name) do |model|
|
361
326
|
# format(model.name) do |value|
|
362
327
|
# content_tag(:strong, value)
|
@@ -365,9 +330,10 @@ module Datagrid
|
|
365
330
|
#
|
366
331
|
# column(:company) do |model|
|
367
332
|
# format(model.company.name) do
|
368
|
-
# render :
|
333
|
+
# render partial: "company_with_logo", locals: {company: model.company }
|
369
334
|
# end
|
370
335
|
# end
|
336
|
+
# @return [Datagrid::Columns::Column::ResponseFormat] Format object
|
371
337
|
def format(value, &block)
|
372
338
|
if block_given?
|
373
339
|
self.class.format(value, &block)
|
@@ -377,11 +343,8 @@ module Datagrid
|
|
377
343
|
end
|
378
344
|
end
|
379
345
|
|
380
|
-
#
|
381
|
-
#
|
382
|
-
#
|
383
|
-
# Example:
|
384
|
-
#
|
346
|
+
# @return [Datagrid::Columns::DataRow] an object representing a grid row.
|
347
|
+
# @example
|
385
348
|
# class MyGrid
|
386
349
|
# scope { User }
|
387
350
|
# column(:id)
|
@@ -400,23 +363,25 @@ module Datagrid
|
|
400
363
|
|
401
364
|
# Defines a column at instance level
|
402
365
|
#
|
403
|
-
#
|
366
|
+
# @see Datagrid::Columns::ClassMethods#column
|
404
367
|
def column(name, query = nil, **options, &block)
|
405
368
|
self.class.define_column(columns_array, name, query, **options, &block)
|
406
369
|
end
|
407
370
|
|
408
|
-
|
371
|
+
# @!visibility private
|
372
|
+
def initialize(*)
|
409
373
|
self.columns_array = self.class.columns_array.clone
|
410
374
|
super
|
411
375
|
end
|
412
376
|
|
413
|
-
#
|
377
|
+
# @return [Array<Datagrid::Columns::Column>] all columns that are possible to be displayed for the current grid object
|
414
378
|
#
|
379
|
+
# @example
|
415
380
|
# class MyGrid
|
416
381
|
# filter(:search) {|scope, value| scope.full_text_search(value)}
|
417
382
|
# column(:id)
|
418
|
-
# column(:name, :
|
419
|
-
# column(:search_match, :
|
383
|
+
# column(:name, mandatory: true)
|
384
|
+
# column(:search_match, if: proc {|grid| grid.search.present? }) do |model, grid|
|
420
385
|
# search_match_line(model.searchable_content, grid.search)
|
421
386
|
# end
|
422
387
|
# end
|
@@ -426,14 +391,13 @@ module Datagrid
|
|
426
391
|
# grid.available_columns # => [ #<Column:id>, #<Column:name> ]
|
427
392
|
# grid.search = "keyword"
|
428
393
|
# grid.available_columns # => [ #<Column:id>, #<Column:name>, #<Column:search_match> ]
|
429
|
-
#
|
430
394
|
def available_columns
|
431
395
|
columns_array.select do |column|
|
432
396
|
column.enabled?(self)
|
433
397
|
end
|
434
398
|
end
|
435
399
|
|
436
|
-
#
|
400
|
+
# @return [Object] a cell data value for given column name and asset
|
437
401
|
def data_value(column_name, asset)
|
438
402
|
column = column_by_name(column_name)
|
439
403
|
cache(column, asset, :data_value) do
|
@@ -443,7 +407,7 @@ module Datagrid
|
|
443
407
|
end
|
444
408
|
end
|
445
409
|
|
446
|
-
#
|
410
|
+
# @return [Object] a cell HTML value for given column name and asset and view context
|
447
411
|
def html_value(column_name, context, asset)
|
448
412
|
column = column_by_name(column_name)
|
449
413
|
cache(column, asset, :html_value) do
|
@@ -456,12 +420,13 @@ module Datagrid
|
|
456
420
|
end
|
457
421
|
end
|
458
422
|
|
459
|
-
#
|
423
|
+
# @return [Object] a decorated version of given model if decorator is specified or the model otherwise.
|
460
424
|
def decorate(model)
|
461
425
|
self.class.decorate(model)
|
462
426
|
end
|
463
427
|
|
464
|
-
|
428
|
+
# @!visibility private
|
429
|
+
def generic_value(column, model)
|
465
430
|
cache(column, model, :generic_value) do
|
466
431
|
presenter = decorate(model)
|
467
432
|
unless column.enabled?(self)
|
@@ -479,8 +444,8 @@ module Datagrid
|
|
479
444
|
|
480
445
|
protected
|
481
446
|
|
482
|
-
def append_column_preload(
|
483
|
-
columns.inject(
|
447
|
+
def append_column_preload(relation)
|
448
|
+
columns.inject(relation) do |current, column|
|
484
449
|
column.append_preload(current)
|
485
450
|
end
|
486
451
|
end
|
@@ -544,10 +509,11 @@ module Datagrid
|
|
544
509
|
|
545
510
|
context.instance_exec(*args, &column.html_block)
|
546
511
|
end
|
547
|
-
end
|
548
|
-
|
549
|
-
class DataRow
|
512
|
+
end
|
550
513
|
|
514
|
+
# Object representing a single row of data when building a datagrid table
|
515
|
+
# @see Datagrid::Columns::InstanceMethods#data_row
|
516
|
+
class DataRow < BasicObject
|
551
517
|
def initialize(grid, model)
|
552
518
|
@grid = grid
|
553
519
|
@model = model
|
@@ -8,6 +8,11 @@ module Datagrid
|
|
8
8
|
yield(configuration)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
# Datagrid configuration object
|
12
|
+
class Configuration
|
13
|
+
# @return [Array<String>] Date parsing formats
|
14
|
+
attr_accessor :date_formats
|
15
|
+
# @return [Array<String>] Timestamp parsing formats
|
16
|
+
attr_accessor :datetime_formats
|
12
17
|
end
|
13
18
|
end
|