validation_hints 0.2.3 → 6.1.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.
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class ActiveModelHintsTest < Minitest::Test
6
+ def setup
7
+ @person = Person.new
8
+ @profile = Profile.new
9
+ end
10
+
11
+ def test_presence_hint
12
+ assert_includes @person.hints[:name], "can't be blank"
13
+ end
14
+
15
+ def test_full_messages_for_includes_human_attribute_name
16
+ messages = @person.hints.full_messages_for(:name)
17
+ assert_equal ["Name can't be blank"], messages
18
+ end
19
+
20
+ def test_has_validations_for
21
+ assert @person.has_validations_for?(:name)
22
+ refute @person.has_validations_for?(:missing)
23
+ end
24
+
25
+ def test_has_validations_on_class_and_instance
26
+ assert Person.has_validations?
27
+ assert @person.has_validations?
28
+ end
29
+
30
+ def test_length_within_hint
31
+ hints = @person.hints[:password]
32
+ assert_includes hints, "must be between 1 and 4 characters"
33
+ end
34
+
35
+ def test_numericality_option_hints
36
+ hints = @person.hints[:age]
37
+ assert_includes hints, "must be an integer"
38
+ assert_includes hints, "must be greater than 19"
39
+ end
40
+
41
+ def test_inclusion_hint_uses_list
42
+ hints = @person.hints[:status]
43
+ assert_equal 1, hints.size
44
+ assert_match(/must be one of/, hints.first)
45
+ assert_match(/active/, hints.first)
46
+ assert_match(/inactive/, hints.first)
47
+ end
48
+
49
+ def test_virtual_attribute_with_validators_is_included
50
+ assert_includes @profile.hints.keys, :nickname
51
+ assert_includes @profile.hints[:nickname], "can't be blank"
52
+ end
53
+
54
+ def test_empty_returns_true_when_no_hint_messages
55
+ person = Class.new do
56
+ include ActiveModel::Model
57
+ include ActiveModel::Validations
58
+
59
+ def self.name
60
+ "EmptyModel"
61
+ end
62
+ end.new
63
+
64
+ assert person.hints.empty?
65
+ end
66
+
67
+ def test_add_and_added_with_symbol_message
68
+ person = Person.new
69
+ person.hints.add(:name, :blank)
70
+ assert person.hints.added?(:name, :blank)
71
+ end
72
+
73
+ def test_validator_keys_for_rails_7_validators
74
+ validators = Person.validators_on(:name).map { |v| v.class.name.demodulize }
75
+ assert_includes validators, "PresenceValidator"
76
+ end
77
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "minitest/autorun"
5
+ require "active_record"
6
+ require "active_model"
7
+
8
+ require "validation_hints"
9
+
10
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
11
+
12
+ ActiveRecord::Schema.define do
13
+ create_table :people, force: true do |t|
14
+ t.string :name
15
+ t.string :password
16
+ t.integer :age
17
+ t.string :status
18
+ end
19
+ end
20
+
21
+ class Person < ActiveRecord::Base
22
+ validates :name, presence: true
23
+ validates :password, length: { within: 1...5 }
24
+ validates :age, numericality: { only_integer: true, greater_than: 19 }
25
+ validates :status, inclusion: { in: %w[active inactive] }
26
+ end
27
+
28
+ class Profile < ActiveRecord::Base
29
+ self.table_name = "people"
30
+
31
+ attr_accessor :nickname
32
+
33
+ validates :nickname, presence: true
34
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class ValidationHintsTest < Minitest::Test
6
+ def test_version
7
+ assert_equal "6.1.0", ValidationHints::VERSION
8
+ end
9
+
10
+ def test_locale_path_exists
11
+ assert File.file?(ValidationHints::LOCALE_PATH)
12
+ end
13
+ end
@@ -1,6 +1,6 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "validation_hints/version"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/validation_hints/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "validation_hints"
@@ -8,22 +8,30 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Ace Suares"]
10
10
  s.email = ["ace@suares.com"]
