phlexi-form 0.5.1 → 0.5.2

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: 7ac3397bb304c81e234196e86557aab193ef8d6a53716ec1422ea91e3419f74d
4
- data.tar.gz: 4e43c5162c7b52c219fb13bbc5ea6b03d972e626c680e7d37a048082743c328f
3
+ metadata.gz: e6b1a5926f08261bf0fa3c607395ddd570c52417636f559b7f11a87a46e8c06d
4
+ data.tar.gz: ca036dc0035a0161fe4a0411dddbff11d7b1edea529b266ac3b29b1caded91e5
5
5
  SHA512:
6
- metadata.gz: fea5552a774d2d0c548745d66af37a48bb560a620879a30ad19158866f924558fb91c8a458d78050f768652f9249798b752803b31bf5d0e83b133979947d1de4
7
- data.tar.gz: b7876511b1b81038ab04e3255efe12e366c0a357d7ee796467e1be36ddffd2c748fbfa36cef614255790cbffaa41cfe6dc025f501a38441ae81882ed42bea86b
6
+ metadata.gz: 94a54baa5507d3309efbf06dc8aa230ec8814be37fe7a99e72b294c9d3ed0528e90ea5f782b1333179a5fef8b3b244355b22f38b8bd4d98a661d40440adc52ad
7
+ data.tar.gz: bea9112fe8131a517381b1a2d4715b266b09fe82a608e96495366e43d4a565ae0bd60296e455118ad515ea41d795e49218a917367dcd3c7478fc88d2ce0cd1da
@@ -34,7 +34,7 @@ module Phlexi
34
34
 
35
35
  attr_reader :key, :object
36
36
 
37
- delegate :field, :submit_button, :nest_one, :nest_many, to: :@namespace
37
+ delegate :field, :submit_button, :nest_one, :nest_many, :has_file_input?, to: :@namespace
38
38
 
39
39
  # Initializes a new Form instance.
40
40
  #
@@ -65,10 +65,18 @@ module Phlexi
65
65
  #
66
66
  # @return [void]
67
67
  def view_template(&)
68
- form_tag {
68
+ captured = capture { form_template(&) }
69
+ form_tag do
69
70
  form_errors
70
- form_template(&)
71
- }
71
+ plain(captured)
72
+ end
73
+
74
+ # TODO: phlex v2
75
+ # captured = capture { form_template(&) }
76
+ # form_tag do
77
+ # form_errors
78
+ # raw(safe(captured))
79
+ # end
72
80
  end
73
81
 
74
82
  def form_errors
@@ -254,12 +262,14 @@ module Phlexi
254
262
  #
255
263
  # @return [Hash] The form attributes
256
264
  def form_attributes
257
- mix({
265
+ attrs = mix({
258
266
  id: @namespace.dom_id,
259
267
  class: form_class,
260
268
  action: form_action,
261
269
  method: standardized_form_method
262
270
  }, attributes)
271
+ attrs[:enctype] ||= "multipart/form-data" if has_file_input?
272
+ attrs
263
273
  end
264
274
 
265
275
  # Renders the authenticity token if required.
@@ -249,10 +249,17 @@ module Phlexi
249
249
  @field_input_extractor.extract_input(params)
250
250
  end
251
251
 
252
+ def has_file_input!
253
+ parent.has_file_input!
254
+ end
255
+
252
256
  protected
253
257
 
254
258
  def create_component(component_class, theme_key, **attributes, &)
255
259
  theme_attributes = apply_component_theme(attributes, theme_key)
260
+ # TODO: refactor all this type checking code such that, the concerns will perform these actions.
261
+ # Basically, invert control so that the component asks for the extra attributes
262
+ # or calls #has_file_input!
256
263
  extra_attributes = if component_class.include?(Phlexi::Form::Components::Concerns::HandlesInput)
257
264
  input_attributes
258
265
  else
@@ -260,10 +267,11 @@ module Phlexi
260
267
  end
261
268
  attributes = mix(theme_attributes, extra_attributes, attributes)
262
269
  component = component_class.new(self, **attributes, &)
263
- if component_class.include?(Components::Concerns::ExtractsInput)
270
+ if component_class.include?(Components::Concerns::ExtractsInput)
264
271
  raise "input component already defined: #{@field_input_extractor.inspect}" if @field_input_extractor
265
272
 
266
273
  @field_input_extractor = component
274
+ has_file_input! if component_class.include?(Components::Concerns::UploadsFile)
267
275
  end
268
276
 
269
277
  component
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlexi
4
+ module Form
5
+ module Components
6
+ module Concerns
7
+ module UploadsFile
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -4,6 +4,8 @@ module Phlexi
4
4
  module Form
5
5
  module Components
6
6
  class FileInput < Input
7
+ include Phlexi::Form::Components::Concerns::UploadsFile
8
+
7
9
  def view_template
8
10
  input(type: :hidden, name: attributes[:name], value: "", autocomplete: "off", hidden: true) if include_hidden?
9
11
  input(**attributes)
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlexi
4
+ module Form
5
+ module Structure
6
+ module ManagesFields
7
+ def has_file_input!
8
+ if parent
9
+ parent.has_file_input!
10
+ else
11
+ @has_file_input = true
12
+ end
13
+ end
14
+
15
+ def has_file_input?
16
+ if parent
17
+ parent.has_file_input?
18
+ else
19
+ @has_file_input || false
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,6 +4,8 @@ module Phlexi
4
4
  module Form
5
5
  module Structure
6
6
  class Namespace < Phlexi::Field::Structure::Namespace
7
+ include Phlexi::Form::Structure::ManagesFields
8
+
7
9
  class NamespaceCollection < Phlexi::Form::Structure::NamespaceCollection; end
8
10
 
9
11
  def submit_button(key = :submit_button, **, &)
@@ -4,6 +4,8 @@ module Phlexi
4
4
  module Form
5
5
  module Structure
6
6
  class NamespaceCollection < Phlexi::Field::Structure::NamespaceCollection
7
+ include Phlexi::Form::Structure::ManagesFields
8
+
7
9
  def extract_input(params)
8
10
  namespace = build_namespace(0)
9
11
  @block.call(namespace)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Phlexi
4
4
  module Form
5
- VERSION = "0.5.1"
5
+ VERSION = "0.5.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlexi-form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Froelich
@@ -215,6 +215,7 @@ files:
215
215
  - lib/phlexi/form/components/concerns/handles_array_input.rb
216
216
  - lib/phlexi/form/components/concerns/handles_input.rb
217
217
  - lib/phlexi/form/components/concerns/submits_form.rb
218
+ - lib/phlexi/form/components/concerns/uploads_file.rb
218
219
  - lib/phlexi/form/components/error.rb
219
220
  - lib/phlexi/form/components/file_input.rb
220
221
  - lib/phlexi/form/components/form_errors.rb
@@ -245,6 +246,7 @@ files:
245
246
  - lib/phlexi/form/options/step.rb
246
247
  - lib/phlexi/form/options/validators.rb
247
248
  - lib/phlexi/form/structure/field_collection.rb
249
+ - lib/phlexi/form/structure/manages_fields.rb
248
250
  - lib/phlexi/form/structure/namespace.rb
249
251
  - lib/phlexi/form/structure/namespace_collection.rb
250
252
  - lib/phlexi/form/theme.rb