form_props 0.2.0 → 0.2.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: 50996188e265e32010c43926fd176b48e8f661d7356a64540a894ae47f25b4a1
4
- data.tar.gz: 2e351ab9e16c79116b06777fc155b8f009b139cfcbb8c9b9d679745b4f8f66a3
3
+ metadata.gz: bbf118cf4f266c24efb36cee5ae09ad5a77955b6a007d1f468ea6e23667684e2
4
+ data.tar.gz: f0738373f48cef6f9f78266dc13786866293ce2578befe40bb8f85a9c436d14d
5
5
  SHA512:
6
- metadata.gz: ae7b90aae7465eadf5c26208b0e61ea3ddd79315925e6bfb4f43deeea8b0d9cf9430eda6a59a377b880f70d795b1a16a9eaeb58297b03ff2ced8a75a233606e9
7
- data.tar.gz: a0b691ce0290eb313ca97a10d7c8ecb4378bb0c0ff8b356bd3ed9c529b0048d6876c7220d182ca42fc9d70f7fc4cc29be1fa70711c8680a5438e8e46b335b54b
6
+ metadata.gz: fdba9e9240c0a456f24fb12077c609f2818e94fa20e8edc233c2928446bd43562d7452325d0876aac2ad6a4e8bff1b56594c5fe1efdd04a255a53ade1eeed85a
7
+ data.tar.gz: 02fa72d0098e3f952d8561ab4318a6f489569a744f2791bb9e4d9bd1fb6bafcba942cbef8b21a22a3e6f8c1a5d9014015a6ffb3f7fa985bf3fe098d2ee1223fd
data/README.md CHANGED
@@ -30,7 +30,7 @@ and `bundle install`
30
30
 
31
31
  ```ruby
32
32
  json.some_form do
33
- form_props(@post) do |f|
33
+ form_props(model: @post) do |f|
34
34
  f.text_field :title
35
35
  f.submit
36
36
  end
@@ -125,7 +125,7 @@ For example:
125
125
 
126
126
  ```js
127
127
  json.some_form do
128
- form_props(@post) do |f|
128
+ form_props(model: @post) do |f|
129
129
  f.time_zone_select(:time_zone)
130
130
  ...
131
131
  end
@@ -157,7 +157,7 @@ form_props doesn't handle form errors, but you can easily add this functionality
157
157
 
158
158
  ```ruby
159
159
  json.someForm do
160
- form_props(@post) do |f|
160
+ form_props(model: @post) do |f|
161
161
  f.text_field :title
162
162
  end
163
163
 
@@ -180,7 +180,7 @@ from `defaultValue` to `value`, by using `controlled: true`. For example:
180
180
 
181
181
  ```ruby
182
182
  json.some_form do
183
- form_props(@post, controlled: true) do |f|
183
+ form_props(model: @post, controlled: true) do |f|
184
184
  f.text_field :title
185
185
  end
186
186
  end
@@ -3,6 +3,12 @@
3
3
  module FormProps
4
4
  module Inputs
5
5
  class Base < ::ActionView::Helpers::Tags::Base
6
+ # Remove when no longer supporting Rails 7
7
+ if ActionView::VERSION::STRING < "8"
8
+ alias_method :add_default_name_and_field_for_value, :add_default_name_and_id_for_value
9
+ alias_method :add_default_name_and_field, :add_default_name_and_id
10
+ end
11
+
6
12
  def json
7
13
  @json ||= @template_object.instance_variable_get(:@__json)
8
14
  end
@@ -13,7 +19,7 @@ module FormProps
13
19
  @controlled = options.delete(:controlled)
14
20
  @key = options.delete(:key)
15
21
 
16
- super(object_name, method_name, template_object, options)
22
+ super
17
23
  end
18
24
 
19
25
  private
@@ -24,6 +30,7 @@ module FormProps
24
30
 
25
31
  def input_props(options)
26
32
  return if options.blank?
33
+ # tag_type = options[:type]
27
34
 
28
35
  options.each_pair do |key, value|
29
36
  type = TAG_TYPES[key]
@@ -68,10 +75,12 @@ module FormProps
68
75
  value = value.source
69
76
  end
70
77
 
78
+ is_checkable = respond_to?(:field_type, true) && (field_type == "checkbox" || field_type == "radio")
79
+
71
80
  @controlled ||= nil
72
81
 
73
82
  if !@controlled
74
- if key.to_sym == :value
83
+ if key.to_sym == :value && !is_checkable
75
84
  key = "default_value"
76
85
  end
77
86
 
@@ -20,18 +20,18 @@ module FormProps
20
20
 
21
21
  def render(flatten = false)
22
22
  options = @options.stringify_keys
23
- options[:type] = "checkbox"
23
+ options[:type] = field_type
24
24
  options[:value] = @checked_value
25
- options[:checked] = true if input_checked?(options)
25
+ options[:checked] = input_checked?(options)
26
26
  options[:unchecked_value] = @unchecked_value || ""
27
27
  options[:include_hidden] = options.fetch(:include_hidden) { true }
