eac_rails_utils 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -0
  3. data/app/helpers/eac_rails_utils/formatter_helper.rb +2 -0
  4. data/app/helpers/eac_rails_utils/links_helper.rb +4 -1
  5. data/app/helpers/eac_rails_utils/open_graph_protocol_helper.rb +2 -0
  6. data/lib/eac/common_form_helper.rb +3 -0
  7. data/lib/eac/common_form_helper/form_builder.rb +2 -0
  8. data/lib/eac/common_form_helper/form_builder/association_select_field.rb +4 -1
  9. data/lib/eac/common_form_helper/form_builder/common_text_fields.rb +3 -2
  10. data/lib/eac/common_form_helper/form_builder/currency_field.rb +13 -11
  11. data/lib/eac/common_form_helper/form_builder/date_field.rb +2 -0
  12. data/lib/eac/common_form_helper/form_builder/fields_for.rb +2 -0
  13. data/lib/eac/common_form_helper/form_builder/file_field.rb +1 -0
  14. data/lib/eac/common_form_helper/form_builder/radio_select_field.rb +4 -1
  15. data/lib/eac/common_form_helper/form_builder/searchable_association_field.rb +6 -2
  16. data/lib/eac/common_form_helper/form_builder/select_field.rb +2 -0
  17. data/lib/eac/common_form_helper/form_builder/time_field.rb +1 -0
  18. data/lib/eac/common_form_helper/form_builder/year_month_field.rb +1 -0
  19. data/lib/eac/cpf_validator.rb +7 -3
  20. data/lib/eac/data_table_helper.rb +1 -0
  21. data/lib/eac/data_table_helper/column.rb +5 -2
  22. data/lib/eac/data_table_helper/data_table.rb +11 -9
  23. data/lib/eac/data_table_helper/setup.rb +1 -0
  24. data/lib/eac/htmlbeautifier.rb +2 -0
  25. data/lib/eac/inequality_queries.rb +2 -1
  26. data/lib/eac/menus_helper.rb +5 -1
  27. data/lib/eac/menus_helper/bootstrap_gui_builder.rb +7 -4
  28. data/lib/eac/menus_helper/data_builder.rb +6 -1
  29. data/lib/eac/menus_helper/gui_builder.rb +5 -2
  30. data/lib/eac/model.rb +8 -5
  31. data/lib/eac/no_presence_validator.rb +2 -2
  32. data/lib/eac/test_utils.rb +17 -12
  33. data/lib/eac_rails_utils.rb +4 -5
  34. data/lib/eac_rails_utils/engine.rb +1 -0
  35. data/lib/eac_rails_utils/patches/action_controller_base.rb +1 -0
  36. data/lib/eac_rails_utils/patches/model_attribute_required.rb +3 -0
  37. data/lib/eac_rails_utils/patches/ofx_parser.rb +5 -4
  38. data/lib/eac_rails_utils/tableless_model.rb +6 -4
  39. data/lib/eac_rails_utils/version.rb +2 -1
  40. data/test/app/helpers/eac_rails_utils/formatter_helper_test.rb +1 -0
  41. data/test/dummy/Rakefile +3 -1
  42. data/test/dummy/app/models/job.rb +2 -0
  43. data/test/dummy/app/models/user.rb +2 -0
  44. data/test/dummy/config.ru +2 -0
  45. data/test/dummy/config/application.rb +3 -1
  46. data/test/dummy/config/boot.rb +3 -1
  47. data/test/dummy/config/environment.rb +3 -1
  48. data/test/dummy/config/environments/test.rb +2 -0
  49. data/test/dummy/config/routes.rb +2 -0
  50. data/test/dummy/db/migrate/20160415125333_create_users.rb +2 -0
  51. data/test/dummy/db/migrate/20160415143123_create_jobs.rb +2 -0
  52. data/test/dummy/db/migrate/20160415143229_add_job_to_users.rb +2 -0
  53. data/test/lib/eac/common_form_helper_test.rb +2 -0
  54. data/test/lib/eac/cpf_validator_test.rb +2 -0
  55. data/test/lib/eac/{data_table_test_helper.rb → data_table_test_helper_test.rb} +2 -1
  56. data/test/lib/eac/model_test.rb +2 -0
  57. data/test/lib/eac_rails_utils/patches/model_attribute_required_test.rb +2 -0
  58. data/test/lib/eac_rails_utils/tableless_model_test.rb +1 -1
  59. data/test/test_helper.rb +3 -1
  60. metadata +65 -51
  61. data/lib/eac/parsers/files_test.rb +0 -63
  62. data/lib/eac/source_target_fixtures.rb +0 -66
  63. data/test/lib/eac/parsers/files_test_test.rb +0 -27
  64. data/test/lib/eac/parsers/ok_test_files/a.source.yaml +0 -1
  65. data/test/lib/eac/parsers/ok_test_files/a.target.yaml +0 -1
  66. data/test/lib/eac/parsers/ok_test_files/b.source.yaml +0 -1
  67. data/test/lib/eac/parsers/ok_test_files/b.target.yaml +0 -1
  68. data/test/lib/eac/source_target_fixtures_test.rb +0 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6110af17107237d774ea52a1ca25220fd711671526b1eeda16db466f62bdca6
