eac_rails_utils 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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