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