4
- data.tar.gz: 67908bcdc2622d86dc2b9f7960963e2efba51150320542f028d7d433c1190b8d
3
+ metadata.gz: e5d1603f1c60e9d64e4d2acc9e399fbef95660bde8e737a4c739481b6455733c
4
+ data.tar.gz: baa588fd3f6095129486e021671f8a934d6d6728e1bbea4a2742b375dd8b5572
5
5
  SHA512:
6
- metadata.gz: 0a183c0e6065f379848fac12323028fc466cf910de11585ca09855a2c915f54aaffc0371424fef0e392a598291986148ba3af6f2d737f46de5d50314f008491e
7
- data.tar.gz: 5f9fb0839dcbf3db537cfdfc736accde82399f74452c283044a7f7cf97e844e90fd05191c6c7b1d3fb5b94af71c6a8d654ad9ac716980316eb95d122800a0748
6
+ metadata.gz: d9c2b12877f921a3fa1c5cf23a36a0b6dae7e048e1a6814cc062c3238d3abad9e14e714f82d1415b3a706fe4f9c1bbcd10da0274ce28acc90bdb7cb09b0b0ba4
7
+ data.tar.gz: 6e83568342b4b9257d3c2c87959256b3c728e8e259b17991f71709a1ed10e80a42d9d4e1b4a7b21231a285dcb2013cc45ef7e609d32eb0d035edb7e99fa6124c
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
4
  require 'bundler/setup'
3
5
  rescue LoadError
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module EacRailsUtils
3
4
  module FormatterHelper
4
5
  extend ::ActiveSupport::Concern
@@ -10,6 +11,7 @@ module EacRailsUtils
10
11
  def value_or_sign(value, sign = '-', &block)
11
12
  return sign if value.blank?
12
13
  return yield(value) if block
14
+
13
15
  value
14
16
  end
15
17
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module EacRailsUtils
3
4
  module LinksHelper
4
5
  def short_delete_link(object)
@@ -20,7 +21,8 @@ module EacRailsUtils
20
21
  def short_goto_link(url)
21
22
  value_or_sign(url, '') do |value|
22
23
  link_to '', value, class: 'goto_link', target: '_blank',
23
- title: ::I18n.t('eac_rails_base0.links.goto_url', url: value.to_s)
24
+ title: ::I18n.t('eac_rails_base0.links.goto_url', url: value.to_s),
25
+ rel: 'noopener'
24
26
  end
25
27
  end
26
28
 
@@ -38,6 +40,7 @@ module EacRailsUtils
38
40
  while current_class
39
41
  path = object_path_by_class(current_class, action)
40
42
  return send(path, object) if respond_to?(path)
43
+
41
44
  tried_paths << path
42
45
  current_class = current_class.superclass
43
46
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module EacRailsUtils
3
4
  module OpenGraphProtocolHelper
4
5
  OGP_META_DEFAULT_PREFIX = 'og'
@@ -89,6 +90,7 @@ module EacRailsUtils
89
90
 
90
91
  def tag
91
92
  return ::ActiveSupport::SafeBuffer.new unless content?
93
+
92
94
  view.tag(:meta, prefix: view.ogp_prefix, property: property_value, content: content)
93
95
  end
94
96
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  def common_form(model_instance, options = {}, &block)
@@ -29,6 +31,7 @@ module Eac
29
31
  s = ActiveSupport::SafeBuffer.new
30
32
  model_instance.errors.each do |k, v|
31
33
  next if field_errors_showed.include?(k)
34
+
32
35
  s << content_tag(:div, "#{k}: #{v}", class: 'error')
33
36
  end
34
37
  s
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
@@ -67,6 +68,7 @@ module Eac
67
68
 
68
69
  def field_errors_errors(field_name)
69
70
  return nil unless model_instance.errors.messages[field_name]
71
+
70
72
  s = ActiveSupport::SafeBuffer.new
71
73
  model_instance.errors.messages[field_name].each { |error| s << field_error(error) }
72
74
  @field_errors_showed.add(field_name)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -31,7 +33,8 @@ module Eac
31
33
  if model_instance.class.respond_to?(:reflect_on_association)
32
34
  return model_instance.class.reflect_on_association(field_name).send(method)
33
35
  end
34
- fail "#{model_instance.class} não possui um método \"reflect_on_association\". " \
36
+
37
+ raise "#{model_instance.class} não possui um método \"reflect_on_association\". " \
35
38
  "Defina explicitamente a opção :#{key}"
36
39
  end
37
40
  end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
5
6
  module CommonTextFields
6
- %w(email password text).each do |t|
7
+ %w[email password text].each do |t|
7
8
  class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
8
9
  def #{t}_field(field_name, options = {}) # def text_field(field_name, options = {})
9
10
  field(field_name, options) do # field(field_name, options) do
@@ -13,7 +14,7 @@ module Eac
13
14
  input_options) # class: 'form-control')
14
15
  end # end
15
16
  end # end
16
- RUBY_EVAL
17
+ RUBY_EVAL
17
18
  end
18
19
  end
19
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -7,8 +9,8 @@ module Eac
7
9
  visible_id = SecureRandom.hex(5)
8
10
  cf = field(field_name, options) do
9
11
  form.hidden_field(field_name, id: hidden_id) <<
10
- helper.text_field_tag("#{field_name}_visible", '',
11
- id: visible_id, class: 'form-control')
12
+ helper.text_field_tag("#{field_name}_visible", '',
13
+ id: visible_id, class: 'form-control')
12
14
  end
13
15
  cf << javascript_currency_mask(hidden_id, visible_id)
14
16
  end
@@ -23,15 +25,15 @@ module Eac
23
25
  end
24
26
 
25
27
  def mask_money_options
26
- <<-eos
27
- {
28
- prefix: '#{I18n.t('number.currency.format.unit')} ',
29
- allowNegative: true,
30
- thousands: '#{I18n.t('number.currency.format.delimiter')}',
31
- decimal: '#{I18n.t('number.currency.format.separator')}',
32
- affixesStay: false
33
- }
34
- eos
28
+ <<~JSON_CODE
29
+ {
30
+ prefix: '#{I18n.t('number.currency.format.unit')} ',
31
+ allowNegative: true,
32
+ thousands: '#{I18n.t('number.currency.format.delimiter')}',
33
+ decimal: '#{I18n.t('number.currency.format.separator')}',
34
+ affixesStay: false
35
+ }
36
+ JSON_CODE
35
37
  end
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -35,7 +37,8 @@ module Eac
35
37
  if model_instance.class.respond_to?(:reflect_on_association)
36
38
  return model_instance.class.reflect_on_association(field_name).send(method)
37
39
  end
38
- fail "#{model_instance.class} não possui um método \"reflect_on_association\". " \
40
+
41
+ raise "#{model_instance.class} não possui um método \"reflect_on_association\". " \
39
42
  "Defina explicitamente a opção :#{key}"
40
43
  end
41
44
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module CommonFormHelper
3
5
  class FormBuilder
@@ -42,17 +44,19 @@ module Eac
42
44
  end
43
45
 
44
46
  def association_column
45
- @form_builder.model_instance && @form_builder.model_instance.send(@field_name)
47
+ @form_builder.model_instance&.send(@field_name)
46
48
  end
47
49
 
48
50
  def initial_id
49
51
  return association_column.id if association_column
52
+
50
53
  ''
51
54
  end
52
55
 
53
56
  def initial_label
54
57
  return association_column.to_s if association_column
55
58
  return params[visible_input_name] if params.key?(visible_input_name)
59
+
56
60
  ''
57
61
  end
58
62
 
@@ -66,7 +70,7 @@ module Eac
66
70
 
67
71
  def json_options
68
72
  r = {}
69
- [:hidden_input_id, :visible_input_id, :initial_id, :initial_label, :url].each do |k|
73
+ %i[hidden_input_id visible_input_id initial_id initial_label url].each do |k|
70
74
  r[k] = send(k)
71
75
  end
72
76
  r.to_json
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
@@ -19,6 +20,7 @@ module Eac
19
20
  def listable_select_options(field_name)
20
21
  return nil unless model_instance.class.respond_to?(:lists)
21
22
  return nil unless model_instance.class.lists.respond_to?(field_name)
23
+
22
24
  model_instance.class.lists.send(field_name).options
23
25
  end
24
26
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module CommonFormHelper
4
5
  class FormBuilder
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  class CpfValidator < ActiveModel::EachValidator
3
5
  def validate_each(record, attribute, value)
4
6
  return if Cpf.new(value).valid?
7
+
5
8
  record.errors[attribute] << (options[:message] ||
6
9
  'CPF inválido (9 caracteres, somente dígitos)')
7
10
  end
@@ -13,6 +16,7 @@ module Eac
13
16
 
14
17
  def valid?
15
18
  return false if input_invalid?
19
+
16
20
  digito_verificador1_calculo == values[9] && digito_verificador2_calculo == values[10]
17
21
  end
18
22
 
@@ -25,8 +29,8 @@ module Eac
25
29
  end
26
30
 
27
31
  def null?
28
- %w(12345678909 11111111111 22222222222 33333333333 44444444444 55555555555
29
- 66666666666 77777777777 88888888888 99999999999 00000000000).member?(digits.join)
32
+ %w[12345678909 11111111111 22222222222 33333333333 44444444444 55555555555
33
+ 66666666666 77777777777 88888888888 99999999999 00000000000].member?(digits.join)
30
34
  end
31
35
 
32
36
  def digits
@@ -53,7 +57,7 @@ module Eac
53
57
  c -= 1
54
58
  end
55
59
  s -= (11 * (s / 11))
56
- (s == 0 || s == 1) ? 0 : 11 - s
60
+ [0, 1].include?(s) ? 0 : 11 - s
57
61
  end
58
62
  end
59
63
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_dependency 'eac/data_table_helper/column'
3
4
  require_dependency 'eac/data_table_helper/setup'
4
5
  require_dependency 'eac/data_table_helper/data_table'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module DataTableHelper
4
5
  class Column
@@ -12,8 +13,8 @@ module Eac
12
13
  @block = block
13
14
  end
14
15
 
15
- def record_value(r)
16
- v = Node.new(r, @path).value
16
+ def record_value(record)
17
+ v = Node.new(record, @path).value
17
18
  if v.present?
18
19
  @block ? @block.call(v) : v
19
20
  else
@@ -35,9 +36,11 @@ module Eac
35
36
 
36
37
  def value
37
38
  return @node if @node.nil? || @path.empty?
39
+
38
40
  subpath = @path.dup
39
41
  n = subpath.shift
40
42
  return Node.new(@node.send(n), subpath).value if @node.respond_to?(n)
43
+
41
44
  raise "Instance of #{@node.class} does not respond to #{n}"
42
45
  end
43
46
  end
@@ -32,20 +32,22 @@ module Eac
32
32
  end
