eac_rails_utils 0.13.4 → 0.15.0
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 +4 -4
- data/app/helpers/eac_rails_utils/common_form_helper/form_builder/association_select_field.rb +45 -18
- data/app/helpers/eac_rails_utils/common_form_helper/form_builder.rb +5 -1
- data/config/initializers/json.rb +20 -0
- data/lib/eac_rails_utils/patches/active_model_associations.rb +1 -1
- data/lib/eac_rails_utils/patches/numeric/number_helper.rb +64 -0
- data/lib/eac_rails_utils/patches/numeric.rb +4 -0
- data/lib/eac_rails_utils/rspec/setup/models_utils.rb +40 -0
- data/lib/eac_rails_utils/rspec/setup.rb +15 -0
- data/lib/eac_rails_utils/rspec.rb +8 -0
- data/lib/eac_rails_utils/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89426131c7ab950c53778513d6096be4495f7d6a5846fd42db9b8f31a0d69266
|
4
|
+
data.tar.gz: cbd2f6f94b7b83be5609e4e755250b64390897fb042d148efb5081d410eef41e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da342b910c131c7c020ae55d89347f897378424a1aa1c6e82ca66ef5c98ba275261307c06ad4fb6aca08c5d467fde6d629f56400cb2ce79ba72e21bc006d33d3
|
7
|
+
data.tar.gz: dc082d3c3eafdd8fb0d040d703b0e4692ef110621777caae15150d5c2b6398538bfb7237c166b157ae38cbe9f5717a9aa942d9d942e824a704b38330f91e6d80
|
data/app/helpers/eac_rails_utils/common_form_helper/form_builder/association_select_field.rb
CHANGED
@@ -3,22 +3,51 @@
|
|
3
3
|
module EacRailsUtils
|
4
4
|
module CommonFormHelper
|
5
5
|
class FormBuilder
|
6
|
-
|
7
|
-
|
8
|
-
options = options.dup
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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(
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
def patch_json?
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
::Gem::Version.new(RUBY_VERSION) >= ::Gem::Version.new('2.7') &&
|
7
|
+
::Gem::Version.new(JSON::VERSION) < ::Gem::Version.new('2')
|
8
|
+
rescue ::LoadError
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
if patch_json?
|
13
|
+
module JSON
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def parse(source, opts = {})
|
17
|
+
Parser.new(source, **opts).parse
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -16,7 +16,7 @@ module ActiveModel
|
|
16
16
|
def init_rails_4
|
17
17
|
ActiveSupport.on_load(:active_record) do
|
18
18
|
ActiveRecord::Associations::AssociationScope.prepend(
|
19
|
-
::EacRailsUtils::Patches::Rails4
|
19
|
+
::EacRailsUtils::Patches::Rails4::ActiveRecordAssociationsAssociationScope
|
20
20
|
)
|
21
21
|
end
|
22
22
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'action_view/helpers/number_helper'
|
4
|
+
|
5
|
+
class Numeric
|
6
|
+
DEFAULT_PRECISION = 2
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# @return [Object] A object that extends [ActionView::Helpers::NumberHelper]
|
10
|
+
def number_helper
|
11
|
+
@number_helper ||= begin
|
12
|
+
r = ::Object.new
|
13
|
+
r.extend(::ActionView::Helpers::NumberHelper)
|
14
|
+
r
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_precision_options(options = {})
|
20
|
+
r = options.dup
|
21
|
+
r[:precision] = DEFAULT_PRECISION
|
22
|
+
r
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Object] A object that extends [ActionView::Helpers::NumberHelper]
|
26
|
+
def number_helper
|
27
|
+
self.class.number_helper
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def to_currency(options = {})
|
32
|
+
number_helper.number_to_currency(self, default_precision_options(options))
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [String]
|
36
|
+
def to_human(options = {})
|
37
|
+
number_helper.number_to_human(self, default_precision_options(options))
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [String]
|
41
|
+
def to_human_size(options = {})
|
42
|
+
number_helper.number_to_human_size(self, default_precision_options(options))
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [String]
|
46
|
+
def to_percentage(options = {})
|
47
|
+
number_helper.number_to_percentage(self, default_precision_options(options))
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [String]
|
51
|
+
def to_phone(options = {})
|
52
|
+
number_helper.number_to_phone(self, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [String]
|
56
|
+
def with_delimiter(options = {})
|
57
|
+
number_helper.number_with_delimiter(self, options)
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def with_precision(options = {})
|
62
|
+
number_helper.number_with_precision(self, default_precision_options(options).print_debug)
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacRailsUtils
|
6
|
+
module Rspec
|
7
|
+
module Setup
|
8
|
+
module ModelsUtils
|
9
|
+
def model_record_attribute_test(record_variable, attribute, valid, value)
|
10
|
+
context("when #{record_variable}.#{attribute} == #{value}") do
|
11
|
+
before do
|
12
|
+
send(record_variable).send("#{attribute}=", value)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "#{record_variable} should be {valid ? '' : 'not '}valid" do
|
16
|
+
expect(send(record_variable).valid?).to send("be_#{valid ? 'truthy' : 'falsy'}"),
|
17
|
+
send(record_variable).errors.messages
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def model_record_values_attribute_test(record_variable, attribute, valid, values)
|
23
|
+
values.each do |value|
|
24
|
+
model_record_attribute_test(record_variable, attribute, valid, value)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def model_record_valid_invalid_values_attribute_test(record_variable, attribute,
|
29
|
+
valid_values, invalid_values)
|
30
|
+
{
|
31
|
+
false => invalid_values,
|
32
|
+
true => valid_values
|
33
|
+
}.each do |valid, values|
|
34
|
+
model_record_values_attribute_test(record_variable, attribute, valid, values)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EacRailsUtils
|
6
|
+
module Rspec
|
7
|
+
module Setup
|
8
|
+
require_sub __FILE__
|
9
|
+
|
10
|
+
def self.extended(setup_obj)
|
11
|
+
setup_obj.rspec_config.extend(::EacRailsUtils::Rspec::Setup::ModelsUtils)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
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.
|
4
|
+
version: 0.15.0
|
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:
|
11
|
+
date: 2022-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel-associations
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- app/validators/eac_rails_utils/cpf_validator.rb
|
163
163
|
- app/validators/eac_rails_utils/no_presence_validator.rb
|
164
164
|
- config/initializers/assets.rb
|
165
|
+
- config/initializers/json.rb
|
165
166
|
- config/locales/en.yml
|
166
167
|
- config/locales/pt-BR.yml
|
167
168
|
- lib/assets/images/sort_asc.png
|
@@ -195,10 +196,15 @@ files:
|
|
195
196
|
- lib/eac_rails_utils/patches.rb
|
196
197
|
- lib/eac_rails_utils/patches/action_controller_base.rb
|
197
198
|
- lib/eac_rails_utils/patches/active_model_associations.rb
|
199
|
+
- lib/eac_rails_utils/patches/numeric.rb
|
200
|
+
- lib/eac_rails_utils/patches/numeric/number_helper.rb
|
198
201
|
- lib/eac_rails_utils/patches/rails_4.rb
|
199
202
|
- lib/eac_rails_utils/patches/rails_4/active_record_associations_association_scope.rb
|
200
203
|
- lib/eac_rails_utils/patches/rails_5_2.rb
|
201
204
|
- lib/eac_rails_utils/patches/rails_5_2/active_model_association_method_fix.rb
|
205
|
+
- lib/eac_rails_utils/rspec.rb
|
206
|
+
- lib/eac_rails_utils/rspec/setup.rb
|
207
|
+
- lib/eac_rails_utils/rspec/setup/models_utils.rb
|
202
208
|
- lib/eac_rails_utils/version.rb
|
203
209
|
homepage:
|
204
210
|
licenses: []
|