base_editing_bootstrap 1.10.0 → 1.11.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: 489e2ffcb61b916547f555b4b80a90e9d542c0738afb83dd104418e29865a542
4
- data.tar.gz: 3f7cba0e07451401983eeef463ff0a18ad97f2aee1a5c16a836980d4e77e4ca3
3
+ metadata.gz: 3a94db145cbc0c8225a28489ba2c163a53d576e6baae96e294fc3b9d1db7e606
4
+ data.tar.gz: 5e7f937da0131bb04457475ccaf2885a524faf002ec4917200957e6481bdccf2
5
5
  SHA512:
6
- metadata.gz: 2e62893f671fe1ef62e0c9fe52cef3c104fdab7646bb1a03b774ae9d9c5650f288e7329b5e4c5e29fda3f935c0e3706a1af8ecb90b220a16fa1f6f5e8759e726
7
- data.tar.gz: 52055575f2459020e2963d8af95da7c904c3301cf8c4127685a1529f062ab884d9fa77fe59b22b3ff20234e23b5ee0d5db84ae9cfc472cda58ea7748cf63ec9c
6
+ metadata.gz: f3f4e4df8738595c80519a96149dddced30cbb21cbffb3b606cc3d7f90c30ba7c1eff81d00fcaf763759be06d738a906c4d37af7ba67d16668e3bf8b1537522b
7
+ data.tar.gz: 7e2f175ed20a1cc3e80f5f23c3c66b9bc0fd7ebf32b6acecb1a7e06876a39c401e878c1318bf761c64b52ec65c597979a95c5e07c9196682f0bf5f561a4ffc61
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
  All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
3
3
 
4
4
  - - -
5
+ ## 1.11.0 - 2025-09-15
6
+ #### Bug Fixes
7
+ - Simplify gem push command in cog.toml - (ab70061) - Marino Bonetti
8
+ #### Features
9
+ - Add nested_attributes for has_one - (d76422c) - Marino Bonetti
10
+
11
+ - - -
12
+
5
13
  ## 1.10.0 - 2025-09-12
6
14
  #### Features
7
15
  - Automatic Nested attributes - (dad38de) - Marino Bonetti
data/README.md CHANGED
@@ -210,9 +210,13 @@ Utilizzo per modello base, in questo esempio prendiamo come modello Post come es
210
210
  Di default questo metodo utilizza il semplice #to_s
211
211
  Ha anche un metodo per il valore da utilizzare come chiave, di default viene dedotto dalla reflection
212
212
  come anche il nome della classe da utilizzare come sorgente dei dati della collection
