datagrid 2.0.0.pre.alpha → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37409811e25a50a023aa095fb8854424fea3867e137b8d212d619ba191307abe
4
- data.tar.gz: 2485f8f3a8cf9d196011a584e680c345d147430ef3d263b151569ae10fc3ef69
3
+ metadata.gz: d4f9903c41d2efb4c914ddf949db685228644e1ba071e8e2337491e0b91e0bbd
4
+ data.tar.gz: 937aea06689389c091b3be16aabaa36d8c828b8a8e97f220eaad403975371c6e
5
5
  SHA512:
6
- metadata.gz: 2974b76d03c7a3c014a3b853570ae0a11e2c137f0e4faea6be0dfcff45b49e4c64037298337e0f9e3028ecd64d938747770903469888339e6a43bbcc03330a59
7
- data.tar.gz: 52d188d5c0e6a41a3f44061274695b5eee22f7c669c1814f26ae38cfeee364b66c8437ca85c55fa3a73d8fe3333e6c9820fda9b1e2ccee770d48bcba7d72bfe3
6
+ metadata.gz: b3a5ef4923f03bd41bc54c2cc8ad6261f4a1e3302c4aad83a58868d539d69527a6cf838ee6efdf621fa0a47dabd023fa041773dde723f35f0feaf59e0b5effe6
7
+ data.tar.gz: 0a4c6aca85619ab3a71c125717d6f6f5209eafcb7a509df76afaac91e70790f199fea2ac796ebb9c05d088c8f4d40b42c16d6a49a28661ae1da7703c86c1ff92
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --markup=markdown
2
+ --readme=README.md
data/README.md CHANGED
@@ -23,8 +23,6 @@ including admin panels, analytics and data browsers:
23
23
  * Sequel
24
24
  * Array (in-memory data of smaller scale)
25
25
 
