validatious 0.2.0 → 0.3.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.
- data/README.md +28 -0
- data/lib/validatious.rb +1 -0
- data/lib/validatious/helper_methods.rb +4 -0
- data/lib/validatious/locale/en.yml +2 -1
- data/lib/validatious/validators/text_content_validator.rb +33 -0
- data/lib/validatious/version.rb +1 -1
- data/spec/support/models/post.rb +1 -1
- data/spec/validatious/helper_methods_spec.rb +1 -0
- data/spec/validatious/validators/email_validator_spec.rb +1 -1
- data/spec/validatious/validators/text_content_validator_spec.rb +47 -0
- data/spec/validatious/validators/url_validator_spec.rb +1 -1
- metadata +5 -2
data/README.md
CHANGED
@@ -65,6 +65,34 @@ to the correct format of an email address.
|
|
65
65
|
or
|
66
66
|
|
67
67
|
validates_email_format_of :email
|
68
|
+
|
69
|
+
|
70
|
+
### Text Content
|
71
|
+
|
72
|
+
Extracted from [validates_text_content](https://github.com/aarongough/validates_text_content), this validates the content of a text attribute, to determine
|
73
|
+
whether or not a block of English text meets certain quality standards.
|
74
|
+
|
75
|
+
validates :comment, :text_content => true
|
76
|
+
|
77
|
+
or
|
78
|
+
|
79
|
+
validates_text_content_of :comment
|
80
|
+
|
81
|
+
#### Examples
|
82
|
+
|
83
|
+
- Rejects:
|
84
|
+
- "this comment has absolutely no capitalization."
|
85
|
+
- "This comment has no type of punctuation"
|
86
|
+
- "Fdkjd dk dkkjhd kjdhkjd kjdhdhdl alkasla lka alk"
|
87
|
+
- "THIS COMMENT IS ALL IN UPPERCASE. ME NO WANT!"
|
88
|
+
- "Thiscommenthasabsolutelynospacesthereisnowaythisisgood."
|
89
|
+
- "THIS COMMENT is MORE THAN 80% CAPITALS."
|
90
|
+
- "THIS pERSON hAS tHEIR cAPS-lOCK oN."
|
91
|
+
|
92
|
+
- Accepts:
|
93
|
+
- "This is a very simple test comment."
|
94
|
+
- "Supercalifragilisticexpialadocious: a super long word!"
|
95
|
+
- "How many words can I think of that don't contain an 'e'?"
|
68
96
|
|
69
97
|
|
70
98
|
## CONTRIBUTE
|
data/lib/validatious.rb
CHANGED
@@ -2,4 +2,5 @@ en:
|
|
2
2
|
errors:
|
3
3
|
messages:
|
4
4
|
invalid_url: "is not a valid URL"
|
5
|
-
invalid_email: "is not a valid email address"
|
5
|
+
invalid_email: "is not a valid email address"
|
6
|
+
invalid_text_content: "has incorrect capitalization and punctuation. (ie: All sentences should begin with a capital letter and end with a punctuation mark, etc.)"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Validators
|
3
|
+
|
4
|
+
# == Active Model Text Content Validator
|
5
|
+
class TextContentValidator < ActiveModel::EachValidator
|
6
|
+
def validate_each(record, attribute, value)
|
7
|
+
return if value.nil?
|
8
|
+
|
9
|
+
error = false
|
10
|
+
|
11
|
+
# The text should start with a capital letter
|
12
|
+
error = true if value.match(/[A-Z]/).nil?
|
13
|
+
|
14
|
+
# The text should contain at least one punctuation mark
|
15
|
+
error = true if value.match(/[\.?!]/).nil?
|
16
|
+
|
17
|
+
# There should be at least one 'e' per 30 characters
|
18
|
+
error = true if value.downcase.count('e') < (value.downcase.gsub(/[^a-z]*/, '').length / 30)
|
19
|
+
|
20
|
+
# There should be at least one space per 20 characters
|
21
|
+
error = true if value.downcase.count(' ') < (value.length / 20)
|
22
|
+
|
23
|
+
# The text should be at least 25% lowercase
|
24
|
+
error = true if value.gsub(/[^a-z]*/, '').length < (value.downcase.gsub(/[^a-z]*/, '').length / 4)
|
25
|
+
|
26
|
+
record.errors.add(attribute, :invalid_text_content, options) if error
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Compatibility with ActiveModel validates method which matches option keys to their validator class
|
33
|
+
ActiveModel::Validations::TextContentValidator = Validatious::Validators::TextContentValidator
|
data/lib/validatious/version.rb
CHANGED
data/spec/support/models/post.rb
CHANGED
@@ -8,7 +8,7 @@ describe Validatious::Validators::EmailValidator do
|
|
8
8
|
Topic.validates_email_format_of(:email)
|
9
9
|
end
|
10
10
|
|
11
|
-
let(:topic) {
|
11
|
+
let(:topic) { Topic.new(:title => "The title", :email => "invalid email") }
|
12
12
|
|
13
13
|
[
|
14
14
|
'bob@bones.com',
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Validatious::Validators::TextContentValidator do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
Post.validates_text_content_of(:comment)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:post) { Post.new }
|
11
|
+
|
12
|
+
[
|
13
|
+
"",
|
14
|
+
'this comment has absolutely no capitalization.',
|
15
|
+
'This comment has no type of punctuation',
|
16
|
+
"Fdkjd dk dkkjhd kjdhkjd kjdhdhdl alkasla lka alk.",
|
17
|
+
"THIS COMMENT IS ALL IN UPPERCASE. ME NO WANT.",
|
18
|
+
"Thiscommenthasabsolutelynospacesthereisnowaythisisgood.",
|
19
|
+
"THIS COMMENT is MORE THAN 80% CAPITALS.",
|
20
|
+
"THIS pERSON hAS tHEIR cAPS-lOCK oN."
|
21
|
+
].each do |text|
|
22
|
+
describe text.inspect do
|
23
|
+
it "should be invalid" do
|
24
|
+
post.comment = text
|
25
|
+
post.should_not be_valid
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
[
|
31
|
+
'This is a very simple test comment.',
|
32
|
+
'Supercalifragilisticexpialadocious: a super long word!',
|
33
|
+
'How many words can I think of that don\'t contain an "e"?',
|
34
|
+
'WHAT?! You mean to tell *ME* that SONY/ERICSSON *CAN\'T* make a phone?',
|
35
|
+
'WHAT?! YOU MEAN TO TELL ME that SONY/ERICSSON *CAN\'T* make a phone?',
|
36
|
+
'ROFL! Who do I have to shag to get a comment around here?',
|
37
|
+
'I\'m a Klingon. It\'s kind of my thing to be angry for almost no good reason. Yesterday I tore the door off my fridge cause I was out of margarine. These things happen.'
|
38
|
+
].each do |text|
|
39
|
+
describe text.inspect do
|
40
|
+
it "should be valid" do
|
41
|
+
post.comment = text
|
42
|
+
post.should be_valid
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -8,7 +8,7 @@ describe Validatious::Validators::UrlValidator do
|
|
8
8
|
Post.validates_url_format_of(:url)
|
9
9
|
end
|
10
10
|
|
11
|
-
let(:post) {
|
11
|
+
let(:post) { Post.new(:title => "The title", :url => "invalid URL") }
|
12
12
|
|
13
13
|
[
|
14
14
|
'http://example.com',
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: validatious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Joel Moss
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06
|
13
|
+
date: 2011-07-06 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/validatious/helper_methods.rb
|
56
56
|
- lib/validatious/locale/en.yml
|
57
57
|
- lib/validatious/validators/email_validator.rb
|
58
|
+
- lib/validatious/validators/text_content_validator.rb
|
58
59
|
- lib/validatious/validators/url_validator.rb
|
59
60
|
- lib/validatious/version.rb
|
60
61
|
- spec/spec_helper.rb
|
@@ -63,6 +64,7 @@ files:
|
|
63
64
|
- spec/support/models/topic.rb
|
64
65
|
- spec/validatious/helper_methods_spec.rb
|
65
66
|
- spec/validatious/validators/email_validator_spec.rb
|
67
|
+
- spec/validatious/validators/text_content_validator_spec.rb
|
66
68
|
- spec/validatious/validators/url_validator_spec.rb
|
67
69
|
- validatious.gemspec
|
68
70
|
has_rdoc: true
|
@@ -100,4 +102,5 @@ test_files:
|
|
100
102
|
- spec/support/models/topic.rb
|
101
103
|
- spec/validatious/helper_methods_spec.rb
|
102
104
|
- spec/validatious/validators/email_validator_spec.rb
|
105
|
+
- spec/validatious/validators/text_content_validator_spec.rb
|
103
106
|
- spec/validatious/validators/url_validator_spec.rb
|