plutonium 0.12.9 → 0.12.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/# Plutonium: The pre-alpha demo.md +218 -0
- data/app/views/components/form/form_component.html.erb +1 -3
- data/app/views/components/interactive_action_form/interactive_action_form_component.html.erb +5 -7
- data/app/views/components/nested_resource_form_fields/nested_resource_form_fields_component.html.erb +2 -2
- data/app/views/components/table_search_input/table_search_input_component.html.erb +8 -2
- data/app/views/resource/_interactive_resource_action_form.html.erb +1 -1
- data/app/views/resource/_resource_details.html.erb +9 -2
- data/app/views/resource/_resource_table.html.erb +9 -1
- data/lib/generators/pu/core/assets/templates/tailwind.config.js +2 -0
- data/lib/generators/pu/core/install/install_generator.rb +1 -1
- data/lib/generators/pu/core/install/templates/config/initializers/plutonium.rb +4 -0
- data/lib/generators/pu/eject/layout/layout_generator.rb +3 -2
- data/lib/generators/pu/eject/shell/shell_generator.rb +3 -2
- data/lib/generators/pu/field/input/input_generator.rb +32 -0
- data/lib/generators/pu/field/input/templates/.keep +0 -0
- data/lib/generators/pu/field/input/templates/input.rb.tt +15 -0
- data/lib/generators/pu/field/renderer/renderer_generator.rb +32 -0
- data/lib/generators/pu/field/renderer/templates/.keep +0 -0
- data/lib/generators/pu/field/renderer/templates/renderer.rb.tt +9 -0
- data/lib/generators/pu/gem/annotate/annotate_generator.rb +22 -0
- data/lib/generators/pu/gem/annotate/templates/.keep +0 -0
- data/lib/generators/pu/gem/annotate/templates/lib/tasks/auto_annotate_models.rake +59 -0
- data/lib/plutonium/core/actions/interactive_action.rb +2 -2
- data/lib/plutonium/core/associations/renderers/base.rb +77 -0
- data/lib/plutonium/core/associations/renderers/factory.rb +0 -2
- data/lib/plutonium/core/associations/renderers/has_many_renderer.rb +6 -4
- data/lib/plutonium/core/controllers/crud_actions.rb +1 -1
- data/lib/plutonium/core/controllers/presentable.rb +3 -3
- data/lib/plutonium/core/definers/field_definer.rb +4 -4
- data/lib/plutonium/core/definers/{input_definer.rb → field_input_definer.rb} +4 -4
- data/lib/plutonium/core/definers/{renderer_definer.rb → field_renderer_definer.rb} +10 -10
- data/lib/plutonium/core/fields/inputs/attachment_input.rb +2 -2
- data/lib/plutonium/core/fields/inputs/base.rb +76 -10
- data/lib/plutonium/core/fields/inputs/checkbox_input.rb +3 -1
- data/lib/plutonium/core/fields/inputs/date_time_input.rb +3 -1
- data/lib/plutonium/core/fields/inputs/nested_input.rb +36 -21
- data/lib/plutonium/core/fields/inputs/noop_input.rb +1 -4
- data/lib/plutonium/core/fields/inputs/polymorphic_belongs_to_association_input.rb +8 -7
- data/lib/plutonium/core/fields/inputs/simple_form_association_input.rb +4 -5
- data/lib/plutonium/core/fields/inputs/simple_form_input.rb +2 -3
- data/lib/plutonium/core/fields/renderers/association_renderer.rb +11 -5
- data/lib/plutonium/core/fields/renderers/attachment_renderer.rb +3 -10
- data/lib/plutonium/core/fields/renderers/base.rb +83 -0
- data/lib/plutonium/core/fields/renderers/basic_renderer.rb +3 -17
- data/lib/plutonium/core/fields/renderers/factory.rb +0 -1
- data/lib/plutonium/core/renderable.rb +20 -0
- data/lib/plutonium/helpers/display_helper.rb +1 -1
- data/lib/plutonium/resource/controller.rb +1 -1
- data/lib/plutonium/resource/policy.rb +1 -1
- data/lib/plutonium/resource/presenter.rb +3 -3
- data/lib/plutonium/resource/query_object.rb +4 -4
- data/lib/plutonium/resource/record.rb +1 -1
- data/lib/plutonium/simple_form/attachment_component.rb +1 -1
- data/lib/plutonium/version.rb +1 -1
- data/package.json +1 -1
- metadata +17 -5
- data/lib/plutonium/core/associations/renderers/basic_renderer.rb +0 -28
@@ -0,0 +1,77 @@
|
|
1
|
+
module Plutonium
|
2
|
+
module Core
|
3
|
+
module Associations
|
4
|
+
module Renderers
|
5
|
+
class Base
|
6
|
+
include Plutonium::Core::Renderable
|
7
|
+
|
8
|
+
attr_reader :name, :reflection
|
9
|
+
|
10
|
+
def initialize(name, reflection:, **user_options)
|
11
|
+
@name = name
|
12
|
+
@reflection = reflection
|
13
|
+
@user_options = user_options
|
14
|
+
end
|
15
|
+
|
16
|
+
# Sets the record object on the renderer and merges render options.
|
17
|
+
#
|
18
|
+
# @param record [Object] the record object.
|
19
|
+
# @param render_options [Hash] additional options for rendering.
|
20
|
+
# @return [self] the renderer instance.
|
21
|
+
def with(record:, **render_options)
|
22
|
+
@record = record
|
23
|
+
@render_options = render_options
|
24
|
+
@options = build_options(render_options)
|
25
|
+
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Returns the merged options for rendering.
|
32
|
+
#
|
33
|
+
# @raise [RuntimeError] if accessed before rendering.
|
34
|
+
# @return [Hash] the merged options.
|
35
|
+
def options
|
36
|
+
raise "cannot access #options before calling #with" unless defined?(@options)
|
37
|
+
|
38
|
+
@options
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns the record object.
|
42
|
+
#
|
43
|
+
# @raise [RuntimeError] if accessed before rendering.
|
44
|
+
# @return [Object] the record object.
|
45
|
+
def record
|
46
|
+
raise "cannot access #record before calling #with" unless defined?(@record)
|
47
|
+
|
48
|
+
@record
|
49
|
+
end
|
50
|
+
|
51
|
+
def renderer_options
|
52
|
+
{}
|
53
|
+
end
|
54
|
+
|
55
|
+
def label
|
56
|
+
options[:label] || record.class.human_attribute_name(name)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns the value of the record's attribute corresponding to the renderer's name.
|
60
|
+
#
|
61
|
+
# @return [Object] the value of the attribute.
|
62
|
+
def value
|
63
|
+
record.public_send(name)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Builds the options for rendering by merging renderer options, user options, and render options.
|
67
|
+
#
|
68
|
+
# @param render_options [Hash] additional options for rendering.
|
69
|
+
# @return [Hash] the merged options.
|
70
|
+
def build_options(render_options)
|
71
|
+
renderer_options.deep_merge(@user_options).deep_merge(render_options)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -17,8 +17,6 @@ module Plutonium
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.for_resource_association(resource_class, attr_name, **options)
|
20
|
-
options[:label] ||= resource_class.human_attribute_name(attr_name)
|
21
|
-
|
22
20
|
association = resource_class.try(:reflect_on_association, attr_name)
|
23
21
|
raise ArgumentError, "#{attr_name} is not a valid association of #{resource_class}" unless association.present?
|
24
22
|
raise ArgumentError, "#{association.klass} does is not a resource record" unless association.klass.include?(Plutonium::Resource::Record)
|
@@ -2,12 +2,14 @@ module Plutonium
|
|
2
2
|
module Core
|
3
3
|
module Associations
|
4
4
|
module Renderers
|
5
|
-
class HasManyRenderer <
|
6
|
-
def render
|
7
|
-
|
5
|
+
class HasManyRenderer < Base
|
6
|
+
def render
|
7
|
+
render_component(
|
8
|
+
:has_many_panel,
|
8
9
|
title: label,
|
9
|
-
src:
|
10
|
+
src: resource_url_for(reflection.klass, parent: record),
|
10
11
|
**options
|
12
|
+
)
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -15,7 +15,7 @@ module Plutonium
|
|
15
15
|
@search_object = current_query_object
|
16
16
|
base_query = policy_scope(resource_class)
|
17
17
|
base_query = @search_object.apply(base_query)
|
18
|
-
base_query = base_query.
|
18
|
+
base_query = base_query.public_send(params[:scope].to_sym) if params[:scope].present?
|
19
19
|
@pagy, @resource_records = pagy base_query
|
20
20
|
@collection = build_collection
|
21
21
|
|
@@ -32,7 +32,7 @@ module Plutonium
|
|
32
32
|
Plutonium::Core::Ui::Collection.new(
|
33
33
|
resource_class:,
|
34
34
|
records: @resource_records,
|
35
|
-
fields: current_presenter.
|
35
|
+
fields: current_presenter.defined_field_renderers_for(*presentable_attributes),
|
36
36
|
actions: current_presenter.actions,
|
37
37
|
pager: @pagy,
|
38
38
|
search_object: @search_object
|
@@ -43,7 +43,7 @@ module Plutonium
|
|
43
43
|
Plutonium::Core::Ui::Detail.new(
|
44
44
|
resource_class:,
|
45
45
|
record: resource_record,
|
46
|
-
fields: current_presenter.
|
46
|
+
fields: current_presenter.defined_field_renderers_for(*presentable_attributes),
|
47
47
|
associations: current_presenter.defined_association_renderers_for(*permitted_associations),
|
48
48
|
actions: current_presenter.actions
|
49
49
|
)
|
@@ -52,7 +52,7 @@ module Plutonium
|
|
52
52
|
def build_form
|
53
53
|
Plutonium::Core::Ui::Form.new(
|
54
54
|
record: resource_record,
|
55
|
-
inputs: current_presenter.
|
55
|
+
inputs: current_presenter.defined_field_inputs_for(*presentable_attributes)
|
56
56
|
)
|
57
57
|
end
|
58
58
|
|
@@ -4,14 +4,14 @@ module Plutonium
|
|
4
4
|
module FieldDefiner
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
include
|
8
|
-
include
|
7
|
+
include FieldInputDefiner
|
8
|
+
include FieldRendererDefiner
|
9
9
|
|
10
10
|
private
|
11
11
|
|
12
12
|
def define_field(name, type: nil, input: nil, renderer: nil, input_options: {}, renderer_options: {})
|
13
|
-
|
14
|
-
|
13
|
+
define_field_input(name, type:, input:, **input_options)
|
14
|
+
define_field_renderer(name, type:, renderer:, **renderer_options)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Plutonium
|
2
2
|
module Core
|
3
3
|
module Definers
|
4
|
-
module
|
4
|
+
module FieldInputDefiner
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
include Plutonium::Core::Autodiscovery::InputDiscoverer
|
7
7
|
|
@@ -47,14 +47,14 @@ module Plutonium
|
|
47
47
|
attr_reader :hash
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def defined_field_inputs_for(*names)
|
51
51
|
(names - input_definitions.keys).each do |name|
|
52
|
-
|
52
|
+
define_field_input(name, input: autodiscover_input(name))
|
53
53
|
end
|
54
54
|
input_definitions.slice(*names)
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
57
|
+
def define_field_input(name, input: nil, type: nil, **options)
|
58
58
|
input_definitions[name] = if input.present?
|
59
59
|
input
|
60
60
|
elsif type.present?
|
@@ -1,23 +1,23 @@
|
|
1
1
|
module Plutonium
|
2
2
|
module Core
|
3
3
|
module Definers
|
4
|
-
module
|
4
|
+
module FieldRendererDefiner
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
include Plutonium::Core::Autodiscovery::RendererDiscoverer
|
7
7
|
|
8
|
-
def
|
9
|
-
(names -
|
10
|
-
|
8
|
+
def defined_field_renderers_for(*names)
|
9
|
+
(names - field_renderer_definitions.keys).each do |name|
|
10
|
+
define_field_renderer(name, renderer: autodiscover_renderer(name))
|
11
11
|
end
|
12
|
-
|
12
|
+
field_renderer_definitions.slice(*names)
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
def
|
17
|
+
def field_renderer_definitions = @field_renderer_definitions ||= {}
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def define_field_renderer(name, renderer: nil, type: nil, **options)
|
20
|
+
field_renderer_definitions[name] = if renderer.present?
|
21
21
|
renderer
|
22
22
|
elsif type.present?
|
23
23
|
Plutonium::Core::Fields::Renderers::Factory.build(name, type:, **options)
|
@@ -28,8 +28,8 @@ module Plutonium
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
32
|
-
|
31
|
+
def field_renderer_defined?(name)
|
32
|
+
field_renderer_definitions.key? name
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -5,9 +5,9 @@ module Plutonium
|
|
5
5
|
class AttachmentInput < SimpleFormInput
|
6
6
|
attr_reader :reflection
|
7
7
|
|
8
|
-
def initialize(name, reflection:, **
|
8
|
+
def initialize(name, reflection:, **options)
|
9
9
|
@reflection = reflection
|
10
|
-
super(name, **
|
10
|
+
super(name, **options)
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
@@ -3,17 +3,23 @@ module Plutonium
|
|
3
3
|
module Fields
|
4
4
|
module Inputs
|
5
5
|
class Base
|
6
|
-
|
6
|
+
include Plutonium::Core::Renderable
|
7
7
|
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
# Initializes the Base input class with a name and user-defined options.
|
11
|
+
#
|
12
|
+
# @param name [String] the name of the input field.
|
13
|
+
# @param user_options [Hash] user-defined options for the input field.
|
8
14
|
def initialize(name, **user_options)
|
9
15
|
@name = name
|
10
16
|
@user_options = user_options
|
11
17
|
end
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
# Collects parameters matching the input field's name with multi-parameter attributes.
|
20
|
+
#
|
21
|
+
# @param params [Hash] the parameters to collect from.
|
22
|
+
# @return [Hash] the collected parameters.
|
17
23
|
def collect(params)
|
18
24
|
# Handles multi parameter attributes
|
19
25
|
# https://www.cookieshq.co.uk/posts/rails-spelunking-date-select
|
@@ -26,17 +32,77 @@ module Plutonium
|
|
26
32
|
# - parameter(1i)
|
27
33
|
# - parameter(2f)
|
28
34
|
regex = /^#{param}(\(\d+[if]?\))?$/
|
29
|
-
keys = params.select { |key,
|
35
|
+
keys = params.select { |key, _| regex.match?(key) }.keys
|
30
36
|
params.slice(*keys)
|
31
37
|
end
|
32
38
|
|
33
|
-
|
39
|
+
# Sets the form and record objects on the input field.
|
40
|
+
#
|
41
|
+
# @param form [Object] the form object.
|
42
|
+
# @param record [Object] the record object.
|
43
|
+
# @param render_options [Hash] additional options for rendering.
|
44
|
+
def with(form:, record:, **render_options)
|
45
|
+
@form = form
|
46
|
+
@record = record
|
47
|
+
@render_options = render_options
|
48
|
+
@options = build_options(render_options)
|
49
|
+
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Returns input-specific options, can be overridden by subclasses.
|
56
|
+
#
|
57
|
+
# @return [Hash] the input-specific options.
|
58
|
+
def input_options
|
59
|
+
{}
|
60
|
+
end
|
61
|
+
|
62
|
+
# Returns the parameter name for the input field.
|
63
|
+
#
|
64
|
+
# @return [String] the parameter name.
|
65
|
+
def param
|
66
|
+
name
|
67
|
+
end
|
68
|
+
|
69
|
+
# Raises an error if #options is accessed before rendering.
|
70
|
+
#
|
71
|
+
# @raise [RuntimeError] if accessed before rendering.
|
72
|
+
# @return [Hash] the rendering options.
|
73
|
+
def options
|
74
|
+
raise "cannot access #options before calling #with" unless defined?(@options)
|
34
75
|
|
35
|
-
|
76
|
+
@options
|
77
|
+
end
|
36
78
|
|
37
|
-
|
79
|
+
# Raises an error if #form is accessed before rendering.
|
80
|
+
#
|
81
|
+
# @raise [RuntimeError] if accessed before rendering.
|
82
|
+
# @return [Object] the form object.
|
83
|
+
def form
|
84
|
+
raise "cannot access #form before calling #with" unless defined?(@form)
|
85
|
+
|
86
|
+
@form
|
87
|
+
end
|
38
88
|
|
39
|
-
|
89
|
+
# Raises an error if #record is accessed before rendering.
|
90
|
+
#
|
91
|
+
# @raise [RuntimeError] if accessed before rendering.
|
92
|
+
# @return [Object] the record object.
|
93
|
+
def record
|
94
|
+
raise "cannot access #record before calling #with" unless defined?(@record)
|
95
|
+
|
96
|
+
@record
|
97
|
+
end
|
98
|
+
|
99
|
+
# Builds the options for rendering by merging input options, user options, and render options.
|
100
|
+
#
|
101
|
+
# @param render_options [Hash] additional options for rendering.
|
102
|
+
# @return [Hash] the merged options.
|
103
|
+
def build_options(render_options)
|
104
|
+
input_options.deep_merge(@user_options).deep_merge(render_options)
|
105
|
+
end
|
40
106
|
end
|
41
107
|
end
|
42
108
|
end
|
@@ -3,52 +3,67 @@ module Plutonium
|
|
3
3
|
module Fields
|
4
4
|
module Inputs
|
5
5
|
class NestedInput < Base
|
6
|
-
include Plutonium::Core::Definers::
|
6
|
+
include Plutonium::Core::Definers::FieldInputDefiner
|
7
7
|
|
8
8
|
attr_reader :inputs, :resource_class
|
9
9
|
|
10
|
-
def initialize(name, inputs:, resource_class:, allow_destroy:, update_only:, limit:, **
|
10
|
+
def initialize(name, inputs:, resource_class:, allow_destroy:, update_only:, limit:, **options)
|
11
11
|
@inputs = inputs
|
12
12
|
@resource_class = resource_class
|
13
13
|
@allow_destroy = allow_destroy
|
14
14
|
@update_only = update_only
|
15
15
|
@limit = limit
|
16
16
|
|
17
|
-
super(name, **
|
17
|
+
super(name, **options)
|
18
18
|
end
|
19
19
|
|
20
|
-
def render
|
21
|
-
|
22
|
-
view_context.render_component :nested_resource_form_fields, form: f, **opts
|
20
|
+
def render
|
21
|
+
render_component :nested_resource_form_fields, form:, **options
|
23
22
|
end
|
24
23
|
|
25
24
|
def collect(params)
|
25
|
+
nested_params = params[param] || {}
|
26
|
+
attributes = (nested_params.keys.first == "0") ? collect_indexed_attributes(nested_params) : collect_single_attributes(nested_params)
|
27
|
+
{param => attributes}
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def collect_single_attributes(params)
|
33
|
+
collected = defined_inputs.collect_all(params)
|
34
|
+
collected[:id] = params[:id] if params.key?(:id) && !@update_only
|
35
|
+
collected[:_destroy] = params[:_destroy] if @allow_destroy
|
36
|
+
collected
|
37
|
+
end
|
38
|
+
|
39
|
+
def collect_indexed_attributes(params)
|
26
40
|
attributes = {}
|
27
|
-
params
|
41
|
+
params.each do |index, nested_params|
|
28
42
|
collected = defined_inputs.collect_all(nested_params)
|
29
43
|
collected[:id] = nested_params[:id] if nested_params.key?(:id) && !@update_only
|
30
44
|
collected[:_destroy] = nested_params[:_destroy] if @allow_destroy
|
31
45
|
attributes[index] = collected
|
32
46
|
end
|
33
|
-
|
34
|
-
{param => attributes}
|
47
|
+
attributes
|
35
48
|
end
|
36
49
|
|
37
|
-
|
38
|
-
|
39
|
-
|
50
|
+
def param
|
51
|
+
:"#{name}_attributes"
|
52
|
+
end
|
40
53
|
|
41
|
-
def input_options
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
54
|
+
def input_options
|
55
|
+
{
|
56
|
+
name:,
|
57
|
+
resource_class:,
|
58
|
+
allow_destroy: @allow_destroy,
|
59
|
+
update_only: @update_only,
|
60
|
+
limit: @limit,
|
61
|
+
inputs: defined_inputs
|
62
|
+
}
|
63
|
+
end
|
49
64
|
|
50
65
|
def defined_inputs
|
51
|
-
@defined_inputs ||=
|
66
|
+
@defined_inputs ||= defined_field_inputs_for(*inputs)
|
52
67
|
end
|
53
68
|
end
|
54
69
|
end
|
@@ -3,9 +3,8 @@ module Plutonium
|
|
3
3
|
module Fields
|
4
4
|
module Inputs
|
5
5
|
class PolymorphicBelongsToAssociationInput < SimpleFormAssociationInput
|
6
|
-
def render
|
7
|
-
|
8
|
-
f.input param, **opts
|
6
|
+
def render
|
7
|
+
form.input param, **options
|
9
8
|
end
|
10
9
|
|
11
10
|
private
|
@@ -15,12 +14,11 @@ module Plutonium
|
|
15
14
|
end
|
16
15
|
|
17
16
|
def input_options
|
17
|
+
collection = @user_options.delete(:collection).presence || associated_classes
|
18
18
|
{
|
19
19
|
as: :grouped_select,
|
20
|
+
collection:,
|
20
21
|
label: reflection.name.to_s.humanize,
|
21
|
-
collection: associated_classes.map { |klass|
|
22
|
-
[klass.name, klass.all]
|
23
|
-
}.to_h,
|
24
22
|
group_label_method: :first,
|
25
23
|
group_method: :last, include_blank: "Select One"
|
26
24
|
}
|
@@ -38,7 +36,10 @@ module Plutonium
|
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
41
|
-
|
39
|
+
|
40
|
+
associated_classes.map { |klass|
|
41
|
+
[klass.name, klass.all]
|
42
|
+
}.to_h
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
@@ -5,14 +5,13 @@ module Plutonium
|
|
5
5
|
class SimpleFormAssociationInput < Base
|
6
6
|
attr_reader :reflection
|
7
7
|
|
8
|
-
def initialize(name, reflection:, **
|
8
|
+
def initialize(name, reflection:, **)
|
9
9
|
@reflection = reflection
|
10
|
-
super(name, **
|
10
|
+
super(name, **)
|
11
11
|
end
|
12
12
|
|
13
|
-
def render
|
14
|
-
|
15
|
-
f.association name, **opts
|
13
|
+
def render
|
14
|
+
form.association name, **options
|
16
15
|
end
|
17
16
|
|
18
17
|
private
|
@@ -2,7 +2,7 @@ module Plutonium
|
|
2
2
|
module Core
|
3
3
|
module Fields
|
4
4
|
module Renderers
|
5
|
-
class AssociationRenderer <
|
5
|
+
class AssociationRenderer < Base
|
6
6
|
attr_reader :reflection
|
7
7
|
|
8
8
|
def initialize(name, reflection:, **user_options)
|
@@ -10,10 +10,16 @@ module Plutonium
|
|
10
10
|
super(name, **user_options)
|
11
11
|
end
|
12
12
|
|
13
|
-
def render
|
14
|
-
value
|
15
|
-
|
16
|
-
|
13
|
+
def render
|
14
|
+
display_field value:, **options
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def renderer_options
|
20
|
+
{
|
21
|
+
helper: value.class.include?(Plutonium::Resource::Record) ? :display_association_value : :display_name_of
|
22
|
+
}
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
@@ -2,16 +2,9 @@ module Plutonium
|
|
2
2
|
module Core
|
3
3
|
module Fields
|
4
4
|
module Renderers
|
5
|
-
class AttachmentRenderer <
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(name, reflection:, **user_options)
|
9
|
-
@reflection = reflection
|
10
|
-
super(name, **user_options)
|
11
|
-
end
|
12
|
-
|
13
|
-
def render(view_context, record)
|
14
|
-
view_context.attachment_preview record.send(name), **options
|
5
|
+
class AttachmentRenderer < AssociationRenderer
|
6
|
+
def render
|
7
|
+
attachment_preview value, **options
|
15
8
|
end
|
16
9
|
|
17
10
|
private
|