eac_rails_utils 0.10.1 → 0.11.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper.rb +5 -1
  3. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder.rb +10 -2
  4. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/association_select_field.rb +1 -1
  5. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/common_text_fields.rb +1 -1
  6. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/currency_field.rb +1 -1
  7. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/date_field.rb +1 -1
  8. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/fields_for.rb +1 -1
  9. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/file_field.rb +1 -1
  10. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/radio_select_field.rb +1 -1
  11. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/searchable_association_field.rb +1 -1
  12. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/select_field.rb +1 -1
  13. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/time_field.rb +1 -1
  14. data/{lib/eac → app/helpers/eac_rails_utils}/common_form_helper/form_builder/year_month_field.rb +1 -1
  15. data/app/helpers/eac_rails_utils/data_table_helper.rb +13 -0
  16. data/{lib/eac → app/helpers/eac_rails_utils}/data_table_helper/column.rb +1 -1
  17. data/{lib/eac → app/helpers/eac_rails_utils}/data_table_helper/data_table.rb +2 -2
  18. data/{lib/eac → app/helpers/eac_rails_utils}/data_table_helper/setup.rb +2 -2
  19. data/{lib/eac → app/helpers/eac_rails_utils}/menus_helper.rb +5 -1
  20. data/{lib/eac → app/helpers/eac_rails_utils}/menus_helper/bootstrap_gui_builder.rb +1 -1
  21. data/{lib/eac → app/helpers/eac_rails_utils}/menus_helper/data_builder.rb +1 -1
  22. data/{lib/eac → app/helpers/eac_rails_utils}/menus_helper/gui_builder.rb +1 -1
  23. data/{lib/eac → app/validators/eac_rails_utils}/cpf_validator.rb +1 -1
  24. data/{lib/eac → app/validators/eac_rails_utils}/no_presence_validator.rb +1 -1
  25. data/lib/eac_rails_utils.rb +2 -39
  26. data/lib/eac_rails_utils/engine.rb +2 -0
  27. data/lib/{eac → eac_rails_utils}/htmlbeautifier.rb +1 -1
  28. data/lib/eac_rails_utils/models.rb +9 -0
  29. data/lib/eac_rails_utils/models/attribute_required.rb +43 -0
  30. data/lib/eac_rails_utils/models/fetch_errors.rb +92 -0
  31. data/lib/eac_rails_utils/models/inequality_queries.rb +39 -0
  32. data/lib/eac_rails_utils/models/tableless.rb +97 -0
  33. data/lib/eac_rails_utils/models/test_utils.rb +65 -0
  34. data/lib/eac_rails_utils/patches.rb +9 -0
  35. data/lib/eac_rails_utils/patches/action_controller_base.rb +2 -0
  36. data/lib/eac_rails_utils/version.rb +1 -1
  37. data/test/dummy/app/models/user.rb +4 -0
  38. data/test/{lib/eac → helpers/eac_rails_utils}/common_form_helper_test.rb +2 -2
  39. data/test/{lib/eac → helpers/eac_rails_utils}/data_table_test_helper_test.rb +2 -2
  40. data/test/{app/helpers → helpers}/eac_rails_utils/formatter_helper_test.rb +0 -0
  41. data/test/lib/eac_rails_utils/{patches/model_attribute_required_test.rb → models/attribute_required_test.rb} +1 -0
  42. data/test/lib/eac_rails_utils/models/fetch_errors_test.rb +80 -0
  43. data/test/lib/eac_rails_utils/models/tableless_test.rb +25 -0
  44. data/test/{lib/eac → validators}/cpf_validator_test.rb +2 -2
  45. metadata +63 -64
  46. data/lib/eac/data_table_helper.rb +0 -13
  47. data/lib/eac/inequality_queries.rb +0 -37
  48. data/lib/eac/model.rb +0 -90
  49. data/lib/eac/test_utils.rb +0 -61
  50. data/lib/eac_rails_utils/patches/model_attribute_required.rb +0 -34
  51. data/lib/eac_rails_utils/patches/ofx_parser.rb +0 -43
  52. data/lib/eac_rails_utils/tableless_model.rb +0 -92
  53. data/test/lib/eac/model_test.rb +0 -78
  54. data/test/lib/eac/source_target_fixtures_test_files/a.source.html +0 -1
  55. data/test/lib/eac/source_target_fixtures_test_files/a.target.yaml +0 -1
  56. data/test/lib/eac/source_target_fixtures_test_files/b.source.html +0 -1
  57. data/test/lib/eac/source_target_fixtures_test_files/c.target.yaml +0 -1
  58. data/test/lib/eac_rails_utils/tableless_model_test.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04c9cde129b77d04832d53c75454eb6292383fadb8b8866ed2e1539e53d36ffd