26
- [Create an issue](https://github.com/bogdan/datagrid/issues/new) if you want more.
27
-
28
26
  ## Datagrid Philosophy
29
27
 
30
28
  1. Expressive DSL complements OOD instead of replacing it.
@@ -164,7 +162,7 @@ end
164
162
  Some formatting options are also available.
165
163
  Each column is sortable.
166
164
 
167
- [More about columns](https://github.com/bogdan/datagrid/wiki/Columns)
165
+ [More about columns](https://rubydoc.info/gems/datagrid/Datagrid/Columns)
168
166
 
169
167
  ### Front end
170
168
 
data/datagrid.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  "CHANGELOG.md",
20
20
  "README.md",
21
21
  "datagrid.gemspec",
22
+ ".yardopts",
22
23
  ]
23
24
  s.files += `git ls-files | grep -E '^(app|lib|templates)'`.split("\n")
24
25
  s.homepage = "https://github.com/bogdan/datagrid"
@@ -27,7 +28,7 @@ Gem::Specification.new do |s|
27
28
  s.metadata = {
28
29
  "homepage_uri" => s.homepage,
29
30
  "bug_tracker_uri" => "#{s.homepage}/issues",
30
- "documentation_uri" => "#{s.homepage}/wiki",
31
+ "documentation_uri" => "https://rubydoc.info/gems/datagrid",
31
32
  "changelog_uri" => "#{s.homepage}/blob/main/CHANGELOG.md",
32
33
  "source_code_uri" => s.homepage,
33
34
  "rubygems_mfa_required" => "true",
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "datagrid/utils"
4
4
  require "active_support/core_ext/class/attribute"
5
+ require "datagrid/columns/column"
5
6
 
6
7
  module Datagrid
7
8
  # Defines a column to be used for displaying data in a Datagrid.
@@ -199,33 +200,30 @@ module Datagrid
199
200
  # presenter.user.created_at
200
201
  # end
201
202
  module Columns
202
- require "datagrid/columns/column"
203
-
204
203
  # @!method default_column_options=(value)
205
- # @param [Hash] value default options passed to #column method call
206
- # @return [Hash] default options passed to #column method call
207
- # @example
208
- # # Disable default order
209
- # self.default_column_options = { order: false }
210
- # # Makes entire report HTML
211
- # self.default_column_options = { html: true }
204
+ # @param [Hash] value default options passed to {#column} method call
205
+ # @return [Hash] default options passed to {#column} method call
206
+ # @example Disable default order
207
+ # self.default_column_options = { order: false }
208
+ # @example Makes entire report HTML
209
+ # self.default_column_options = { html: true }
212
210
 
213
211
  # @!method default_column_options
214
- # @return [Hash]
215
- # @see #default_column_options=
212
+ # @return [Hash] default options passed to {#column} method call
213
+ # @see #default_column_options=
216
214
 
217
215
  # @!method batch_size=(value)
218
- # @param [Integer] value Specify a default batch size when generating CSV or just data. Default: 1000
219
- # @return [Integer] Specify a default batch size when generating CSV or just data.
220
- # @example
221
- # self.batch_size = 500
222
- # # Disable batches
223
- # self.batch_size = nil
224
- #
216
+ # Specify a default batch size when generating CSV or just data.
217
+ # @param [Integer] value a batch size when generating CSV or just data. Default: 1000
218
+ # @return [void]
219
+ # @example Set batch size to 500
220
+ # self.batch_size = 500
221
+ # @example Disable batches
222
+ # self.batch_size = nil
225
223
 
226
224
  # @!method batch_size
227
- # @return [Integer]
228
- # @see #batch_size=
225
+ # @return [Integer]
226
+ # @see #batch_size=
229
227
 
230
228
  # @visibility private
231
229
  # @param [Object] base
@@ -253,37 +251,31 @@ module Datagrid
253
251
  filter_columns(columns_array, *column_names, data: data, html: html)
254
252
  end
255
253
 
256
- # Defines new datagrid column
257
- #
254
+ # Defines a new datagrid column
258
255
  # @param name [Symbol] column name
259
256
  # @param query [String, nil] a string representing the query to select this column (supports only ActiveRecord)
260
- # @param options [Hash{Symbol => Object}] hash of options
261
257
  # @param block [Block] proc to calculate a column value
258
+ # @option options [Boolean, String] html Determines if the column should be present
259
+ # in the HTML table and how it is formatted.
260
+ # @option options [String, Array<Symbol>] order Determines if the column can be sortable and
261
+ # specifies the ORM ordering method.
262
+ # Example: `"created_at, id"` for ActiveRecord, `[:created_at, :id]` for Mongoid.
263
+ # @option options [String] order_desc Specifies a descending order for the column
264
+ # (used when `:order` cannot be easily reversed by the ORM).
265
+ # @option options [Boolean, Proc] order_by_value Enables Ruby-level ordering for the column.
266
+ # Warning: Sorting large datasets in Ruby is not recommended.
267
+ # If `true`, Datagrid orders by the column value.
268
+ # If a block is provided, Datagrid orders by the block's return value.
269
+ # @option options [Boolean] mandatory If `true`, the column will never be hidden by the `#column_names` selection.
270
+ # @option options [Symbol] before Places the column before the specified column when determining order.
271
+ # @option options [Symbol] after Places the column after the specified column when determining order.
272
+ # @option options [Boolean, Proc] if conditions when a column is available.
273
+ # @option options [Boolean, Proc] unless conditions when a column is not available.
274
+ # @option options [Symbol, Array<Symbol>] preload Specifies associations
275
+ # to preload for the column within the scope.
276
+ # @option options [Hash] tag_options Specifies HTML attributes for the `<td>` or `<th>` of the column.
277
+ # Example: `{ class: "content-align-right", "data-group": "statistics" }`.
262
278
  # @return [Datagrid::Columns::Column]
263
- #
264
- # Available options:
265
- #
266
- # * <tt>html</tt> - determines if current column should be present in html table and how is it formatted
267
- # * <tt>order</tt> - determines if this column could be sortable and how.
268
- # The value of order is explicitly passed to ORM ordering method.
269
- # Example: <tt>"created_at, id"</tt> for ActiveRecord, <tt>[:created_at, :id]</tt> for Mongoid
270
- # * <tt>order_desc</tt> - determines a descending order for given column
271
- # (only in case when <tt>:order</tt> can not be easily reversed by ORM)
272
- # * <tt>order_by_value</tt> - used in case it is easier to perform ordering at ruby level not on database level.
273
- # Warning: using ruby to order large datasets is very unrecommended.
274
- # If set to true - datagrid will use column value to order by this column
275
- # If block is given - datagrid will use value returned from block
276
- # * <tt>mandatory</tt> - if true, column will never be hidden with #column_names selection
277
- # * <tt>url</tt> - a proc with one argument, pass this option to easily convert the value into an URL
278
- # * <tt>before</tt> - determines the position of this column, by adding it before the column passed here
279
- # * <tt>after</tt> - determines the position of this column, by adding it after the column passed here
280
- # * <tt>if</tt> - the column is shown if the reult of calling this argument is true
281
- # * <tt>unless</tt> - the column is shown unless the reult of calling this argument is true
282
- # * <tt>preload</tt> - spefies which associations of the scope should be preloaded for this column
283
- # * `tag_options` - specify HTML attributes to be set for `<td>` or `<th>` of a column
284
- # Example: `{ class: "content-align-right", "data-group": "statistics" }`
285
- #
286
- # @see https://github.com/bogdan/datagrid/wiki/Columns
287
279
  def column(name, query = nil, **options, &block)
288
280
  define_column(columns_array, name, query, **options, &block)
289
281
  end
@@ -333,10 +325,10 @@ module Datagrid
333
325
  # Defines a model decorator that will be used to define a column value.
334
326
  # All column blocks will be given a decorated version of the model.
335
327
  # @return [void]
336
- # @example
328
+ # @example Wrapping a model with presenter
337
329
  # decorate { |user| UserPresenter.new(user) }
338
- #
339
- # decorate { UserPresenter } # a shortcut
330
+ # @example A shortcut for doing the same
331
+ # decorate { UserPresenter }
340
332
  def decorate(model = nil, &block)
341
333
  if !model && !block
342
334
  raise ArgumentError, "decorate needs either a block to define decoration or a model to decorate"
@@ -403,14 +395,16 @@ module Datagrid
403
395
  )
404
396
  end
405
397
 
406
- # @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
398
+ # @param column_names [Array<String, Symbol>] list of column names
399
+ # if you want to limit data only to specified columns
407
400
  # @return [Array<String>] human readable column names. See also "Localization" section
408
401
  def header(*column_names)
409
402
  data_columns(*column_names).map(&:header)
410
403
  end
411
404
 
412
405
  # @param asset [Object] asset from datagrid scope
413
- # @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
406
+ # @param column_names [Array<String, Symbol>] list of column names
407
+ # if you want to limit data only to specified columns
414
408
  # @return [Array<Object>] column values for given asset
415
409
  def row_for(asset, *column_names)
416
410
  data_columns(*column_names).map do |column|
@@ -419,7 +413,8 @@ module Datagrid
419
413
  end
420
414
 
421
415
  # @param asset [Object] asset from datagrid scope
422
- # @return [Hash] A mapping where keys are column names and values are column values for the given asset
416
+ # @return [Hash] A mapping where keys are column names and
417
+ # values are column values for the given asset
423
418
  def hash_for(asset)
424
419
  result = {}
425
420
  data_columns.each do |column|
@@ -428,7 +423,8 @@ module Datagrid
428
423
  result
429
424
  end
430
425
 
431
- # @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
426
+ # @param column_names [Array<String,Symbol>] list of column names
427
+ # if you want to limit data only to specified columns
432
428
  # @return [Array<Array<Object>>] with data for each row in datagrid assets without header
433
429
  def rows(*column_names)
434
430
  map_with_batches do |asset|
@@ -436,7 +432,8 @@ module Datagrid
436
432
  end
437
433
  end
438
434
 
439
- # @param column_names [Array<String>] list of column names if you want to limit data only to specified columns
435
+ # @param column_names [Array<String, Symbol>] list of column names
436
+ # if you want to limit data only to specified columns.
440
437
  # @return [Array<Array<Object>>] data for each row in datagrid assets with header.
441
438
  def data(*column_names)
442
439
  rows(*column_names).unshift(header(*column_names))
@@ -461,7 +458,7 @@ module Datagrid
461
458
  end
462
459
  end
463
460
 
464
- # @param column_names [Array<String>]
461
+ # @param column_names [Array<String,Symbol>]
465
462
  # @param options [Hash] CSV generation options
466
463
  # @return [String] a CSV representation of the data in the grid
467
464
  #
@@ -514,7 +511,7 @@ module Datagrid
514
511
  columns(*column_names, data: data, html: true)
515
512
  end
516
513
 
517
- # Finds a column definition by name
514
+ # Finds a column by name
518
515
  # @param name [String, Symbol] column name to be found
519
516
  # @return [Datagrid::Columns::Column, nil]
520
517
  def column_by_name(name)
@@ -522,22 +519,21 @@ module Datagrid
522
519
  end
523
520
 
524
521
  # Gives ability to have a different formatting for CSV and HTML column value.
525
- #
526
- # @example
522
+ # @example Formating using Rails view helpers
527
523
  # column(:name) do |model|
528
524
  # format(model.name) do |value|
529
525
  # tag.strong(value)
530
526
  # end
531
527
  # end
532
- #
528
+ # @example Formatting using a separated view template
533
529
  # column(:company) do |model|
534
530
  # format(model.company.name) do
535
- # render partial: "company_with_logo", locals: {company: model.company }
531
+ # render partial: "companies/company_with_logo", locals: {company: model.company }
536
532
  # end
537
533
  # end
538
534
  # @return [Datagrid::Columns::Column::ResponseFormat] Format object
539
535
  def format(value, &block)
540
- if block_given?
536
+ if block
541
537
  self.class.format(value, &block)
542
538
  else
543
539
  # don't override Object#format method
@@ -545,26 +541,26 @@ module Datagrid
545
541
  end
546
542
  end
547
543
 
544
+ # @param [Object] asset one of the assets from grid scope
548
545
  # @return [Datagrid::Columns::DataRow] an object representing a grid row.
549
546
  # @example
550
- # class MyGrid
551
- # scope { User }
552
- # column(:id)
553
- # column(:name)
554
- # column(:number_of_purchases) do |user|
555
- # user.purchases.count
556
- # end
557
- # end
547
+ # class MyGrid
548
+ # scope { User }
549
+ # column(:id)
550
+ # column(:name)
551
+ # column(:number_of_purchases) do |user|
552
+ # user.purchases.count
553
+ # end
554
+ # end
558
555
  #
559
- # row = MyGrid.new.data_row(User.last)
560
- # row.id # => user.id
561
- # row.number_of_purchases # => user.purchases.count
556
+ # row = MyGrid.new.data_row(User.last)
557
+ # row.id # => user.id
558
+ # row.number_of_purchases # => user.purchases.count
562
559
  def data_row(asset)
563
560
  ::Datagrid::Columns::DataRow.new(self, asset)
564
561
  end
565
562
 
566
563
  # Defines a column at instance level
567
- #
568
564
  # @see Datagrid::Columns::ClassMethods#column
569
565
  def column(name, query = nil, **options, &block)
570
566
  self.class.define_column(columns_array, name, query, **options, &block)
@@ -578,7 +574,6 @@ module Datagrid
578
574
 
579
575
  # @return [Array<Datagrid::Columns::Column>] all columns
580
576
  # that are possible to be displayed for the current grid object
581
- #
582
577
  # @example
583
578
  # class MyGrid
584
579
  # filter(:search) {|scope, value| scope.full_text_search(value)}
@@ -600,6 +595,8 @@ module Datagrid
600
595
  end
601
596
  end
602
597
 
598
+ # @param [String,Symbol] column_name column name
599
+ # @param [Object] asset one of the assets from grid scope
603
600
  # @return [Object] a cell data value for given column name and asset
604
601
  def data_value(column_name, asset)
605
602
  column = column_by_name(column_name)
@@ -611,6 +608,9 @@ module Datagrid
611
608
  end
612
609
  end
613
610
 
611
+ # @param [String,Symbol] column_name column name
612
+ # @param [Object] asset one of the assets from grid scope
613
+ # @param [ActionView::Base] context view context object
614
614
  # @return [Object] a cell HTML value for given column name and asset and view context
615
615
  def html_value(column_name, context, asset)
616
616
  column = column_by_name(column_name)
@@ -624,6 +624,7 @@ module Datagrid
624
624
  end
625
625
  end
626
626
 
627
+ # @param [Object] model one of the assets from grid scope
627
628
  # @return [Object] a decorated version of given model if decorator is specified or the model otherwise.
628
629
  def decorate(model)
629
630
  self.class.decorate(model)
@@ -1,6 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Datagrid
4
+ # @return [Configuration] current Datagrid configuration
5
+ def self.configuration
6
+ @configuration ||= Configuration.new
7
+ end
8
+
9
+ # @yield block to configure
10
+ # @yieldparam [Configuration] configuration
11
+ # @yieldreturn [void]
12
+ # @return [void] configure datagrid
13
+ # @see Datagrid::Configuration
14
+ def self.configure(&block)
15
+ block.call(configuration)
16
+ end
17
+
4
18
  # ## Configuration
5
19
  #
6
20
  # Datagrid provides several configuration options.
@@ -11,12 +25,14 @@ module Datagrid
11
25
  # Datagrid.configure do |config|
12
26
  # # Defines date formats that can be used to parse dates.
13
27
  # # Note: Multiple formats can be specified. The first format is used to format dates as strings,
14
- # # while other formats are used only for parsing dates from strings (e.g., if your app supports multiple formats).
15
- # config.date_formats = ["%m/%d/%Y", "%Y-%m-%d"]
28
+ # # while other formats are used only for parsing dates
29
+ # # from strings (e.g., if your app supports multiple formats).
30
+ # config.date_formats = "%m/%d/%Y", "%Y-%m-%d"
16
31
  #
17
32
  # # Defines timestamp formats that can be used to parse timestamps.
18
33
  # # Note: Multiple formats can be specified. The first format is used to format timestamps as strings,
19
- # # while other formats are used only for parsing timestamps from strings (e.g., if your app supports multiple formats).
34
+ # # while other formats are used only for parsing timestamps
35
+ # # from strings (e.g., if your app supports multiple formats).
20
36
  # config.datetime_formats = ["%m/%d/%Y %h:%M", "%Y-%m-%d %h:%M:%s"]
21
37
  # end
22
38
  # ```
@@ -7,7 +7,6 @@ module Datagrid
7
7
  end
8
8
  end
9
9
 
10
- # @!visibility private
11
10
  module Datagrid
12
11
  module Filters
13
12
  class BaseFilter
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # @!visibility private
4
3
  module Datagrid
5
4
  module Filters
6
5
  class ExtendedBooleanFilter < Datagrid::Filters::EnumFilter
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # @!visibility private
4
3
  module Datagrid
5
4
  module Filters
6
5
  class FloatFilter < Datagrid::Filters::BaseFilter
@@ -161,7 +161,6 @@ module Datagrid
161
161
 
162
162
  extend ActiveSupport::Concern
163
163
 
164
- # @!visibility private
165
164
  included do
166
165
  include Datagrid::Core
167
166
  class_attribute :filters_array, default: []
@@ -192,35 +191,28 @@ module Datagrid
192
191
  # @param [Hash] options hash of options
193
192
  # @param [Proc] block proc to apply the filter
194
193
  # @return [Datagrid::Filters::BaseFilter] Filter definition object
195
- # @see https://github.com/bogdan/datagrid/wiki/Filters
196
- #
197
- # Available options:
198
- #
199
- # * <tt>:header</tt> - determines the header of the filter
200
- # * <tt>:default</tt> - the default filter value.
201
- # Can be a <tt>Proc</tt> in case default should be recalculated.
202
- # * <tt>:range</tt> - if true, filter can accept two values that are treated
203
- # as a range that will be used for filtering.
204
- # Not all of the filter types support this option. Here are the list of types that do:
205
- # <tt>:integer</tt>, <tt>:float</tt>, <tt>:date</tt>, <tt>:datetime</tt>, <tt>:string</tt>
206
- # * <tt>:multiple</tt> - if true multiple values can be assigned to this filter.
207
- # If String is assigned as a filter value, it is parsed from string using a separator symbol (`,` by default).
208
- # But you can specify a different separator as option value. Default: false.
209
- # * <tt>:allow_nil</tt> - determines if the value can be nil
210
- # * <tt>:allow_blank</tt> - determines if the value can be blank
211
- # * <tt>:before</tt> - determines the position of this filter,
212
- # by adding it before the filter passed here (when using datagrid_form_with helper)
213
- # * <tt>:after</tt> - determines the position of this filter,
214
- # by adding it after the filter passed here (when using datagrid_form_with helper)
215
- # * <tt>:dummy</tt> - if true, this filter will not be applied automatically
216
- # and will be just displayed in form. In case you may want to apply it manually.
217
- # * <tt>:if</tt> - specify the condition when the filter can be dislayed and used.
218
- # Accepts a block or a symbol with an instance method name
219
- # * <tt>:unless</tt> - specify the reverse condition when the filter can be dislayed and used.
220
- # Accepts a block or a symbol with an instance method name
221
- # * <tt>:input_options</tt> - options passed when rendering html input tag attributes.
222
- # Use <tt>input_options.type</tt> to control input type including <tt>textarea</tt>.
223
- # * <tt>:label_options</tt> - options passed when rendering html label tag attributes
194
+ # @see Datagrid::Filters
195
+ # @option options [String] header Determines the header of the filter.
196
+ # @option options [Object, Proc] default The default filter value. Accepts a `Proc` to allow dynamic calculation.
197
+ # @option options [Boolean] range Whether the filter accepts two values to define a range.
198
+ # Supported by types: `:integer`, `:float`, `:date`, `:datetime`, and `:string`.
199
+ # @option options [Boolean, String] multiple If true, allows multiple values for the filter.
200
+ # Strings are parsed using a separator (default: `,`). Can accept a custom separator. Default: `false`.
201
+ # @option options [Boolean] allow_nil Whether the filter value can be `nil`. Default: `false`.
202
+ # @option options [Boolean] allow_blank Whether the filter value can be blank. Default: `false`.
203
+ # @option options [Symbol] before Specifies the position of this filter by placing it before another filter.
204
+ # Used with the `datagrid_form_for` helper.
205
+ # @option options [Symbol] after Specifies the position of this filter by placing it after another filter.
206
+ # Used with the `datagrid_form_for` helper.
207
+ # @option options [Boolean] dummy If true, the filter is not applied automatically and
208
+ # is only displayed in the form. Useful for manual application.
209
+ # @option options [Proc, Symbol] if Specifies a condition under which the filter is displayed and used.
210
+ # Accepts a block or the name of an instance method.
211
+ # @option options [Proc, Symbol] unless Specifies a condition under which the filter is NOT displayed or used.
212
+ # Accepts a block or the name of an instance method.
213
+ # @option options [Hash] input_options Options passed to the HTML input tag for rendering attributes.
214
+ # Use `input_options[:type]` to control the input type (e.g., `textarea`).
215
+ # @option options [Hash] label_options Options passed to the HTML label tag for rendering attributes.
224
216
  def filter(name, type = :default, **options, &block)
225
217
  klass = type.is_a?(Class) ? type : FILTER_TYPES[type]
226
218
  raise ConfigurationError, "filter class #{type.inspect} not found" unless klass
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "rails/generators"
4
4
 
5
- # @!visibility private
6
5
  module Datagrid
7
6
  # @!visibility private
8
7
  module Generators
@@ -17,7 +17,8 @@ module Datagrid
17
17
  # [built-in CSS](https://github.com/bogdan/datagrid/blob/master/app/assets/stylesheets/datagrid.sass).
18
18
  #
19
19
  # Datagrid includes helpers and a form builder for easy frontend generation.
20
- # If you need a fully-featured custom GUI, create your templates manually with the help of the {Datagrid::Columns} API.
20
+ # If you need a fully-featured custom GUI, create your templates manually
21
+ # with the help of the {Datagrid::Columns} API.
21
22
  #
22
23
  # ## Controller and Routing
23
24
  #
@@ -63,7 +64,8 @@ module Datagrid
63
64
  #
64
65
  # ### Advanced Method
65
66
  #
66
- # You can use Rails built-in tools to create a form. Additionally, Datagrid provides helpers to generate input/select elements for filters:
67
+ # You can use Rails built-in tools to create a form.
68
+ # Additionally, Datagrid provides helpers to generate input/select elements for filters:
67
69
  #
68
70
  # ``` haml
69
71
  # - form_with model: UserGrid.new, method: :get, url: users_path do |f|
@@ -240,7 +242,7 @@ module Datagrid
240
242
  #
241
243
  # https://github.com/bogdan/datagrid/blob/master/lib/datagrid/locale/en.yml
242
244
  module Helper
243
- # @param grid [Datagrid] grid object
245
+ # @param grid [Datagrid::Base] grid object
244
246
  # @param column [Datagrid::Columns::Column, String, Symbol] column name
245
247
  # @param model [Object] an object from grid scope
246
248
  # @return [Object] individual cell value from the given grid, column name and model
@@ -264,19 +266,16 @@ module Datagrid
264
266
  # Renders html table with columns defined in grid class.
265
267
  # In the most common used you need to pass paginated collection
266
268
  # to datagrid table because datagrid do not have pagination compatibilities:
267
- # Supported options:
268
- #
269
- # * <tt>:html</tt> - hash of attributes for <table> tag
270
- # * <tt>:order</tt> - If false do not generate ordering controlls.
271
- # Default: true.
272
- # * <tt>:columns</tt> - Array of column names to display.
273
- # Used in case when same grid class is used in different places
274
- # and needs different columns. Default: all defined columns.
275
- # * <tt>:partials</tt> - Path for partials lookup.
276
- # Default: 'datagrid'.
277
- # @param grid [Datagrid] grid object
269
+ # @param grid [Datagrid::Base] grid object
278
270
  # @param assets [Array] objects from grid scope
279
271
  # @param [Hash{Symbol => Object}] options HTML attributes to be passed to `<table>` tag
272
+ # @option options [Hash] html A hash of attributes for the `<table>` tag.
273
+ # @option options [Boolean] order Whether to generate ordering controls.
274
+ # If set to `false`, ordering controls are not generated. Default: `true`.
275
+ # @option options [Array<Symbol>] columns An array of column names to display.
276
+ # Use this when the same grid class is used in different contexts and requires different columns.
277
+ # Default: all defined columns.
278
+ # @option options [String] partials The path for partials lookup. Default: `'datagrid'`.
280
279
  # @return [String] table tag HTML markup
281
280
  # @example
282
281
  # assets = grid.assets.page(params[:page])
@@ -294,16 +293,14 @@ module Datagrid
294
293
 
295
294
  # Renders HTML table header for given grid instance using columns defined in it
296
295
  #
297
- # Supported options:
298
- #
299
- # * <tt>:order</tt> - display ordering controls built-in into header
300
- # Default: true
301
- # * <tt>:columns</tt> - Array of column names to display.
302
- # Used in case when same grid class is used in different places
303
- # and needs different columns. Default: all defined columns.
304
- # * <tt>:partials</tt> - Path for partials lookup.
305
- # Default: 'datagrid'.
306
- # @param grid [Datagrid] grid object
296
+ # @option options [Boolean] order Whether to display ordering controls built into the header.
297
+ # Default: `true`.
298
+ # @option options [Array<Symbol,String>] columns An array of column names to display.
299
+ # Use this when the same grid class is used in different contexts and requires different columns.
300
+ # Default: all defined columns.
301
+ # @option options [String] partials The path for partials lookup.
302
+ # Default: `'datagrid'`.
303
+ # @param grid [Datagrid::Base] grid object
307
304
  # @param [Object] opts (deprecated) pass keyword arguments instead
308
305
  # @param [Hash] options
309
306
  # @return [String] HTML table header tag markup
@@ -321,22 +318,21 @@ module Datagrid
321
318
  # Renders HTML table rows using given grid definition using columns defined in it.
322
319
  # Allows to provide a custom layout for each for in place with a block
323
320
  #
324
- # Supported options:
325
- #
326
- # * <tt>:columns</tt> - Array of column names to display.
327
- # Used in case when same grid class is used in different places
328
- # and needs different columns. Default: all defined columns.
329
- # * <tt>:partials</tt> - Path for partials lookup.
330
- # Default: 'datagrid'.
331
- #
321
+ # @option options [Array<Symbol>] columns An array of column names to display.
322
+ # Use this when the same grid class is used in different contexts and requires different columns.
323
+ # Default: all defined columns.
324
+ # @option options [String] partials The path for partials lookup.
325
+ # Default: `'datagrid'`.
332
326
  # @return [String]
333
- # @example
334
- # = datagrid_rows(grid) # Generic table rows Layout
335
- #
336
- # = datagrid_rows(grid) do |row| # Custom Layout
327
+ # @example Generic table rows Layout
328
+ # = datagrid_rows(grid)
329
+ # @example Custom Layout
330
+ # = datagrid_rows(grid) do |row|
337
331
  # %tr
338
332
  # %td= row.project_name
339
333
  # %td.project-status{class: row.status}= row.status
334
+ # @param [Datagrid::Base] grid datagrid object
335
+ # @param [Array<Object>] assets assets as per defined in grid scope
340
336
  def datagrid_rows(grid, assets = grid.assets, **options, &block)
341
337
  safe_join(
342
338
  assets.map do |asset|
@@ -346,11 +342,12 @@ module Datagrid
346
342
  end
347
343
 
348
344
  # @return [String] renders ordering controls for the given column name
349
- #
350
- # Supported options:
351
- #
352
- # * <tt>:partials</tt> - Path for partials lookup.
353
- # Default: 'datagrid'.
345
+ # @option options [String] partials The path for partials lookup.
346
+ # Default: `'datagrid'`.
347
+ # @param [Datagrid::Base] grid datagrid object
348
+ # @param [Datagrid::Columns::Column] column
349
+ # @deprecated Put necessary code inline inside datagrid/head partial.
350
+ # See built-in partial for example.
354
351
  def datagrid_order_for(grid, column, options = {})
355
352
  Datagrid::Utils.warn_once(<<~MSG)
356
353
  datagrid_order_for is deprecated.
@@ -362,15 +359,11 @@ module Datagrid
362
359
  end
363
360
 
364
361
  # Renders HTML for grid with all filters inputs and labels defined in it
365
- #
366
- # Supported options:
367
- #
368
- # * <tt>:partials</tt> - Path for form partial lookup.
369
- # Default: 'datagrid' results in using `app/views/datagrid/` partials.
370
- # Example: 'datagrid_admin' results in using `app/views/datagrid_admin` partials.
371
- # * <tt>:model</tt> - Datagrid object to be rendedred.
372
- # * All options supported by Rails <tt>form_with</tt> helper
373
- # @param grid [Datagrid] grid object
362
+ # @option options [String] partials Path for form partial lookup.
363
+ # Default: `'datagrid'`, which uses `app/views/datagrid/` partials.
364
+ # Example: `'datagrid_admin'` uses `app/views/datagrid_admin` partials.
365
+ # @option options [Datagrid::Base] model a Datagrid object to be rendered.
366
+ # @option options [Hash] All options supported by Rails `form_with` helper.
374
367
  # @param [Hash{Symbol => Object}] options
375
368
  # @return [String] form HTML tag markup
376
369
  def datagrid_form_with(**options)
@@ -390,7 +383,7 @@ module Datagrid
390
383
  # Default: 'datagrid'.
391
384
  # * All options supported by Rails <tt>form_with</tt> helper
392
385
  # @deprecated Use {#datagrid_form_with} instead.
393
- # @param grid [Datagrid] grid object
386
+ # @param grid [Datagrid::Base] grid object
394
387
  # @param [Hash] options
395
388
  # @return [String] form HTML tag markup
396
389
  def datagrid_form_for(grid, options = {})
@@ -409,25 +402,24 @@ module Datagrid
409
402
 
410
403
  # Provides access to datagrid columns data.
411
404
  # Used in case you want to build html table completelly manually
412
- # @param grid [Datagrid] grid object
405
+ # @param grid [Datagrid::Base] grid object
413
406
  # @param asset [Object] object from grid scope
414
407
  # @param block [Proc] block with Datagrid::Helper::HtmlRow as an argument returning a HTML markup as a String
415
408
  # @param [Hash{Symbol => Object}] options
416
409
  # @return [Datagrid::Helper::HtmlRow, String] captured HTML markup if block given otherwise row object
417
- # @example
418
- # # Suppose that grid has first_name and last_name columns
410
+ # @example Render default layout for row
411
+ # <%= datagrid_row(grid, user, columns: [:first_name, :last_name, :actions]) %>
412
+ # @example Rendering custom layout for `first_name` and `last_name` columns
419
413
  # <%= datagrid_row(grid, user) do |row| %>
420
414
  # <tr>
421
415
  # <td><%= row.first_name %></td>
422
416
  # <td><%= row.last_name %></td>
423
417
  # </tr>
424
418
  # <% end %>
425
- # @example
419
+ # @example Rendering custom layout passing a block
426
420
  # <% row = datagrid_row(grid, user) %>
427
421
  # First Name: <%= row.first_name %>
428
422
  # Last Name: <%= row.last_name %>
429
- # @example
430
- # <%= datagrid_row(grid, user, columns: [:first_name, :last_name, :actions]) %>
431
423
  def datagrid_row(grid, asset, **options, &block)
432
424
  Datagrid::Helper::HtmlRow.new(self, grid, asset, options).tap do |row|
433
425
  return capture(row, &block) if block_given?
@@ -435,7 +427,7 @@ module Datagrid
435
427
  end
436
428
 
437
429
  # Generates an ascending or descending order url for the given column
438
- # @param grid [Datagrid] grid object
430
+ # @param grid [Datagrid::Base] grid object
439
431
  # @param column [Datagrid::Columns::Column, String, Symbol] column name
440
432
  # @param descending [Boolean] order direction, descending if true, otherwise ascending.
441
433
  # @return [String] order layout HTML markup
@@ -475,7 +467,7 @@ module Datagrid
475
467
  # row = datagrid_row(grid, user)
476
468
  # row.class # => Datagrid::Helper::HtmlRow
477
469
  # row.first_name # => "<strong>Bogdan</strong>"
478
- # row.grid # => Grid object
470
+ # row.grid # => Datagrid::Base object
479
471
  # row.asset # => User object
480
472
  # row.each do |value|
481
473
  # puts value
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Datagrid
4
- VERSION = "2.0.0-alpha"
4
+ VERSION = "2.0.0"
5
5
  end
data/lib/datagrid.rb CHANGED
@@ -4,7 +4,6 @@ require "action_view"
4
4
  require "datagrid/configuration"
5
5
  require "datagrid/engine"
6
6
 
7
- # @main README.md
8
7
  module Datagrid
9
8
  # @!visibility private
10
9
  def self.included(base)
@@ -19,15 +18,6 @@ module Datagrid
19
18
  end
20
19
  end
21
20
 
22
- def self.configuration
23
- @configuration ||= Configuration.new
24
- end
25
-
26
- # Configure
27
- def self.configure(&block)
28
- block.call(configuration)
29
- end
30
-
31
21
  class ConfigurationError < StandardError; end
32
22
  class ArgumentError < ::ArgumentError; end
33
23
  class ColumnUnavailableError < StandardError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datagrid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.alpha
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bogdan Gusiev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-19 00:00:00.000000000 Z
11
+ date: 2024-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -33,6 +33,7 @@ extra_rdoc_files:
33
33
  - LICENSE.txt
34
34
  - README.md
35
35
  files:
36
+ - ".yardopts"
36
37
  - CHANGELOG.md
37
38
  - LICENSE.txt
38
39
  - README.md
@@ -93,7 +94,7 @@ licenses:
93
94
  metadata:
94
95
  homepage_uri: https://github.com/bogdan/datagrid
95
96
  bug_tracker_uri: https://github.com/bogdan/datagrid/issues
96
- documentation_uri: https://github.com/bogdan/datagrid/wiki
97
+ documentation_uri: https://rubydoc.info/gems/datagrid
97
98
  changelog_uri: https://github.com/bogdan/datagrid/blob/main/CHANGELOG.md
98
99
  source_code_uri: https://github.com/bogdan/datagrid
99
100
  rubygems_mfa_required: 'true'