valid8ors 0.0.3 → 0.0.4

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.
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  .rvmrc
6
+ .project
data/README.md CHANGED
@@ -40,6 +40,35 @@ You can translate (or overload) the default message via for e.g. using activerec
40
40
 
41
41
  cd test
42
42
  ruby blacklist_test.rb
43
+
44
+ ## Reserved Validator
45
+
46
+ ### Usage
47
+
48
+ Add the following to one of your models:
49
+
50
+ validates :name, reserved: true
51
+
52
+ You can also modify the default message ("is reserved") if validation fails:
53
+
54
+ validates :name, reserved: { message: "is not part of the whitelist" }
55
+
56
+ ### Reserved file
57
+
58
+ You can create a reserved.yml file in the config directory of your Rails application if you need to overload the one used by this gem.
59
+
60
+ ### I18n
61
+
62
+ If you use I18n, the default key to translate is :reserved. So if you add to your User model:
63
+
64
+ validates :name, reserved: true
65
+
66
+ You can translate (or overload) the default message via for e.g. using activerecord (in english): "en.activerecord.errors.models.user.attributes.name.reserved"
67
+
68
+ ### Tests
69
+
70
+ cd test
71
+ ruby reserved_test.rb
43
72
 
44
73
  ## Email Format Validator
45
74
 
@@ -70,6 +99,31 @@ You can translate (or overload) the default message via for e.g. (in english): "
70
99
 