11
- s.homepage = %q{http://github.com/acesuares/validation_hints}
12
- s.summary = %q{Validation Hints.}
13
- s.description = %q{Hints for validation.}
14
- s.licenses = ["MIT"]
11
+ s.homepage = "https://github.com/acesuares/validation_hints"
12
+ s.summary = "Proactive validation hints derived from model validators"
13
+ s.description = "Shows what a field expects before validation fails — complementary to ActiveModel errors."
14
+ s.license = "MIT"
15
+ s.required_ruby_version = ">= 3.2.0"
15
16
 
16
- s.rubyforge_project = "validation_hints"
17
+ if File.directory?(File.join(__dir__, ".git"))
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ else
21
+ s.files = Dir.chdir(__dir__) do
22
+ Dir.glob("{lib,test}/**/*", File::FNM_DOTMATCH).reject do |f|
23
+ f.end_with?(".gem") || f.start_with?("stuff/")
24
+ end + %w[README.md LICENSE.txt CHANGELOG.md Gemfile Rakefile validation_hints.gemspec]
25
+ end
26
+ s.test_files = Dir.glob("{test,spec}/**/*", base: __dir__)
27
+ end
17
28
 
18
- s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
29
  s.require_paths = ["lib"]
22
30
 
23
- s.add_development_dependency(%q<rspec-rails>, [">= 0"])
24
- s.add_development_dependency(%q<shoulda>, [">= 0"])
25
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
26
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
27
- s.add_development_dependency(%q<rcov>, [">= 0"])
31
+ s.add_dependency "activerecord", ">= 7.0", "< 7.1"
28
32
 
33
+ s.add_development_dependency "rails", ">= 7.0", "< 7.1"
34
+ s.add_development_dependency "sqlite3", "~> 1.4"
35
+ s.add_development_dependency "minitest", "~> 5.0"
36
+ s.add_development_dependency "bundler", ">= 2.0"
29
37
  end
metadata CHANGED
@@ -1,86 +1,98 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validation_hints
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ace Suares
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-03-28 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: rspec-rails
13
+ name: activerecord
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
18
+ version: '7.0'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '7.1'
22
+ type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
26
  - - ">="
25
27
  - !ruby/object:Gem::Version
26
- version: '0'
28
+ version: '7.0'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '7.1'
27
32
  - !ruby/object:Gem::Dependency
28
- name: shoulda
33
+ name: rails
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
36
  - - ">="
32
37
  - !ruby/object:Gem::Version
33
- version: '0'
38
+ version: '7.0'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '7.1'
34
42
  type: :development
35
43
  prerelease: false
36
44
  version_requirements: !ruby/object:Gem::Requirement
37
45
  requirements:
38
46
  - - ">="
39
47
  - !ruby/object:Gem::Version
40
- version: '0'
48
+ version: '7.0'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '7.1'
41
52
  - !ruby/object:Gem::Dependency
42
- name: bundler
53
+ name: sqlite3
43
54
  requirement: !ruby/object:Gem::Requirement
44
55
  requirements:
45
56
  - - "~>"
46
57
  - !ruby/object:Gem::Version
47
- version: 1.0.0
58
+ version: '1.4'
48
59
  type: :development
49
60
  prerelease: false
50
61
  version_requirements: !ruby/object:Gem::Requirement
51
62
  requirements:
52
63
  - - "~>"
53
64
  - !ruby/object:Gem::Version
54
- version: 1.0.0
65
+ version: '1.4'
55
66
  - !ruby/object:Gem::Dependency
56
- name: jeweler
67
+ name: minitest
57
68
  requirement: !ruby/object:Gem::Requirement
58
69
  requirements:
59
70
  - - "~>"
60
71
  - !ruby/object:Gem::Version
61
- version: 1.5.2
72
+ version: '5.0'
62
73
  type: :development
63
74
  prerelease: false
64
75
  version_requirements: !ruby/object:Gem::Requirement
65
76
  requirements:
66
77
  - - "~>"
67
78
  - !ruby/object:Gem::Version
68
- version: 1.5.2
79
+ version: '5.0'
69
80
  - !ruby/object:Gem::Dependency
70
- name: rcov
81
+ name: bundler
71
82
  requirement: !ruby/object:Gem::Requirement
72
83
  requirements:
73
84
  - - ">="
74
85
  - !ruby/object:Gem::Version
75
- version: '0'
86
+ version: '2.0'
76
87
  type: :development
77
88
  prerelease: false
78
89
  version_requirements: !ruby/object:Gem::Requirement
79
90
  requirements:
80
91
  - - ">="
81
92
  - !ruby/object:Gem::Version
82
- version: '0'
83
- description: Hints for validation.
93
+ version: '2.0'
94
+ description: Shows what a field expects before validation fails — complementary to
95
+ ActiveModel errors.
84
96
  email:
85
97
  - ace@suares.com
86
98
  executables: []
@@ -89,20 +101,26 @@ extra_rdoc_files: []
89
101
  files:
90
102
  - ".document"
91
103
  - ".gitignore"
104
+ - CHANGELOG.md
92
105
  - Gemfile
106
+ - Gemfile.lock
93
107
  - LICENSE.txt
94
108
  - README.md
95
109
  - Rakefile
96
110
  - lib/active_model/hints.rb
97
111
  - lib/validation_hints.rb
98
112
  - lib/validation_hints/locale/en.yml
113
+ - lib/validation_hints/railtie.rb
114
+ - lib/validation_hints/validations_patch.rb
99
115
  - lib/validation_hints/version.rb
116
+ - test/active_model/hints_test.rb
117
+ - test/test_helper.rb
118
+ - test/validation_hints_test.rb
100
119
  - validation_hints.gemspec
101
- homepage: http://github.com/acesuares/validation_hints
120
+ homepage: https://github.com/acesuares/validation_hints
102
121
  licenses:
103
122
  - MIT
104
123
  metadata: {}
105
- post_install_message:
106
124
  rdoc_options: []
107
125
  require_paths:
108
126
  - lib
@@ -110,15 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
128
  requirements:
111
129
  - - ">="
112
130
  - !ruby/object:Gem::Version
113
- version: '0'
131
+ version: 3.2.0
114
132
  required_rubygems_version: !ruby/object:Gem::Requirement
115
133
  requirements:
116
134
  - - ">="
117
135
  - !ruby/object:Gem::Version
118
136
  version: '0'
119
137
  requirements: []
120
- rubygems_version: 3.2.3
121
- signing_key:
138
+ rubygems_version: 3.7.2
122
139
  specification_version: 4
123
- summary: Validation Hints.
140
+ summary: Proactive validation hints derived from model validators
124
141
  test_files: []