28
28
 
29
29
  body_block = -> {
30
30
  if options[:multiple]
31
- add_default_name_and_id_for_value(@checked_value, options)
31
+ add_default_name_and_field_for_value(@checked_value, options)
32
32
  options.delete(:multiple)
33
33
  else
34
- add_default_name_and_id(options)
34
+ add_default_name_and_field(options)
35
35
  end
36
36
 
37
37
  input_props(options)
@@ -48,6 +48,10 @@ module FormProps
48
48
 
49
49
  private
50
50
 
51
+ def field_type
52
+ "checkbox"
53
+ end
54
+
51
55
  def checked?(value)
52
56
  case value
53
57
  when TrueClass, FalseClass
@@ -30,6 +30,12 @@ module FormProps
30
30
  @options, @html_options
31
31
  )
32
32
  end
33
+
34
+ private
35
+
36
+ def field_type
37
+ "select"
38
+ end
33
39
  end
34
40
  end
35
41
  end
@@ -31,6 +31,12 @@ module FormProps
31
31
  option_groups_from_collection_for_select(@collection, @group_method, @group_label_method, @option_key_method, @option_value_method, option_tags_options), @options, @html_options
32
32
  )
33
33
  end
34
+
35
+ private
36
+
37
+ def field_type
38
+ "select"
39
+ end
34
40
  end
35
41
  end
36
42
  end
@@ -18,12 +18,12 @@ module FormProps
18
18
  end
19
19
 
20
20
  def render(flatten = false)
21
- @options[:type] = "radio"
21
+ @options[:type] = field_type
22
22
  @options[:value] = @tag_value
23
23
  @options[:checked] = true if input_checked?(@options)
24
24
 
25
25
  body_block = -> {
26
- add_default_name_and_id_for_value(@tag_value, @options)
26
+ add_default_name_and_field_for_value(@tag_value, @options)
27
27
  input_props(@options)
28
28
  }
29
29
 
@@ -38,6 +38,11 @@ module FormProps
38
38
 
39
39
  private
40
40
 
41
+ def field_type
42
+ "radio"
43
+ end
44
+
45
+
41
46
  def sanitized_key
42
47
  @key || (sanitized_method_name + "_#{sanitized_value(@tag_value)}").camelize(:lower)
43
48
  end
@@ -35,6 +35,10 @@ module FormProps
35
35
 
36
36
  private
37
37
 
38
+ def field_type
39
+ "select"
40
+ end
41
+
38
42
  # Grouped choices look like this:
39
43
  #
40
44
  # [nil, []]
@@ -9,7 +9,7 @@ module FormProps
9
9
 
10
10
  def render
11
11
  json.set!(sanitized_key) do
12
- add_default_name_and_id(@options)
12
+ add_default_name_and_field(@options)
13
13
  @options[:type] ||= field_type
14
14
  @options[:value] = @options.fetch(:value) { value_before_type_cast }
15
15
 
@@ -13,7 +13,7 @@ module FormProps
13
13
  @options[:value] = @options.fetch(:value) { value_before_type_cast } unless field_type == "file"
14
14
 
15
15
  json.set!(sanitized_key) do
16
- add_default_name_and_id(@options)
16
+ add_default_name_and_field(@options)
17
17
  input_props(@options)
18
18
  end
19
19
  end
@@ -22,6 +22,12 @@ module FormProps
22
22
  time_zone_options_for_select(value || @options[:default], @priority_zones, @options[:model] || ActiveSupport::TimeZone), @options, @html_options
23
23
  )
24
24
  end
25
+
26
+ private
27
+
28
+ def field_type
29
+ "select"
30
+ end
25
31
  end
26
32
  end
27
33
  end
@@ -28,6 +28,12 @@ module FormProps
28
28
  @html_options
29
29
  )
30
30
  end
31
+
32
+ private
33
+
34
+ def field_type
35
+ "select"
36
+ end
31
37
  end
32
38
  end
33
39
  end
@@ -23,14 +23,14 @@ module FormProps
23
23
 
24
24
  def select_content_props(option_tags, options, html_options)
25
25
  html_options = html_options.stringify_keys
26
- add_default_name_and_id(html_options)
26
+ add_default_name_and_field(html_options)
27
27
 
28
28
  if placeholder_required?(html_options)
29
29
  raise ArgumentError, "include_blank cannot be false for a required field." if options[:include_blank] == false
30
30
  options[:include_blank] ||= true unless options[:prompt]
31
31
  end
32
32
 
33
- html_options["type"] = "select"
33
+ html_options["type"] = field_type
34
34
  value_for_blank = options.fetch(:selected) { value }
35
35
  option_tags = add_options(option_tags, options, value_for_blank)
36
36
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FormProps
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: form_props
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johny Ho
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-31 00:00:00.000000000 Z
11
+ date: 2025-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  requirements: []
130
- rubygems_version: 3.5.22
130
+ rubygems_version: 3.5.16
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: Form props is a Rails form builder that renders form attributes in JSON