plutonium 0.12.9 → 0.12.11
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 +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,83 @@
|
|
1
|
+
module Plutonium
|
2
|
+
module Core
|
3
|
+
module Fields
|
4
|
+
module Renderers
|
5
|
+
class Base
|
6
|
+
include Plutonium::Core::Renderable
|
7
|
+
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
# Initializes the Base renderer class with a name and user-defined options.
|
11
|
+
#
|
12
|
+
# @param name [String] the name of the renderer.
|
13
|
+
# @param user_options [Hash] user-defined options for the renderer.
|
14
|
+
def initialize(name, **user_options)
|
15
|
+
@name = name
|
16
|
+
@user_options = user_options
|
17
|
+
end
|
18
|
+
|
19
|
+
# Sets the record object on the renderer and merges render options.
|
20
|
+
#
|
21
|
+
# @param record [Object] the record object.
|
22
|
+
# @param render_options [Hash] additional options for rendering.
|
23
|
+
# @return [self] the renderer instance.
|
24
|
+
def with(record:, **render_options)
|
25
|
+
@record = record
|
26
|
+
@render_options = render_options
|
27
|
+
@options = build_options(render_options)
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def label
|
33
|
+
options[:label] || record.class.human_attribute_name(name)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Returns the merged options for rendering.
|
39
|
+
#
|
40
|
+
# @raise [RuntimeError] if accessed before rendering.
|
41
|
+
# @return [Hash] the merged options.
|
42
|
+
def options
|
43
|
+
raise "cannot access #options before calling #with" unless defined?(@options)
|
44
|
+
|
45
|
+
@options
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the record object.
|
49
|
+
#
|
50
|
+
# @raise [RuntimeError] if accessed before rendering.
|
51
|
+
# @return [Object] the record object.
|
52
|
+
def record
|
53
|
+
raise "cannot access #record before calling #with" unless defined?(@record)
|
54
|
+
|
55
|
+
@record
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns the value of the record's attribute corresponding to the renderer's name.
|
59
|
+
#
|
60
|
+
# @return [Object] the value of the attribute.
|
61
|
+
def value
|
62
|
+
record.public_send(name)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns renderer-specific options, can be overridden by subclasses.
|
66
|
+
#
|
67
|
+
# @return [Hash] the renderer-specific options.
|
68
|
+
def renderer_options
|
69
|
+
{}
|
70
|
+
end
|
71
|
+
|
72
|
+
# Builds the options for rendering by merging renderer options, user options, and render options.
|
73
|
+
#
|
74
|
+
# @param render_options [Hash] additional options for rendering.
|
75
|
+
# @return [Hash] the merged options.
|
76
|
+
def build_options(render_options)
|
77
|
+
renderer_options.deep_merge(@user_options).deep_merge(render_options)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -2,24 +2,10 @@ module Plutonium
|
|
2
2
|
module Core
|
3
3
|
module Fields
|
4
4
|
module Renderers
|
5
|
-
class BasicRenderer
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(name, label:, **user_options)
|
9
|
-
@name = name
|
10
|
-
@label = label
|
11
|
-
@user_options = user_options
|
5
|
+
class BasicRenderer < Base
|
6
|
+
def render
|
7
|
+
display_field value:, **options
|
12
8
|
end
|
13
|
-
|
14
|
-
def render(view_context, record)
|
15
|
-
view_context.display_field value: record.send(name), **options
|
16
|
-
end
|
17
|
-
|
18
|
-
def options = @options ||= renderer_options.deep_merge(@user_options)
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def renderer_options = {}
|
23
9
|
end
|
24
10
|
end
|
25
11
|
end
|
@@ -17,7 +17,6 @@ module Plutonium
|
|
17
17
|
|
18
18
|
def self.for_resource_attribute(resource_class, attr_name, **options)
|
19
19
|
type = nil
|
20
|
-
options[:label] ||= resource_class.human_attribute_name(attr_name)
|
21
20
|
|
22
21
|
if (attachment = resource_class.try(:reflect_on_attachment, attr_name))
|
23
22
|
type = :attachment
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Plutonium
|
2
|
+
module Core
|
3
|
+
module Renderable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
delegate_missing_to :@view_context
|
8
|
+
end
|
9
|
+
|
10
|
+
def render_in(view_context)
|
11
|
+
@view_context = view_context
|
12
|
+
render
|
13
|
+
end
|
14
|
+
|
15
|
+
def render
|
16
|
+
raise NotImplementedError, "#{self.class}#render"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -73,7 +73,7 @@ module Plutonium
|
|
73
73
|
|
74
74
|
# Fallback to retrieving the value from a predefined list
|
75
75
|
%i[to_label name title].each do |method|
|
76
|
-
name = obj.
|
76
|
+
name = obj.public_send(method) if obj.respond_to?(method)
|
77
77
|
return name if name.present?
|
78
78
|
end
|
79
79
|
|
@@ -69,7 +69,7 @@ module Plutonium
|
|
69
69
|
override_entity_scoping_params(input_params)
|
70
70
|
override_parent_params(input_params)
|
71
71
|
|
72
|
-
current_presenter.
|
72
|
+
current_presenter.defined_field_inputs_for(*permitted_attributes).collect_all(input_params)
|
73
73
|
end
|
74
74
|
|
75
75
|
# Returns the resource parameter key
|
@@ -63,7 +63,7 @@ module Plutonium
|
|
63
63
|
|
64
64
|
nested_attribute_options_class = nested_attribute_options&.[](:class)
|
65
65
|
if nested_attribute_options_class.nil? && model_class.nil?
|
66
|
-
raise ArgumentError, "model_class is required if your field is not an association or is polymorphic"
|
66
|
+
raise ArgumentError, "model_class is required if your field is not an association or is polymorphic. also ensure you have called `accepts_nested_attributes_for :#{name}`"
|
67
67
|
end
|
68
68
|
model_class ||= nested_attribute_options_class
|
69
69
|
|
@@ -83,7 +83,7 @@ module Plutonium
|
|
83
83
|
)
|
84
84
|
yield input if block_given?
|
85
85
|
|
86
|
-
|
86
|
+
define_field_input name, input:
|
87
87
|
end
|
88
88
|
|
89
89
|
# Determines the limit for a nested input
|
@@ -92,7 +92,7 @@ module Plutonium
|
|
92
92
|
# @param [Integer, nil] nested_attribute_limit The limit from nested attributes
|
93
93
|
# @return [Integer, nil] The determined limit
|
94
94
|
def determine_nested_input_limit(macro, option_limit, nested_attribute_limit)
|
95
|
-
if
|
95
|
+
if %i[belongs_to has_one].include? macro
|
96
96
|
1
|
97
97
|
elsif option_limit
|
98
98
|
option_limit
|
@@ -5,7 +5,7 @@ module Plutonium
|
|
5
5
|
end
|
6
6
|
|
7
7
|
class Query
|
8
|
-
include Plutonium::Core::Definers::
|
8
|
+
include Plutonium::Core::Definers::FieldInputDefiner
|
9
9
|
|
10
10
|
# Applies the query to the given scope using the provided parameters.
|
11
11
|
#
|
@@ -65,7 +65,7 @@ module Plutonium
|
|
65
65
|
# @param params [Hash] The parameters for the query.
|
66
66
|
# @return [Object] The modified scope.
|
67
67
|
def apply_internal(scope, params)
|
68
|
-
scope.
|
68
|
+
scope.public_send(name, **params)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -215,7 +215,7 @@ module Plutonium
|
|
215
215
|
end
|
216
216
|
|
217
217
|
sort_definitions[name] = build_query(body) do |query|
|
218
|
-
query.
|
218
|
+
query.define_field_input :direction
|
219
219
|
end
|
220
220
|
end
|
221
221
|
|
@@ -224,7 +224,7 @@ module Plutonium
|
|
224
224
|
# @param body [Proc, Symbol] The body of the search filter.
|
225
225
|
def define_search(body)
|
226
226
|
@search_filter = build_query(body) do |query|
|
227
|
-
query.
|
227
|
+
query.define_field_input :search
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
@@ -22,7 +22,7 @@ module Plutonium
|
|
22
22
|
record_association = klass.find_association_to_self(record)
|
23
23
|
if record_association
|
24
24
|
# TODO: add a warning here about a potentially poor performing query
|
25
|
-
return where(id: record.
|
25
|
+
return where(id: record.public_send(record_association.name))
|
26
26
|
end
|
27
27
|
|
28
28
|
klass.raise_association_error(record, named_scope)
|
data/lib/plutonium/version.rb
CHANGED
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plutonium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Froelich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|
@@ -208,6 +208,7 @@ executables:
|
|
208
208
|
extensions: []
|
209
209
|
extra_rdoc_files: []
|
210
210
|
files:
|
211
|
+
- "# Plutonium: The pre-alpha demo.md"
|
211
212
|
- ".node-version"
|
212
213
|
- ".rspec"
|
213
214
|
- ".ruby-version"
|
@@ -877,6 +878,15 @@ files:
|
|
877
878
|
- lib/generators/pu/docker/install/templates/docker-compose.yml
|
878
879
|
- lib/generators/pu/eject/layout/layout_generator.rb
|
879
880
|
- lib/generators/pu/eject/shell/shell_generator.rb
|
881
|
+
- lib/generators/pu/field/input/input_generator.rb
|
882
|
+
- lib/generators/pu/field/input/templates/.keep
|
883
|
+
- lib/generators/pu/field/input/templates/input.rb.tt
|
884
|
+
- lib/generators/pu/field/renderer/renderer_generator.rb
|
885
|
+
- lib/generators/pu/field/renderer/templates/.keep
|
886
|
+
- lib/generators/pu/field/renderer/templates/renderer.rb.tt
|
887
|
+
- lib/generators/pu/gem/annotate/annotate_generator.rb
|
888
|
+
- lib/generators/pu/gem/annotate/templates/.keep
|
889
|
+
- lib/generators/pu/gem/annotate/templates/lib/tasks/auto_annotate_models.rake
|
880
890
|
- lib/generators/pu/gem/dotenv/dotenv_generator.rb
|
881
891
|
- lib/generators/pu/gem/dotenv/templates/.env
|
882
892
|
- lib/generators/pu/gem/dotenv/templates/.env.local
|
@@ -1029,7 +1039,7 @@ files:
|
|
1029
1039
|
- lib/plutonium/core/actions/interactive_action.rb
|
1030
1040
|
- lib/plutonium/core/actions/new_action.rb
|
1031
1041
|
- lib/plutonium/core/actions/show_action.rb
|
1032
|
-
- lib/plutonium/core/associations/renderers/
|
1042
|
+
- lib/plutonium/core/associations/renderers/base.rb
|
1033
1043
|
- lib/plutonium/core/associations/renderers/factory.rb
|
1034
1044
|
- lib/plutonium/core/associations/renderers/has_many_renderer.rb
|
1035
1045
|
- lib/plutonium/core/autodiscovery/association_renderer_discoverer.rb
|
@@ -1047,8 +1057,8 @@ files:
|
|
1047
1057
|
- lib/plutonium/core/definers/action_definer.rb
|
1048
1058
|
- lib/plutonium/core/definers/association_renderer_definer.rb
|
1049
1059
|
- lib/plutonium/core/definers/field_definer.rb
|
1050
|
-
- lib/plutonium/core/definers/
|
1051
|
-
- lib/plutonium/core/definers/
|
1060
|
+
- lib/plutonium/core/definers/field_input_definer.rb
|
1061
|
+
- lib/plutonium/core/definers/field_renderer_definer.rb
|
1052
1062
|
- lib/plutonium/core/fields/inputs/attachment_input.rb
|
1053
1063
|
- lib/plutonium/core/fields/inputs/base.rb
|
1054
1064
|
- lib/plutonium/core/fields/inputs/belongs_to_association_input.rb
|
@@ -1064,8 +1074,10 @@ files:
|
|
1064
1074
|
- lib/plutonium/core/fields/inputs/simple_form_input.rb
|
1065
1075
|
- lib/plutonium/core/fields/renderers/association_renderer.rb
|
1066
1076
|
- lib/plutonium/core/fields/renderers/attachment_renderer.rb
|
1077
|
+
- lib/plutonium/core/fields/renderers/base.rb
|
1067
1078
|
- lib/plutonium/core/fields/renderers/basic_renderer.rb
|
1068
1079
|
- lib/plutonium/core/fields/renderers/factory.rb
|
1080
|
+
- lib/plutonium/core/renderable.rb
|
1069
1081
|
- lib/plutonium/core/ui/collection.rb
|
1070
1082
|
- lib/plutonium/core/ui/detail.rb
|
1071
1083
|
- lib/plutonium/core/ui/form.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Plutonium
|
2
|
-
module Core
|
3
|
-
module Associations
|
4
|
-
module Renderers
|
5
|
-
class BasicRenderer
|
6
|
-
attr_reader :name, :label, :reflection, :user_options
|
7
|
-
|
8
|
-
def initialize(name, label:, reflection:, **user_options)
|
9
|
-
@name = name
|
10
|
-
@label = label
|
11
|
-
@reflection = reflection
|
12
|
-
@user_options = user_options
|
13
|
-
end
|
14
|
-
|
15
|
-
def render(view_context, record)
|
16
|
-
raise NotImplementedError
|
17
|
-
end
|
18
|
-
|
19
|
-
def options = @options ||= renderer_options.deep_merge(@user_options)
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def renderer_options = {}
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|