4
- data.tar.gz: a2c74ddf84488c12c3f8963e07c6c801ae616f3b30724990e45e0c78bd1e6d0a
3
+ metadata.gz: fdc60e761e13bcdf41dd921a5501fa3d6e4e372f3d3c2af48eef03a3f7bee723
4
+ data.tar.gz: 6121db8bfd8023c7360fea7d7f40c159a8411462970b37705e3d5c0217e8238f
5
5
  SHA512:
6
- metadata.gz: 2f099ab9a607614203088698ac7057da268a4603e057df507d70d4ed131fe4340af8e4e59f9dc781dfbf9995adc5d6eb1637141bc677c4c5a54e1e63220a4706
7
- data.tar.gz: 5383caea17fe002cb954ff74f244d7f5a5266e476566bd27240977b4a99b14bacd3e62cfd2816c103c7ddcab9b74b4fa135d8144c32c43fcad1ef2e94e3471b2
6
+ metadata.gz: 5171b49a17923a648dc8a94b45d4386f1aec8c9079941da2ff66744347b07bc46ab6f64f42c0a46475fb258fa41fe78e755a8d0d1140497fafd10e19cbbfe902
7
+ data.tar.gz: 486f7961912a84ee2cc74ff6b91c13e9c19364a42b41ee75af835a6cda82fed07c097bf9ba15007f0207eb9f6f986a84fa329c3be87b0b6776dfe147f14a7bb7
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module EacRailsUtils
4
6
  module CommonFormHelper
7
+ ::EacRubyUtils.require_sub __FILE__
8
+
5
9
  def common_form(model_instance, options = {}, &block)
6
10
  submit_label = options.delete(:submit_label)
7
11
  options[:html] ||= {}
@@ -1,8 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ require 'eac_ruby_utils/require_sub'
4
+ require 'eac_rails_utils/models/attribute_required'
5
+
6
+ module EacRailsUtils
4
7
  module CommonFormHelper
5
8
  class FormBuilder
9
+ ::EacRubyUtils.require_sub __FILE__
10
+
6
11
  include AssociationSelectField
7
12
  include CommonTextFields
8
13
  include CurrencyField
@@ -87,7 +92,10 @@ module Eac
87
92
  end
88
93
 
89
94
  def field_label(field_name, label, required)
90
- required = model_instance.attribute_required?(field_name) if required.nil?
95
+ if required.nil?
96
+ required = ::EacRailsUtils::Models::AttributeRequired
97
+ .required?(model_instance, field_name)
98
+ end
91
99
  @form.label(field_name, label, class: required ? 'required' : 'optional')
92
100
  end
93
101
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module AssociationSelectField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module CommonTextFields
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module CurrencyField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module DateField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module FieldsFor
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module FileField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module RadioSelectField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  class SearchableAssociationField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module SelectField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module TimeField
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module CommonFormHelper
5
5
  class FormBuilder
6
6
  module YearMonthField
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module EacRailsUtils
6
+ module DataTableHelper
7
+ ::EacRubyUtils.require_sub __FILE__
8
+
9
+ def data_table(dataset, &block)
10
+ ::EacRailsUtils::DataTableHelper::DataTable.new(self, dataset, &block).output
11
+ end
12
+ end
13
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module DataTableHelper
5
5
  class Column
6
6
  EMPTY_VALUE = '-'
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module DataTableHelper
5
5
  class DataTable
6
6
  def initialize(view, dataset)
7
7
  @view = view
8
8
  @dataset = dataset
9
- @setup = ::Eac::DataTableHelper::Setup.new
9
+ @setup = ::EacRailsUtils::DataTableHelper::Setup.new
10
10
  yield(@setup)
11
11
  end
12
12
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module DataTableHelper
5
5
  class Setup
6
6
  attr_reader :columns
@@ -12,7 +12,7 @@ module Eac
12
12
  end
13
13
 
14
14
  def column(label, path = nil, &block)
15
- @columns << ::Eac::DataTableHelper::Column.new(label, path, block)
15
+ @columns << ::EacRailsUtils::DataTableHelper::Column.new(label, path, block)
16
16
  end
17
17
  end
18
18
  end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module EacRailsUtils
4
6
  module MenusHelper
7
+ ::EacRubyUtils.require_sub __FILE__
8
+
5
9
  def dropdown_menu(entries)
6
10
  entries = DataBuilder.new(self).build(entries)
7
11
  return nil unless entries
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module MenusHelper
5
5
  # http://bootsnipp.com/snippets/featured/multi-level-dropdown-menu-bs3
6
6
  class BootstrapGuiBuilder
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module MenusHelper
5
5
  class DataBuilder
6
6
  def initialize(view)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  module MenusHelper
5
5
  class GuiBuilder
6
6
  def initialize(view)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  class CpfValidator < ActiveModel::EachValidator
5
5
  def validate_each(record, attribute, value)
6
6
  return if Cpf.new(value).valid?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Eac
3
+ module EacRailsUtils
4
4
  # https://stackoverflow.com/questions/10070786/rails-3-validation-presence-false
5
5
  class NoPresenceValidator < ActiveModel::EachValidator
6
6
  def validate_each(record, attribute, _value)
@@ -1,44 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/dependencies'
3
+ require 'eac_ruby_utils/require_sub'
4
4
 
5
5
  module EacRailsUtils
6
- require 'activemodel/associations'
7
- require 'nested_form_fields'
8
- require 'ofx-parser'
9
- require 'virtus'
10
-
11
- require 'eac_rails_utils/patches/action_controller_base'
12
- require 'eac_rails_utils/patches/model_attribute_required'
13
- require 'eac_rails_utils/patches/ofx_parser'
14
- require 'eac_rails_utils/engine'
15
- require 'eac_rails_utils/tableless_model'
16
- require 'eac/cpf_validator'
17
- require 'eac/common_form_helper/form_builder/association_select_field'
18
- require 'eac/common_form_helper/form_builder/common_text_fields'
19
- require 'eac/common_form_helper/form_builder/currency_field'
20
- require 'eac/common_form_helper/form_builder/date_field'
21
- require 'eac/common_form_helper/form_builder/fields_for'
22
- require 'eac/common_form_helper/form_builder/file_field'
23
- require 'eac/common_form_helper/form_builder/radio_select_field'
24
- require 'eac/common_form_helper/form_builder/searchable_association_field'
25
- require 'eac/common_form_helper/form_builder/select_field'
26
- require 'eac/common_form_helper/form_builder/time_field'
27
- require 'eac/common_form_helper/form_builder/year_month_field'
28
- require 'eac/common_form_helper/form_builder'
29
- require 'eac/common_form_helper'
30
- require 'eac/data_table_helper'
31
- require 'eac/htmlbeautifier'
32
- require 'eac/inequality_queries'
33
- require 'eac/menus_helper'
34
- require 'eac/menus_helper/bootstrap_gui_builder'
35
- require 'eac/menus_helper/data_builder'
36
- require 'eac/menus_helper/gui_builder'
37
- require 'eac/model'
38
- require 'eac/no_presence_validator'
39
- require 'eac/test_utils'
40
-
41
- ActionView::Base.include Eac::CommonFormHelper
42
- ActionView::Base.include Eac::DataTableHelper
43
- ActionView::Base.include Eac::MenusHelper
6
+ ::EacRubyUtils.require_sub __FILE__
44
7
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'nested_form_fields'
4
+
3
5
  module EacRailsUtils
4
6
  class Engine < ::Rails::Engine; end
5
7
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'htmlbeautifier'
4
4
 
5
- module Eac
5
+ module EacRailsUtils
6
6
  class Htmlbeautifier
7
7
  def self.beautify(string)
