lifeform 0.4.1 → 0.5

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: 9dbdb103263edf279b32445d6faa8d4b0cbb6cacf21fe7b8f520af8a5896d0e0
4
- data.tar.gz: 01fe12ea7c14e7b488ea1a383e7158c8d63adce6346a4c869613419046d5ec58
3
+ metadata.gz: b554a393fe6d14365108e97b9da374e73da67f0d6728b8605f6d2ddea2f3e3f5
4
+ data.tar.gz: 5749f82de0a38dd41d7fd75245ed1cab66b0b2550bdabc722620e70c2345bf37
5
5
  SHA512:
6
- metadata.gz: 7272ba2e8224d31ed4b8313bec9056dcef6f82c995119ca43f8381d55aa304eff8119e1055bc7a838a17b61225efdb09200485d79edf30d4c5c616551f52a453
7
- data.tar.gz: 788fe1a1ec8ea8d70d10b7e90f3993443a2f71040dc68e547095c07c3688d9afd41b16afe1c33456a63dffe8273a2fc2f833c87201b10553c1d5cede1d8b5842
6
+ metadata.gz: 86f68d5c0673570a0e549c2f68afb731b749ab305fb9a3a2f2013820389985cd3468b56263ec738ee113a90c49889cc755efd93427c985788af84e37b83b2d56
7
+ data.tar.gz: d6f72691ee444c44f78a8b8c1bfb7f93c10105398d77f4be6c593e96d85bf58ee031c7fe30f572a133ebeffdd3791aaed2b99438848e27e51431e4da048690a5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.5.0] - 2022-06-10
6
+
7
+ ## [0.4.0] - 2022-06-08
8
+
9
+ - Add support for submit buttons
10
+
11
+ ## [0.3.0] - 2022-06-08
12
+
13
+ - Add automatic field rendering
14
+
5
15
  ## [0.2.0] - 2022-05-31
6
16
 
7
17
  - Fields now support content blocks, conditional rendering
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lifeform (0.4.1)
4
+ lifeform (0.5)
5
5
  activesupport (>= 6.0)
6
6
  papercraft (~> 0.24)
7
7
  zeitwerk (~> 2.5)
data/lib/lifeform/form.rb CHANGED
@@ -25,13 +25,21 @@ module Lifeform
25
25
  @fields ||= {}
26
26
  end
27
27
 
28
+ def subforms
29
+ @subforms ||= {}
30
+ end
31
+
28
32
  def field(name, type: :text, library: self.library, **parameters)
29
- parameters[:name] = name
33
+ parameters[:name] = name.to_sym
30
34
  fields[name] = FieldDefinition.new(type, Libraries.const_get(library.to_s.classify), parameters)
31
35
  end
32
36
 
37
+ def subform(name, klass, parent_name: nil)
38
+ subforms[name.to_sym] = { class: klass, parent_name: parent_name }
39
+ end
40
+
33
41
  def library(library_name = nil)
34
- @library = library_name if library_name
42
+ @library = library_name.to_sym if library_name
35
43
  @library ||= :default
36
44
  end
37
45
 
@@ -65,6 +73,17 @@ module Lifeform
65
73
 
66
74
  attributes
67
75
  end
76
+
77
+ def name_of_model(model)
78
+ return "" if model.nil?
79
+
80
+ if model.respond_to?(:to_model)
81
+ model.to_model.model_name.param_key
82
+ else
83
+ # Or just use basic underscore
84
+ model.class.name.underscore.tr("/", "_")
85
+ end
86
+ end
68
87
  end
69
88
 
70
89
  # @return [Object]
@@ -82,9 +101,16 @@ module Lifeform
82
101
  # @return [Boolean]
83
102
  attr_reader :emit_form_tag
84
103
 
85
- def initialize(model = nil, url: nil, library: self.class.library, emit_form_tag: true, **parameters)
86
- @model, @url, @library_name, @parameters, @emit_form_tag = model, url, library, parameters, emit_form_tag
104
+ # @return [Boolean]
105
+ attr_reader :parent_name
106
+
107
+ def initialize( # rubocop:disable Metrics/ParameterLists
108
+ model = nil, url: nil, library: self.class.library, emit_form_tag: true, parent_name: nil, **parameters
109
+ )
110
+ @model, @url, @library_name, @parameters, @emit_form_tag, @parent_name =
111
+ model, url, library, parameters, emit_form_tag, parent_name
87
112
  @library = Libraries.const_get(@library_name.to_s.classify)
113
+ @subform_instances = {}
88
114
 
89
115
  parameters[:method] ||= model.respond_to?(:persisted?) && model.persisted? ? :patch : :post
90
116
  parameters[:accept_charset] ||= "UTF-8"
@@ -119,7 +145,7 @@ module Lifeform
119
145
 
120
146
  def field(name, **field_parameters)
121
147
  # @type [FieldDefinition]
122
- field_definition = self.class.fields[name]
148
+ field_definition = self.class.fields[name.to_sym]
123
149
  # @type [Class<Libraries::Default>]
124
150
  field_library = field_definition.library
125
151
  field_library.object_for_field_definition(
@@ -127,6 +153,14 @@ module Lifeform
127
153
  )
128
154
  end
129
155
 
156
+ def subform(name, model = nil)
157
+ @subform_instances[name.to_sym] ||= self.class.subforms[name.to_sym][:class].new(
158
+ model,
159
+ emit_form_tag: false,
160
+ parent_name: self.class.subforms[name.to_sym][:parent_name] || self.class.name_of_model(self.model)
161
+ )
162
+ end
163
+
130
164
  def render_in(view_context, &block) # rubocop:disable Metrics
131
165
  form_tag = library::FORM_TAG
132
166
  parameters[:action] ||= url || (model ? view_context.send(self.class.const_get(:MODEL_PATH_HELPER), model) : nil)
@@ -30,10 +30,9 @@ module Lifeform
30
30
  end
31
31
 
32
32
  def model_name
33
- return @model.to_model.model_name.param_key if @model.respond_to?(:to_model)
33
+ name_of_model = @form.class.name_of_model(@model)
34
34
 
35
- # Or just use basic underscore
36
- @model.class.name.underscore.tr("/", "_")
35
+ form.parent_name ? "#{form.parent_name}[#{name_of_model}]" : name_of_model
37
36
  end
38
37
 
39
38
  def value_for_model
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lifeform
4
- VERSION = "0.4.1"
4
+ VERSION = "0.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lifeform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-08 00:00:00.000000000 Z
11
+ date: 2022-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport