eac_rails_utils 0.11.2 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb6393471b8d317c18c157556614ea1f40444ca56b5950998a8c51157f0101d8
4
- data.tar.gz: b9531813f5e6283a377e0044c1b1ad1d72336701d2e2a280fa3a0ebef6ce5102
3
+ metadata.gz: 00fd5aed91f9c11d3b6ab34cd532aff0c5ed10da72ba420488a060f93bbd8540
4
+ data.tar.gz: f66267fb4600635f05bcb15475fe5186c31663e9db4a00494add6e59dc603578
5
5
  SHA512:
6
- metadata.gz: c111435248f4358873989293cc8b49826f15c01bcd78186411bb39a582c0364626ac1ec8b2ed1d4d7d2ba81b315da4eda805c13582a562a9a9881d4173ad19f4
7
- data.tar.gz: add93d610c6303fe8687f193854af9527b48c2e31ff705bb849ccc346670055d1640d3dae4293637ac06733af73dcc1cbb7f15f7dffe9ad6562019761a4d42e8
6
+ metadata.gz: 9b6aa1e4febf6826c760daf62ad9c280b3b708beb00800644cffdd88021acdd69ef41262f5ff395616eefa63c240e214a0ef3eb1f4028a1fab5f5f5cfa382acd
7
+ data.tar.gz: 5f2a4f27e090663895222931a57bdb63eae96a4b679a95a544a47699e7c0a5e733c47968cf13fa3f628c3c90381d3796a8d54989b3f7f38a674cd94454f7936a
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/require_sub'
3
+ require 'action_view/helpers/form_helper'
4
+ require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module EacRailsUtils
6
7
  module CommonFormHelper
7
- ::EacRubyUtils.require_sub __FILE__
8
+ common_concern do
9
+ include ::ActionView::Helpers::FormHelper
10
+ end
11
+ require_sub __FILE__
8
12
 
9
13
  def common_form(model_instance, options = {}, &block)
10
14
  submit_label = options.delete(:submit_label)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/require_sub'
4
- require 'eac_rails_utils/models/attribute_required'
4
+ require 'eac_rails_utils/models/validations'
5
5
 
6
6
  module EacRailsUtils
7
7
  module CommonFormHelper
@@ -93,8 +93,8 @@ module EacRailsUtils
93
93
 
94
94
  def field_label(field_name, label, required)
95
95
  if required.nil?
96
- required = ::EacRailsUtils::Models::AttributeRequired
97
- .required?(model_instance, field_name)
96
+ required = ::EacRailsUtils::Models::Validations
97
+ .column_required?(model_instance, field_name)
98
98
  end
99
99
  @form.label(field_name, label, class: required ? 'required' : 'optional')
100
100
  end
@@ -4,24 +4,24 @@ module EacRailsUtils
4
4
  module LinksHelper
5
5
  def short_delete_link(object)
6
6
  short_object_link object, '', class: 'delete_link', method: :delete, target: '_blank',