213
- - accept_nested_field => _accept_nested_field.html.erb
214
- Questo partial renderizza una tabella per i campi associati al modello.
215
- Più informazioni nelle note per il [nested attributes](#nested-attributes)
213
+ - accept_nested_attributes
214
+ - has_many => _accept_has_many_nested_field.html.erb
215
+ Questo partial renderizza una tabella per i campi associati al modello.
216
+ Più informazioni nelle note per il [nested attributes](#nested-attributes)
217
+ - has_one => _accept_has_one_nested_field.html.erb
218
+ Questo partial renderizza una nested form che si comporta come una form normale renderizzando i vari campi del
219
+ nested attraverso quanto elencato nella policy dell'oggetto padre.
216
220
  - Default/String => _base.html.erb
217
221
 
218
222
  In futuro si prevede di aggiungere automatismi per renderizzare senza
@@ -238,8 +242,9 @@ di [Rails](https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/Cla
238
242
  Note:
239
243
 
240
244
  - Nelle policy bisogna definire come campo da editare il nome della relazione/nested_attribute
241
- - Nella policy bisogna inoltre definire per i permitted_attributes anche il
242
- `XXXXX_attributes => [Array attributi da editare] + [:id,:_destroy]`
245
+ - Nella policy bisogna inoltre definire per i permitted_attributes anche:
246
+ - nel caso di has_many: `XXXXX_attributes => [Array attributi da editare] + [:id,:_destroy]`
247
+ - nel caso di has_one: `XXXXX_attributes => [Array attributi da editare]`
243
248
  - Il permitted _destroy vale solamente nel caso in cui si definisca nei nested_attributes che debba essere cancellabile.
244
249
  - I campi visualizzati del modello sono presi dalla relativa policy.
245
250
 
@@ -34,10 +34,18 @@ module Utilities
34
34
  locals[:foreign_key] = reflection.foreign_key
35
35
  elsif form.object.class.respond_to?(:nested_attributes_options) &&
36
36
  form.object.class.nested_attributes_options.key?(field.to_sym)
37
- type= :nested_attributes
38
- generic_field = "accept_nested_field"
37
+ type = :nested_attributes
39
38
  reflection = form.object.class.reflect_on_association(field.to_s)
40
- locals[:new_object] = reflection.klass.new(reflection.foreign_key => form.object)
39
+ case reflection
40
+ when ActiveRecord::Reflection::HasManyReflection
41
+ locals[:new_object] = reflection.klass.new(reflection.foreign_key => form.object)
42
+ generic_field = "accept_has_many_nested_field"
43
+ when ActiveRecord::Reflection::HasOneReflection
44
+ form.object.send(:"build_#{field}") unless form.object.send(field).present?
45
+ generic_field = "accept_has_one_nested_field"
46
+ else
47
+ raise "Unknown reflection for nested attributes #{field}->#{reflection.class}"
48
+ end
41
49
  else
42
50
  if form.object.class.respond_to?(:type_for_attribute)
43
51
  type = form.object.class.type_for_attribute(field).type
@@ -1,15 +1,7 @@
1
1
  <%= render layout: "form_container" do %>
2
2
  <%= form_for @object, builder: form_builder do |form| %>
3
3
 
4
- <%= render layout: "form_body_container" do %>
5
- <%= render partial: "form_field_header", locals: {form:} %>
6
- <%= render partial: "form_base_errors", locals: {form:} if form.object.errors.key?(:base) %>
7
- <%= render layout: "form_fields_container" do %>
8
- <%= render collection: form_attributes(form.object),
9
- layout: "form_field_container",
10
- partial: "form_field", locals: {form:} %>
11
- <% end %>
12
- <% end %>
4
+ <%= render partial: "form_full_components", locals: {form: form} %>
13
5
 
14
6
  <%= render layout: "form_footer_container" do %>
15
7
  <%= render partial: "form_footer", locals: {form: form} %>
@@ -0,0 +1,14 @@
1
+ <%#
2
+ Questo partial è il raggruppamento di tutti gli elementi tranne il footer del form.
3
+ Serve per riutilizzarlo anche nel nested attributes come base per costruire tutti gli elementi
4
+ %>
5
+ <%# locals: (form:) -%>
6
+ <%= render layout: "form_body_container" do %>
7
+ <%= render partial: "form_field_header", locals: {form:} %>
8
+ <%= render partial: "form_base_errors", locals: {form:} if form.object.errors.key?(:base) %>
9
+ <%= render layout: "form_fields_container" do %>
10
+ <%= render collection: form_attributes(form.object),
11
+ layout: "form_field_container",
12
+ partial: "form_field", locals: {form:} %>
13
+ <% end %>
14
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <%# locals: (form:, field:) -%>
2
+ <%= form.fields_for field do |form_for_sections| %>
3
+ <%= render partial: "form_full_components", locals: {form: form_for_sections} %>
4
+ <% end %>
@@ -1 +1 @@
1
- 1.10.0
1
+ 1.11.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: base_editing_bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marino Bonetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-09-12 00:00:00.000000000 Z
11
+ date: 2025-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -346,6 +346,7 @@ files:
346
346
  - app/views/base_editing/_form_fields_container.html.erb
347
347
  - app/views/base_editing/_form_footer.html.erb
348
348
  - app/views/base_editing/_form_footer_container.html.erb
349
+ - app/views/base_editing/_form_full_components.html.erb
349
350
  - app/views/base_editing/_index_body.html.erb
350
351
  - app/views/base_editing/_index_main_buttons.html.erb
351
352
  - app/views/base_editing/_index_title_header.html.erb
@@ -364,7 +365,8 @@ files:
364
365
  - app/views/base_editing/cell_field/_enum.html.erb
365
366
  - app/views/base_editing/cell_field/_timestamps.html.erb
366
367
  - app/views/base_editing/edit.html.erb
367
- - app/views/base_editing/form_field/_accept_nested_field.html.erb
368
+ - app/views/base_editing/form_field/_accept_has_many_nested_field.html.erb
369
+ - app/views/base_editing/form_field/_accept_has_one_nested_field.html.erb
368
370
  - app/views/base_editing/form_field/_base.html.erb
369
371
  - app/views/base_editing/form_field/_belongs_to_select.html.erb
370
372
  - app/views/base_editing/form_field/_boolean.html.erb