Module: Datagrid::Columns::InstanceMethods
- Defined in:
- lib/datagrid/columns.rb
Overview
ClassMethods
Instance Method Summary collapse
- #assets ⇒ Object
-
#column_by_name(name) ⇒ Object
Finds a column definition by name.
-
#columns(*args) ⇒ Object
Returns all columns selected in grid instance.
-
#data(*column_names) ⇒ Object
Returns Array of Arrays with data for each row in datagrid assets with header.
-
#data_columns(*names) ⇒ Object
Returns all columns that can be represented in plain data(non-html) way.
-
#data_hash ⇒ Object
Return Array of Hashes where keys are column names and values are column values for each row in filtered datagrid relation.
-
#data_row(asset) ⇒ Object
Returns an object representing a table row.
-
#format(value, &block) ⇒ Object
Gives ability to have a different formatting for CSV and HTML column value.
-
#hash_for(asset) ⇒ Object
Returns
Hash
where keys are column names and values are column values for the given asset. -
#header(*column_names) ⇒ Object
Returns
Array
of human readable column names. -
#html_columns(*names) ⇒ Object
Returns all columns that can be represented in HTML table.
-
#row_for(asset, *column_names) ⇒ Object
Returns
Array
column values for given asset. -
#rows(*column_names) ⇒ Object
Returns Array of Arrays with data for each row in datagrid assets without header.
-
#to_csv(*column_names) ⇒ Object
Returns a CSV representation of the data in the table You are able to specify which columns you want to see in CSV.
Instance Method Details
#assets ⇒ Object
173 174 175 |
# File 'lib/datagrid/columns.rb', line 173 def assets driver.append_column_queries(super, columns.select(&:query)) end |
#column_by_name(name) ⇒ Object
Finds a column definition by name
300 301 302 |
# File 'lib/datagrid/columns.rb', line 300 def column_by_name(name) self.class.column_by_name(name) end |
#columns(*args) ⇒ Object
Returns all columns selected in grid instance
Examples:
MyGrid.new.columns # => all defined columns
grid = MyGrid.new(:column_names => [:id, :name])
grid.columns # => id and name columns
grid.columns(:id, :category) # => id and category column
279 280 281 |
# File 'lib/datagrid/columns.rb', line 279 def columns(*args) self.class.columns(*args).select {|column| column.enabled?(self)} end |
#data(*column_names) ⇒ Object
Returns Array of Arrays with data for each row in datagrid assets with header.
Arguments:
* <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
222 223 224 |
# File 'lib/datagrid/columns.rb', line 222 def data(*column_names) self.rows(*column_names).unshift(self.header(*column_names)) end |
#data_columns(*names) ⇒ Object
Returns all columns that can be represented in plain data(non-html) way
284 285 286 287 288 289 |
# File 'lib/datagrid/columns.rb', line 284 def data_columns(*names) = names. [:data] = true names << self.columns(*names) end |
#data_hash ⇒ Object
Return Array of Hashes where keys are column names and values are column values for each row in filtered datagrid relation.
Example:
class MyGrid
scope { Model }
column(:id)
column(:name)
end
Model.create!(:name => "One")
Model.create!(:name => "Two")
MyGrid.new.data_hash # => [{:name => "One"}, {:name => "Two"}]
242 243 244 245 246 |
# File 'lib/datagrid/columns.rb', line 242 def data_hash map_with_batches do |asset| hash_for(asset) end end |
#data_row(asset) ⇒ Object
Returns an object representing a table row. Allows to access column values
Example:
class MyGrid
scope { User }
column(:id)
column(:name)
column(:number_of_purchases) do |user|
user.purchases.count
end
end
row = MyGrid.new.data_row(User.last)
row.id # => user.id
row.number_of_purchases # => user.purchases.count
346 347 348 |
# File 'lib/datagrid/columns.rb', line 346 def data_row(asset) ::Datagrid::Columns::DataRow.new(self, asset) end |
#format(value, &block) ⇒ Object
Gives ability to have a different formatting for CSV and HTML column value.
Example:
column(:name) do |model|
format(model.name) do |value|
content_tag(:strong, value)
end
end
column(:company) do |model|
format(model.company.name) do
render :partial => "company_with_logo", :locals => {:company => model.company }
end
end
320 321 322 323 324 325 326 327 |
# File 'lib/datagrid/columns.rb', line 320 def format(value, &block) if block_given? self.class.format(value, &block) else # don't override Object#format method super end end |
#hash_for(asset) ⇒ Object
Returns Hash
where keys are column names and values are column values for the given asset
198 199 200 201 202 203 204 |
# File 'lib/datagrid/columns.rb', line 198 def hash_for(asset) result = {} self.data_columns.each do |column| result[column.name] = column.data_value(asset, self) end result end |
#header(*column_names) ⇒ Object
Returns Array
of human readable column names. See also “Localization” section
Arguments:
* <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
182 183 184 |
# File 'lib/datagrid/columns.rb', line 182 def header(*column_names) data_columns(*column_names).map(&:header) end |
#html_columns(*names) ⇒ Object
Returns all columns that can be represented in HTML table
292 293 294 295 296 297 |
# File 'lib/datagrid/columns.rb', line 292 def html_columns(*names) = names. [:html] = true names << self.columns(*names) end |
#row_for(asset, *column_names) ⇒ Object
Returns Array
column values for given asset
Arguments:
* <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
191 192 193 194 195 |
# File 'lib/datagrid/columns.rb', line 191 def row_for(asset, *column_names) data_columns(*column_names).map do |column| column.data_value(asset, self) end end |
#rows(*column_names) ⇒ Object
Returns Array of Arrays with data for each row in datagrid assets without header.
Arguments:
* <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
211 212 213 214 215 |
# File 'lib/datagrid/columns.rb', line 211 def rows(*column_names) map_with_batches do |asset| self.row_for(asset, *column_names) end end |
#to_csv(*column_names) ⇒ Object
Returns a CSV representation of the data in the table You are able to specify which columns you want to see in CSV. All data columns are included by default Also you can specify options hash as last argument that is proxied to Ruby CSV library.
Example:
grid.to_csv
grid.to_csv(:id, :name)
grid.to_csv(:col_sep => ';')
259 260 261 262 263 264 265 266 267 268 |
# File 'lib/datagrid/columns.rb', line 259 def to_csv(*column_names) = column_names. csv_class.generate( {:headers => self.header(*column_names), :write_headers => true}.merge() ) do |csv| each_with_batches do |asset| csv << row_for(asset, *column_names) end end end |