katalyst-tables 2.4.0 → 2.5.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: 5324d0bccadf307f48cb2199b8ba9123cb519756dda81cfc0c4c88a4abdfd886
4
- data.tar.gz: ad299f1c8f62454aa3433b00cf4c0b69dacfe59cd6cfe598ab3ea2969cedecde
3
+ metadata.gz: 73c920aef2dfd59566ab635a3b7f573a6bb6cc6b16548e9e198c23d021d571dd
4
+ data.tar.gz: 2b2f8000946bda4871efe3ea052b29ff87fdb43cd1eaf1861fd5cdcb0cd52411
5
5
  SHA512:
6
- metadata.gz: bd4daa1c09acaab6e85cbf787cfafb51303c9f030f26f15ca5f0a593da02c5dd526bf73d07b5cf6a99bfc267f2ea2a17d837e5eae81d607df2ad7788a9a99260
7
- data.tar.gz: 143552907f2bf01ad256fc6e24b06404db1f173fe2ce3f4dca802eacd903fc5ab2f950a7c8c9ff6b086efe00c8838b8eca9dfbb2edcc0cc61d76717f6ca171ac
6
+ metadata.gz: fe91356719cc1f290f90245cc22742c6d6a328818b42c95412baa10f8affe3a2d1e48e7733d439ec185c48bea7c4bc40f8eff9e986375200d37a3a020a063c75
7
+ data.tar.gz: c4a65aac6559e0afb91cfde6f6efc4a4f1d06c1e4679fff3e903c94272b3c8f6f51005bd009013fbca60be7d08eb45edc3fba3e5926da15d28c78da449fa736a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [2.5.0]
4
+
5
+ - Breaking change: use Rails' object lookup path to find row partials
6
+ Previously: Nested::ResourceController would have looked for Nested::Model in
7
+ the controller directory:
8
+ app/views/nested/resources/_nested_model.html+row.erb
9
+ After this change, uses Rails' polymorphic partials logic and looks in the
10
+ model views directory:
11
+ app/views/nested/models/_model.html+row.erb
12
+
3
13
  ## [2.4.0]
4
14
 
5
15
  - Internal refactor of filters to make it easier to add custom extensions
@@ -20,27 +20,24 @@ module Katalyst
20
20
  private
21
21
 
22
22
  def row_proc
23
- @row_proc ||= @__vc_render_in_block || method(:row_partial)
23
+ if @row_proc
24
+ @row_proc
25
+ elsif @__vc_render_in_block
26
+ @row_proc = @__vc_render_in_block
27
+ else
28
+ @row_proc = Proc.new do |row, object|
29
+ row_renderer.render_row(row, object, view_context)
30
+ end
31
+ end
24
32
  end
25
33
 
26
- def row_partial(row, record = nil)
27
- @partial ||= partial_path
28
- @as ||= template_name
29
- render(partial: @partial, variants: [:row], formats: [:html], locals: { @as => record, row: row })
30
- end
31
-
32
- def partial_path
33
- # Collection::Base overwrites param_key for form_with compatibility
34
- items.model_name.param_key.to_s
35
- end
36
-
37
- def template_name
38
- # Collection::Base overwrites param_key for form_with compatibility
39
- items.model_name.param_key.to_sym
40
- end
41
-
42
- def items
43
- collection.respond_to?(:items) ? collection.items : collection
34
+ def row_renderer
35
+ @row_renderer ||= RowRenderer.new(@lookup_context,
36
+ collection: collection,
37
+ as: @as,
38
+ partial: @partial,
39
+ variants: [:row],
40
+ formats: [:html])
44
41
  end
45
42
  end
46
43
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Katalyst
4
+ module Tables
5
+ class RowRenderer < ActionView::PartialRenderer # :nodoc:
6
+ include ObjectRendering
7
+
8
+ def initialize(lookup_context, collection:, partial:, **options)
9
+ super(lookup_context, options)
10
+
11
+ @collection = collection
12
+ @partial = partial
13
+ end
14
+
15
+ def render_row(row, object, view_context)
16
+ @row = row
17
+ @object = object
18
+
19
+ if @partial.blank?
20
+ example = example_for(@collection)
21
+ @partial = partial_path(example, view_context) if example.present?
22
+ end
23
+
24
+ # if we still cannot find an example return an empty table (no header row)
25
+ return "" if @partial.blank?
26
+
27
+ @local_name ||= local_variable(@partial)
28
+ render(@partial, view_context, nil)
29
+ end
30
+
31
+ private
32
+
33
+ def example_for(collection)
34
+ if collection.respond_to?(:items)
35
+ example_for(collection.items)
36
+ elsif collection.respond_to?(:any?) && collection.any?
37
+ collection.first
38
+ elsif collection.respond_to?(:model)
39
+ collection.model.new
40
+ end
41
+ # if none of the above strategies match, return nil
42
+ rescue ArgumentError
43
+ nil # if we could not construct an example without passing arguments, return nil
44
+ end
45
+
46
+ def template_keys(path)
47
+ super + [@local_name, :row]
48
+ end
49
+
50
+ def render_partial_template(view, locals, template, layout, block)
51
+ locals[@local_name || template.variable] = @object
52
+ locals[:row] = @row
53
+ super(view, locals, template, layout, block)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -30,7 +30,7 @@ module Katalyst
30
30
  # - `header`: whether to render the header row (defaults to true, supports options)
31
31
  # - `caption`: whether to render the caption (defaults to true, supports options)
32
32
  # - `object_name`: the name of the object to use for partial rendering (defaults to collection.model_name.i18n_key)
33
- # - `partial`: the name of the partial to use for rendering each row (defaults to collection.model_name.param_key)
33
+ # - `partial`: the name of the partial to use for rendering each row (defaults to to_partial_path on the object)
34
34
  # - `as`: the name of the local variable to use for rendering each row (defaults to collection.model_name.param_key)
35
35
  # In addition to these options, standard HTML attributes can be passed which will be added to the table tag.
36
36
  def initialize(collection:,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-tables
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-08 00:00:00.000000000 Z
11
+ date: 2024-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: katalyst-html-attributes
@@ -57,6 +57,7 @@ files:
57
57
  - app/components/concerns/katalyst/tables/configurable_component.rb
58
58
  - app/components/concerns/katalyst/tables/has_table_content.rb
59
59
  - app/components/concerns/katalyst/tables/orderable.rb
60
+ - app/components/concerns/katalyst/tables/row_renderer.rb
60
61
  - app/components/concerns/katalyst/tables/sortable.rb
61
62
  - app/components/concerns/katalyst/tables/turbo_replaceable.rb
62
63
  - app/components/katalyst/table_component.html.erb
@@ -115,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
118
  requirements: []
118
- rubygems_version: 3.4.10
119
+ rubygems_version: 3.4.19
119
120
  signing_key:
120
121
  specification_version: 4
121
122
  summary: HTML table generator for Rails views