33
33
  end
34
34
 
35
- def row(r)
35
+ def row(record)
36
36
  @view.content_tag(:tr) do
37
- @view.safe_join(@setup.columns.map { |c| @view.content_tag('td', c.record_value(r)) << "\n" })
37
+ @view.safe_join(
38
+ @setup.columns.map { |c| @view.content_tag('td', c.record_value(record)) << "\n" }
39
+ )
38
40
  end << "\n"
39
41
  end
40
42
 
41
43
  def script
42
- @view.javascript_tag <<EOS
43
- $(document).ready(function () {
44
- $('##{id}').DataTable({
45
- paging: #{@setup.paging ? 'true' : 'false'}
46
- });
47
- });
48
- EOS
44
+ @view.javascript_tag <<~JS_CODE
45
+ $(document).ready(function () {
46
+ $('##{id}').DataTable({
47
+ paging: #{@setup.paging ? 'true' : 'false'}
48
+ });
49
+ });
50
+ JS_CODE
49
51
  end
50
52
 
51
53
  def id
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  module DataTableHelper
4
5
  class Setup
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'htmlbeautifier'
2
4
 
3
5
  module Eac
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Eac
3
4
  # == Example:
4
5
  #
@@ -25,7 +26,7 @@ module Eac
25
26
 
26
27
  module ClassMethods
27
28
  def add_inequality_queries(attribute)
28
- %w(gt gteq lt lteq).each do |ineq|
29
+ %w[gt gteq lt lteq].each do |ineq|
29
30
  scope "by_#{attribute}_#{ineq}", lambda { |v|
30
31
  where(arel_table[attribute].send(ineq, v))
31
32
  }
@@ -1,16 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module MenusHelper
3
5
  def dropdown_menu(entries)
4
6
  entries = DataBuilder.new(self).build(entries)
5
7
  return nil unless entries
8
+
6
9
  id = SecureRandom.hex(5)
7
10
  GuiBuilder.new(self).build(entries, id: id, class: 'jMenu') <<
8
- content_tag(:script) { raw("$(document).ready(function(){$('\##{id}').jMenu();});") }
11
+ javascript_tag("$(document).ready(function(){$('\##{id}').jMenu();});")
9
12
  end
10
13
 
11
14
  def bootstrap_dropdown_menu(entries, options = {})
12
15
  entries = DataBuilder.new(self).build(entries)
13
16
  return nil unless entries
17
+
14
18
  BootstrapGuiBuilder.new(self, options).build(entries)
15
19
  end
16
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Eac
2
4
  module MenusHelper
3
5
  # http://bootsnipp.com/snippets/featured/multi-level-dropdown-menu-bs3
@@ -8,7 +10,8 @@ module Eac
8
10
  end
9
11
 
10
12
  def build(entries)
11
- fail "Argument \"entries\" is not a array" unless entries.is_a?(Array)
13
+ raise 'Argument "entries" is not a array' unless entries.is_a?(Array)
14
+
12
15
  @view.content_tag(:ul, class: "nav navbar-nav #{@options[:class]}".strip) do
13
16
  menu_entries(entries)
14
17
  end
@@ -28,12 +31,12 @@ module Eac
28
31
  elsif entry[:type] == :item
29
32
  menu_item(entry)
30
33
  else
31
- fail "Unknown menu entry type: \"#{entry[:type]}\""
34
+ raise "Unknown menu entry type: \"#{entry[:type]}\""
32
35
  end
33
36
  end
34
37
 
35
38
  def menu_group(entry)
36
- if entry[:level] == 0
39
+ if entry[:level].zero?
37
40
  menu_group_root(entry)
38
41
  else
39
42
  menu_group_sub(entry)
@@ -82,7 +85,7 @@ module Eac
82
85
  options[:method] = options[:link_method]
83
86
  options.delete(:link_method)
84
87
  end
85
- options[:class] = "#{@options[:button_class]}".strip if entry[:level] == 0
88
+ options[:class] = (@options[:button_class]).to_s.strip if entry[:level].zero?
86
89
  options
87
90
  end
88
91
  end