71
100
  Regular Expression tests based on [Comparing E-mail Address Validating Regular Expressions](http://fightingforalostcause.net/misc/2006/compare-email-regex.php)
72
101
 
102
+ ## Url Format Validator
103
+
104
+ ### Usage
105
+
106
+ Add the following to one of your models:
107
+
108
+ validates :url, url_format: true
109
+
110
+ You can also modify the default message ("is improperly formatted") if validation fails:
111
+
112
+ validates :url, url_format: { message: "is not well formatted" }
113
+
114
+ ### I18n
115
+
116
+ If you use I18n, the default key to translate is :improperly_formatted. So if you add to your User model:
117
+
118
+ validates :url, url_format: true
119
+
120
+ You can translate (or overload) the default message via for e.g. (in english): "en.activerecord.errors.models.user.attributes.url.improperly_formatted"
121
+
122
+ ### Tests
123
+
124
+ cd test
125
+ ruby url_format_test.rb
126
+
73
127
  ## Compatibility
74
128
 
75
129
  Ruby 1.8 is not supported.
@@ -0,0 +1,8 @@
1
+ ---
2
+ - about
3
+ - faq
4
+ - help
5
+ - team
6
+ - blog
7
+ - store
8
+ - status
@@ -0,0 +1,37 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ class ReservedValidator < ActiveModel::EachValidator
4
+
5
+ def validate_each(record, attribute, value)
6
+ record.errors.add(attribute, options[:message] || invalid_message(record, attribute)) if reserved?(value)
7
+ end
8
+
9
+ # Lazy load and transform directly words to patterns instead of creating regexps at each matching tests
10
+ def reserved
11
+ @reserved ||= YAML.load_file(reserved_file)
12
+ end
13
+
14
+ #######################
15
+ ### Private methods ###
16
+ #######################
17
+
18
+ private
19
+
20
+ def invalid_message(record, attribute)
21
+ I18n.t :reserved,
22
+ scope: "#{record.class.i18n_scope}.errors.models.#{record.class.model_name.i18n_key}.attributes.#{attribute}",
23
+ default: "is reserved"
24
+ end
25
+
26
+ def reserved?(str)
27
+ reserved.any? { |pattern| str == pattern }
28
+ end
29
+
30
+ def reserved_file
31
+ if defined?(Rails.root) && (reserved_file_path = Rails.root.join("config", "reserved.yml")).exist?
32
+ return reserved_file_path
33
+ end
34
+ File.join(File.dirname(__FILE__), "../../config/reserved.yml")
35
+ end
36
+
37
+ end
data/lib/valid8ors.rb CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  require 'valid8ors/email_format'
4
4
  require 'valid8ors/blacklist'
5
+ require 'valid8ors/reserved'
5
6
  require 'valid8ors/url_format'
@@ -0,0 +1,53 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative 'test_helper'
4
+
5
+ class TestUser < TestModel
6
+ validates :name, reserved: true
7
+ end
8
+
9
+ class TestUserWithMessage < TestModel
10
+ validates :name, reserved: { message: 'is not part of the whitelist' }
11
+ end
12
+
13
+ class TestBlacklistValidator < MiniTest::Unit::TestCase
14
+
15
+ def test_some_reserved_words
16
+ names_that_should_be_reserved.each do |name|
17
+ test_user = TestUser.new(name: name)
18
+ refute test_user.valid?
19
+ assert test_user.errors[:name]
20
+ end
21
+ end
22
+
23
+ def test_some_not_reserved_words
24
+ names_that_should_be_not_reserved.each { |name| assert TestUser.new(name: name).valid? }
25
+ end
26
+
27
+ def test_default_message_on_error
28
+ test_user = TestUser.new(name: "about")
29
+ refute test_user.valid?
30
+ assert test_user.errors[:name].include?("is reserved")
31
+ end
32
+
33
+ def test_custom_message_on_error
34
+ test_user = TestUserWithMessage.new(name: "help")
35
+ refute test_user.valid?
36
+ assert test_user.errors[:name].include?("is not part of the whitelist")
37
+ end
38
+
39
+ #######################
40
+ ### Private methods ###
41
+ #######################
42
+
43
+ private
44
+
45
+ def names_that_should_be_reserved
46
+ ["about", "faq", "help"]
47
+ end
48
+
49
+ def names_that_should_be_not_reserved
50
+ ["daftpunk", "u2", "madonna"]
51
+ end
52
+
53
+ end
data/valid8ors.gemspec CHANGED
@@ -3,9 +3,9 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "valid8ors"
6
- s.version = "0.0.3"
7
- s.authors = ["Axel Vergult", "Vincent Pochet"]
8
- s.email = ["axel@official.fm", "vincent@official.fm"]
6
+ s.version = "0.0.4"
7
+ s.authors = ["Axel Vergult", "Vincent Pochet", "Ben Colon"]
8
+ s.email = ["axel@official.fm", "vincent@official.fm", "ben@official.fm"]
9
9
  s.homepage = ""
10
10
  s.summary = %q{Rails 3 awesome custom validators}
11
11
  s.description = %q{Rails 3 awesome custom validators}
metadata CHANGED
@@ -1,20 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valid8ors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Axel Vergult
9
9
  - Vincent Pochet
10
+ - Ben Colon
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2011-12-20 00:00:00.000000000Z
14
+ date: 2012-01-17 00:00:00.000000000Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: activemodel
17
- requirement: &70335761002560 !ruby/object:Gem::Requirement
18
+ requirement: &70192395358060 !ruby/object:Gem::Requirement
18
19
  none: false
19
20
  requirements:
20
21
  - - ! '>='
@@ -22,11 +23,12 @@ dependencies:
22
23
  version: '0'
23
24
  type: :runtime
24
25
  prerelease: false
25
- version_requirements: *70335761002560
26
+ version_requirements: *70192395358060
26
27
  description: Rails 3 awesome custom validators
27
28
  email:
28
29
  - axel@official.fm
29
30
  - vincent@official.fm
31
+ - ben@official.fm
30
32
  executables: []
31
33
  extensions: []
32
34
  extra_rdoc_files: []
@@ -37,12 +39,15 @@ files:
37
39
  - README.md
38
40
  - Rakefile
39
41
  - config/blacklist.yml
42
+ - config/reserved.yml
40
43
  - lib/valid8ors.rb
41
44
  - lib/valid8ors/blacklist.rb
42
45
  - lib/valid8ors/email_format.rb
46
+ - lib/valid8ors/reserved.rb
43
47
  - lib/valid8ors/url_format.rb
44
48
  - test/blacklist_test.rb
45
49
  - test/email_format_test.rb
50
+ - test/reserved_test.rb
46
51
  - test/test_helper.rb
47
52
  - test/url_format_test.rb
48
53
  - valid8ors.gemspec
@@ -73,5 +78,6 @@ summary: Rails 3 awesome custom validators
73
78
  test_files:
74
79
  - test/blacklist_test.rb
75
80
  - test/email_format_test.rb
81
+ - test/reserved_test.rb
76
82
  - test/test_helper.rb
77
83
  - test/url_format_test.rb