lifeform 0.4.1 → 0.5

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: 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