8
8
  ::HtmlBeautifier.beautify(string, tab_stops: 2) + "\n"
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ ::EacRubyUtils.require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ module AttributeRequired
8
+ extend ::ActiveSupport::Concern
9
+
10
+ class << self
11
+ def required?(model_class_or_record, attribute)
12
+ model = model_class_or_record_to_model(model_class_or_record)
13
+ record = model.new
14
+ record.validate
15
+ record.errors.key?(attribute.to_sym)
16
+ end
17
+
18
+ private
19
+
20
+ def model_class_or_record_to_model(model_class_or_record)
21
+ model_class_or_record.is_a?(::Class) ? model_class_or_record : model_class_or_record.class
22
+ end
23
+ end
24
+
25
+ included do
26
+ extend ClassMethods
27
+ include InstanceMethods
28
+ end
29
+
30
+ module ClassMethods
31
+ def column_required?(column)
32
+ ::EacRailsUtils::Models::AttributeRequired.required?(self, column)
33
+ end
34
+ end
35
+
36
+ module InstanceMethods
37
+ def attribute_required?(column)
38
+ self.class.column_required?(column)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRailsUtils
4
+ module Models
5
+ module FetchErrors
6
+ # Adiciona as mensagens de erro de record. As mensagens de uma coluna X em record
7
+ # serão adicionadas na coluna X em self. Se options[:default_column] for especificado
8
+ # as mensagens da coluna X de record em que X não existe em self serão adicionadas
9
+ # na coluna options[:default_column].
10
+ # Um array de colunas pode ser passado em options[:skip] de colunas em record que não
11
+ # terão suas falhas adicionadas.
12
+ def fetch_record_errors(record, options = {})
13
+ record.errors.keys.each do |column|
14
+ fetch_column_errors(record, column, column, options)
15
+ end
16
+ end
17
+
18
+ # Similar a fetch_record_errors, mas torna possível especificar, através de mapping,
19
+ # colunas-alvo em self com nomes diferentes das colunas-fonte em record.
20
+ # mapping tem o formato { record_column => self_column }.
21
+ def fetch_record_errors_by_mapping(record, mapping, options = {})
22
+ mapping.each do |record_column, self_column|
23
+ fetch_column_errors(record, record_column, self_column, options)
24
+ end
25
+ end
26
+
27
+ def fetch_column_errors(record, record_column, self_column, options = {})
28
+ return if options[:skip]&.include?(record_column)
29
+
30
+ record.errors[record_column].each do |message|
31
+ fetch_error_column_message(self_column, message, options[:default_column],
32
+ "#{record.class.human_attribute_name(record_column)}: ")
33
+ end
34
+ end
35
+
36
+ # Verifica se uma coluna existe.
37
+ def column?(column)
38
+ respond_to?(column) && respond_to?("#{column}=")
39
+ end
40
+
41
+ def save_or_raise
42
+ raise "Falha ao tentar salvar #{self.class.name}: #{errors_to_string}" unless save
43
+
44
+ self
45
+ end
46
+
47
+ private
48
+
49
+ def fetch_error_column_message(column, message, default_column, default_column_message_prefix)
50
+ build_self_columns_messages(column, message, default_column,
51
+ default_column_message_prefix).each do |k, v|
52
+ if column?(k)
53
+ add_error_message(k, v)
54
+ break
55
+ end
56
+ end
57
+ end
58
+
59
+ # Adiciona uma mensagem de erro a uma coluna somente se a coluna
60
+ # ainda não a possui
61
+ def add_error_message(column, message)
62
+ return if errors[column].include?(message)
63
+
64
+ errors.add(column, message)
65
+ end
66
+
67
+ # Produz uma lista de campos-mensagens, em ordem de preferência,
68
+ # que podem receber uma mensagem de falha.
69
+ def build_self_columns_messages(column, message, default_column,
70
+ default_column_message_prefix)
71
+ r = { column => message }
72
+ m = /^(.+)_id$/.match(column)
73
+ if m
74
+ r[m[1]] = message
75
+ else
76
+ r["#{column}_id"] = message
77
+ end
78
+ r[default_column] = "#{default_column_message_prefix}#{message}" if default_column
79
+ r
80
+ end
81
+
82
+ def errors_to_string
83
+ b = ''
84
+ errors.messages.each do |field, messages|
85
+ b += ' / ' if b != ''
86
+ b += field.to_s + ': ' + messages.to_s
87
+ end
88
+ b
89
+ end
90
+ end
91
+ end
92
+ end