7
- title: ::I18n.t('eac_rails_base0.links.delete_object',
7
+ title: ::I18n.t('eac_rails_utils.links.delete_object',
8
8
  label: object.to_s),
9
9
  data: {
10
- confirm: ::I18n.t('eac_rails_base0.links.delete_confirm',
10
+ confirm: ::I18n.t('eac_rails_utils.links.delete_confirm',
11
11
  label: object.to_s)
12
12
  }
13
13
  end
14
14
 
15
15
  def short_edit_link(object)
16
16
  short_object_link object, 'edit', class: 'edit_link', target: '_blank',
17
- title: ::I18n.t('eac_rails_base0.links.edit_object',
17
+ title: ::I18n.t('eac_rails_utils.links.edit_object',
18
18
  label: object.to_s)
19
19
  end
20
20
 
21
21
  def short_goto_link(url)
22
22
  value_or_sign(url, '') do |value|
23
23
  link_to '', value, class: 'goto_link', target: '_blank',
24
- title: ::I18n.t('eac_rails_base0.links.goto_url', url: value.to_s),
24
+ title: ::I18n.t('eac_rails_utils.links.goto_url', url: value.to_s),
25
25
  rel: 'noopener'
26
26
  end
27
27
  end
@@ -54,7 +54,7 @@ module EacRailsUtils
54
54
  short_object_link object,
55
55
  detail ? 'detail' : nil,
56
56
  class: 'show_link', target: '_blank',
57
- title: ::I18n.t('eac_rails_base0.links.show_object', label: object.to_s)
57
+ title: ::I18n.t('eac_rails_utils.links.show_object', label: object.to_s)
58
58
  end
59
59
 
60
60
  def short_object_link(object, action = nil, options = {})
@@ -0,0 +1,8 @@
1
+ en:
2
+ eac_rails_utils:
3
+ links:
4
+ delete_confirm: Do you confirm "%{label}"'s removal?
5
+ delete_object: Remove "%{label}".
6
+ edit_object: Edit "%{label}".
7
+ goto_url: Go to %{url}.
8
+ show_object: Show "%{label}".
@@ -0,0 +1,8 @@
1
+ pt-BR:
2
+ eac_rails_utils:
3
+ links:
4
+ delete_confirm: Confirma a remoção de "%{label}"?
5
+ delete_object: Remover "%{label}".
6
+ edit_object: Editar "%{label}".
7
+ goto_url: Ir para %{url}.
8
+ show_object: Mostrar "%{label}".
@@ -10,6 +10,16 @@ module EacRailsUtils
10
10
  include Virtus.model
11
11
  include ActiveModel::Associations
12
12
 
13
+ class << self
14
+ def columns
15
+ attribute_set.each.to_a
16
+ end
17
+
18
+ def columns_names
19
+ columns.map(&:name)
20
+ end
21
+ end
22
+
13
23
  def initialize(values = {})
14
24
  super(build_attributes(values))
15
25
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacRailsUtils
6
+ module Models
7
+ module Validations
8
+ common_concern
9
+
10
+ class << self
11
+ def column_errors(model_or_record, column, value)
12
+ model = model_class_or_record_to_model(model_or_record)
13
+ record = model.new
14
+ model.validators_on(column).each do |validator|
15
+ next if validator.options[:allow_blank] && value.blank?
16
+ next if validator.options[:allow_nil] && value.nil?
17
+
18
+ validator.validate_each(record, column, value)
19
+ end
20
+ record.errors
21
+ end
22
+
23
+ def column_required?(model_or_record, column)
24
+ !column_valid?(model_or_record, column, nil)
25
+ end
26
+
27
+ def column_valid?(model_or_record, column, value)
28
+ column_errors(model_or_record, column, value).empty?
29
+ end
30
+
31
+ private
32
+
33
+ def model_class_or_record_to_model(model_class_or_record)
34
+ model_class_or_record.is_a?(::Class) ? model_class_or_record : model_class_or_record.class
35
+ end
36
+ end
37
+
38
+ module ClassMethods
39
+ def column_errors(column, value)
40
+ ::EacRailsUtils::Models::Validations.column_errors(self, column, value)
41
+ end
42
+
43
+ def column_required?(column)
44
+ ::EacRailsUtils::Models::Validations.column_required?(self, column)
45
+ end
46
+
47
+ def column_valid?(attribute, value)
48
+ column_errors(attribute, value).empty?
49
+ end
50
+
51
+ private
52
+
53
+ def model_class_or_record_to_model(model_class_or_record)
54
+ model_class_or_record.is_a?(::Class) ? model_class_or_record : model_class_or_record.class
55
+ end
56
+ end
57
+
58
+ def attribute_errors(attribute)
59
+ self.class.column_errors(attribute, send(attribute))
60
+ end
61
+
62
+ def attribute_required?(attribute)
63
+ self.class.column_required?(attribute)
64
+ end
65
+
66
+ def attribute_valid?(attribute)
67
+ attribute_errors(attribute).empty?
68
+ end
69
+ end
70
+ end
71
+ end
@@ -27,6 +27,8 @@ module ActiveModel
27
27
  module Associations
28
28
  module Hooks
29
29
  def self.init
30
+ return unless ::Rails.version < '5'
31
+
30
32
  ActiveSupport.on_load(:active_record) do
31
33
  ActiveRecord::Associations::AssociationScope.prepend(
32
34
  ::EacRailsUtils::Patches::ActiveModelAssociations::ScopeExtensionPatch
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRailsUtils
4
- VERSION = '0.11.2'
4
+ VERSION = '0.12.0'
5
5
  end
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -1,10 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_rails_utils/models/attribute_required'
4
-
5
3
  class User < ActiveRecord::Base
6
- include ::EacRailsUtils::Models::AttributeRequired
7
-
8
4
  belongs_to :job
9
5
 
10
6
  validates :job, presence: true
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ APP_PATH = File.expand_path('../config/application', __dir__)
5
+ require_relative '../config/boot'
6
+ require 'rails/commands'
@@ -9,6 +9,6 @@ require 'eac_rails_utils'
9
9
 
10
10
  module Dummy
11
11
  class Application < Rails::Application
12
- config.active_record.raise_in_transactional_callbacks = true
12
+ config.active_record.raise_in_transactional_callbacks = true if ::Rails.version < '5'
13
13
  end
14
14
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class CreateUsers < ActiveRecord::Migration
3
+ class CreateUsers < (
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
+ )
4
6
  def change
5
7
  create_table :users do |t|
6
8
  t.string :name
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class CreateJobs < ActiveRecord::Migration
3
+ class CreateJobs < (
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
+ )
4
6
  def change
5
7
  create_table :jobs do |t|
6
8
  t.string :name
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AddJobToUsers < ActiveRecord::Migration
3
+ class AddJobToUsers < (
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
+ )
4
6
  def change
5
7
  add_belongs_to :users, :job
6
8
  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.11.2
4
+ version: 0.12.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: 2020-06-26 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel-associations
@@ -44,20 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.33'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.33.1
47
+ version: '0.49'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '0.33'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 0.33.1
54
+ version: '0.49'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: htmlbeautifier
63
57
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +122,20 @@ dependencies:
128
122
  - - "~>"
129
123
  - !ruby/object:Gem::Version
130
124
  version: '0.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
131
139
  - !ruby/object:Gem::Dependency
132
140
  name: sqlite3
133
141
  requirement: !ruby/object:Gem::Requirement
@@ -175,6 +183,8 @@ files:
175
183
  - app/helpers/eac_rails_utils/open_graph_protocol_helper.rb
176
184
  - app/validators/eac_rails_utils/cpf_validator.rb
177
185
  - app/validators/eac_rails_utils/no_presence_validator.rb
186
+ - config/locales/en.yml
187
+ - config/locales/pt-BR.yml
178
188
  - lib/assets/javascripts/currency_field.js
179
189
  - lib/assets/javascripts/eac_rails_utils.js
180
190
  - lib/assets/javascripts/input_searchable.js
@@ -190,18 +200,20 @@ files:
190
200
  - lib/eac_rails_utils/engine.rb
191
201
  - lib/eac_rails_utils/htmlbeautifier.rb
192
202
  - lib/eac_rails_utils/models.rb
193
- - lib/eac_rails_utils/models/attribute_required.rb
194
203
  - lib/eac_rails_utils/models/fetch_errors.rb
195
204
  - lib/eac_rails_utils/models/inequality_queries.rb
196
205
  - lib/eac_rails_utils/models/tableless.rb
197
206
  - lib/eac_rails_utils/models/test_utils.rb
207
+ - lib/eac_rails_utils/models/validations.rb
198
208
  - lib/eac_rails_utils/patches.rb
199
209
  - lib/eac_rails_utils/patches/action_controller_base.rb
200
210
  - lib/eac_rails_utils/patches/active_model_associations.rb
201
211
  - lib/eac_rails_utils/version.rb
202
212
  - test/dummy/Rakefile
213
+ - test/dummy/app/assets/config/manifest.js
203
214
  - test/dummy/app/models/job.rb
204
215
  - test/dummy/app/models/user.rb
216
+ - test/dummy/bin/rails
205
217
  - test/dummy/config.ru
206
218
  - test/dummy/config/application.rb
207
219
  - test/dummy/config/boot.rb
@@ -215,12 +227,9 @@ files:
215
227
  - test/dummy/db/migrate/20160415143123_create_jobs.rb
216
228
  - test/dummy/db/migrate/20160415143229_add_job_to_users.rb
217
229
  - test/dummy/db/schema.rb
218
- - test/helpers/eac_rails_utils/common_form_helper_test.rb
219
230
  - test/helpers/eac_rails_utils/data_table_test_helper_test.rb
220
231
  - test/helpers/eac_rails_utils/formatter_helper_test.rb
221
- - test/lib/eac_rails_utils/models/attribute_required_test.rb
222
232
  - test/lib/eac_rails_utils/models/fetch_errors_test.rb
223
- - test/lib/eac_rails_utils/models/tableless_test.rb
224
233
  - test/test_helper.rb
225
234
  - test/validators/cpf_validator_test.rb
226
235
  homepage:
@@ -241,8 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
250
  - !ruby/object:Gem::Version
242
251
  version: '0'
243
252
  requirements: []
244
- rubyforge_project:
245
- rubygems_version: 2.7.7
253
+ rubygems_version: 3.0.8
246
254
  signing_key:
247
255
  specification_version: 4
248
256
  summary: Código reutilizável para as aplicações Rails da E.A.C..
@@ -263,11 +271,10 @@ test_files:
263
271
  - test/dummy/db/migrate/20160415125333_create_users.rb
264
272
  - test/dummy/app/models/job.rb
265
273
  - test/dummy/app/models/user.rb
274
+ - test/dummy/app/assets/config/manifest.js
275
+ - test/dummy/bin/rails
266
276
  - test/test_helper.rb
267
277
  - test/validators/cpf_validator_test.rb
268
- - test/helpers/eac_rails_utils/common_form_helper_test.rb
269
278
  - test/helpers/eac_rails_utils/data_table_test_helper_test.rb
270
279
  - test/helpers/eac_rails_utils/formatter_helper_test.rb
271
- - test/lib/eac_rails_utils/models/attribute_required_test.rb
272
- - test/lib/eac_rails_utils/models/tableless_test.rb
273
280
  - test/lib/eac_rails_utils/models/fetch_errors_test.rb
@@ -1,43 +0,0 @@
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
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module EacRailsUtils
6
- class CommonFormHelperTest < ActionView::TestCase
7
- include ::EacRailsUtils::CommonFormHelper
8
-
9
- setup do
10
- reset_test_database
11
- end
12
-
13
- test 'test common form' do
14
- common_form(User.new) do |f|
15
- f.text_field :name
16
- f.email_field :email
17
- f.password_field :password
18
- f.searchable_association_field :job, url: search_jobs_path
19
- end
20
- end
21
-
22
- test 'fields for' do
23
- common_form(Job.new) do |f|
24
- f.text_field :name
25
- f.fields_for :users do |nf|
26
- nf.text_field :name
27
- nf.email_field :email
28
- nf.password_field :password
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module EacRailsUtils
6
- module Patches
7
- class ModelAttributeRequiredTest < ActiveSupport::TestCase
8
- setup do
9
- reset_test_database
10
- end
11
-
12
- test 'column with presence validator should be required' do
13
- assert User.column_required?(:password)
14
- end
15
-
16
- test 'column with format validator should be required' do
17
- assert User.column_required?(:email)
18
- end
19
-
20
- test 'column without validators should be optional' do
21
- assert_not User.column_required?(:name)
22
- end
23
-
24
- test 'association with presence validator should be required' do
25
- assert User.column_required?(:job)
26
- end
27
-
28
- test 'required column in active model' do
29
- assert ActiveModelStub.column_required?(:name), 'name is required'
30
- assert_not ActiveModelStub.column_required?(:age), 'age is optional'
31
- end
32
-
33
- class ActiveModelStub
34
- include ActiveModel::Model
35
- include ::EacRailsUtils::Models::AttributeRequired
36
-
37
- attr_accessor :name, :age
38
- validates :name, presence: true
39
- end
40
- end
41
- end
42
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- module EacRailsUtils
6
- module Models
7
- class TablelessTest < ActiveSupport::TestCase
8
- class Stub < ::EacRailsUtils::Models::Tableless
9
- attribute :tempo, DateTime
10
- end
11
-
12
- test 'date time array values' do
13
- stub = Stub.new('tempo(1i)' => '9', 'tempo(2i)' => '10', 'tempo(3i)' => '11',
14
- 'tempo(4i)' => '12', 'tempo(5i)' => '13', 'tempo(6i)' => '14')
15
- assert stub.tempo.is_a?(DateTime), "Class: |#{stub.tempo.class}|, Value: |#{stub.tempo}|"
16
- assert_equal 9, stub.tempo.year, 'Year'
17
- assert_equal 10, stub.tempo.month, 'Month'
18
- assert_equal 11, stub.tempo.day, 'Day'
19
- assert_equal 12, stub.tempo.hour, 'Hour'
20
- assert_equal 13, stub.tempo.minute, 'Minute'
21
- assert_equal 14, stub.tempo.second, 'Second'
22
- end
23
- end
24
- end
25
- end