eac_rails_utils 0.14.0 → 0.14.1

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: 5c4f6d085f9a7e1f6b39c4028498cac28f482540993e73bdadff0b58e6f1e214
4
- data.tar.gz: d369558ea68714a4d0dedb89b3af900945be5c57113da0241b5332e818f634d8
3
+ metadata.gz: 7137f7331f9f361c5371306a1c2c607495dd3897bef11c887aad02535814c312
4
+ data.tar.gz: b226cce4f9f3dc400a97426fa13a0d00d5fa2d157fd48bbda07873218832bd45
5
5
  SHA512:
6
- metadata.gz: 591317f786a1edac276ac1ce0ecea5dcacbdfdbbd5635b51cd8e064c45ea921e4b8819bf78b49be0e708d13843843b896ab4e33d8f034e1146cb6584e0a9c798
7
- data.tar.gz: 6f9760a2990de21e42b779f22d38aff09fa83b722959f551aff3bace7b9eef7f0db9cb8acb617bd3a5d4f9935e95090546c64de317cd8d68d4503b2d0e11989f
6
+ metadata.gz: 51cab365aec88b22c1a4765e3537f8b661eff6e06290210b5cd79e4d18f2a07a8de3c7ee059eb5b0809e71359c9c855cbee406f0d94c7a8381de78f45dbdebeb
7
+ data.tar.gz: b2e42d61fbf1ed64f5297a7762e0bde11522682c12d02e4d9ca864d3000def5d037d512134bbae2ad9e998f4a3567f5326fb81db29e3fe5a9870b1f1926266ce
@@ -3,22 +3,51 @@
3
3
  module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
- module AssociationSelectField
7
- def association_select_field(field_name, options = {})
8
- options = options.dup
9
- methods = extract_methods(options)
10
- select_options = extract_select_options(options)
11
- collection = extract_association_key(field_name, options, :collection, :all)
12
- foreign_key = extract_association_key(field_name, options, :foreign_key,
13
- :association_foreign_key)
14
- field(field_name, options) do
15
- form.collection_select(foreign_key, collection, methods[:value], methods[:text],
16
- select_options, class: 'form-control')
6
+ class AssociationSelectField
7
+ common_constructor :builder, :field_name, :options, default: [{}] do
8
+ self.options = options.dup
9
+ end
10
+
11
+ delegate :model_instance, to: :builder
12
+
13
+ def collection
14
+ extract_association_key(:collection, *(
15
+ ::Rails.version < '5' ? [:all] : %i[klass all]
16
+ ))
17
+ end
18
+
19
+ def foreign_key
20
+ extract_association_key(:foreign_key, (
21
+ ::Rails.version < '5' ? :association_foreign_key : :join_foreign_key
22
+ ))
23
+ end
24
+
25
+ def methods
26
+ extract_methods(options)
27
+ end
28
+
29
+ def output
30
+ builder.send(:field, field_name, options) do
31
+ builder.form.collection_select(foreign_key, collection, methods[:value], methods[:text],
32
+ select_options, class: 'form-control')
17
33
  end
18
34
  end
19
35
 
36
+ def select_options
37
+ extract_select_options(options)
38
+ end
39
+
20
40
  private
21
41
 
42
+ def association_reflection
43
+ if model_instance.class.respond_to?(:reflect_on_association)
44
+ model_instance.class.reflect_on_association(field_name)
45
+ else
46
+ raise "#{model_instance.class} não possui um método \"reflect_on_association\". " \
47
+ "Defina explicitamente a opção :#{key}"
48
+ end
49
+ end
50
+
22
51
  def extract_methods(options)
23
52
  { value: options.delete(:value_method) || :id, text:
24
53
  options.delete(:text_method) || :to_s }
@@ -28,14 +57,12 @@ module EacRailsUtils
28
57
  options.extract!(:prompt, :include_blank)
29
58
  end
30
59
 
31
- def extract_association_key(field_name, options, key, method)
32
- return options.delete(key) if options.key?(key)
33
- if model_instance.class.respond_to?(:reflect_on_association)
34
- return model_instance.class.reflect_on_association(field_name).send(method)
60
+ def extract_association_key(key, *methods)
61
+ if options.key?(key)
62
+ options.fetch(key)
63
+ else
64
+ methods.inject(association_reflection) { |a, e| a.send(e) }
35
65
  end
36
-
37
- raise "#{model_instance.class} não possui um método \"reflect_on_association\". " \
38
- "Defina explicitamente a opção :#{key}"
39
66
  end
40
67
  end
41
68
  end
@@ -8,7 +8,6 @@ module EacRailsUtils
8
8
  class FormBuilder
9
9
  ::EacRubyUtils.require_sub __FILE__
10
10
 
11
- include AssociationSelectField
12
11
  include CommonTextFields
13
12
  include CurrencyField
14
13
  include DateField
@@ -27,6 +26,11 @@ module EacRailsUtils
27
26
  @field_errors_showed = Set.new
28
27
  end
29
28
 
29
+ def association_select_field(field_name, options = {})
30
+ ::EacRailsUtils::CommonFormHelper::FormBuilder::AssociationSelectField
31
+ .new(self, field_name, options).output
32
+ end
33
+
30
34
  def model_instance
31
35
  form.object
32
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRailsUtils
4
- VERSION = '0.14.0'
4
+ VERSION = '0.14.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rails_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - E.A.C.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-24 00:00:00.000000000 Z
11
+ date: 2021-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel-associations