datagrid 2.0.0.pre.alpha → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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'