validatious 0.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.
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +75 -0
- data/Rakefile +8 -0
- data/lib/validatious/helper_methods.rb +11 -0
- data/lib/validatious/locale/en.yml +4 -0
- data/lib/validatious/validators/url_validator.rb +26 -0
- data/lib/validatious/version.rb +3 -0
- data/lib/validatious.rb +13 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/support/deferred_garbage_collection.rb +21 -0
- data/spec/support/models/post.rb +13 -0
- data/spec/validatious/helper_methods_spec.rb +9 -0
- data/spec/validatious/validators/url_spec.rb +68 -0
- data/validatious.gemspec +21 -0
- metadata +98 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2011 Joel Moss
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
Validatious -- A collection of delicious Rails validators
|
2
|
+
=========================================================
|
3
|
+
|
4
|
+
## DESCRIPTION
|
5
|
+
|
6
|
+
No matter what app you are working on, Rails never seems to include all the
|
7
|
+
validations you need, and you end having to repeat yourself over and over by
|
8
|
+
writing regex validations and/or custom validators.
|
9
|
+
|
10
|
+
Validatious solves this problem by packaging up all these often used, but
|
11
|
+
missing Rails validators, into one single RubyGem.
|
12
|
+
|
13
|
+
|
14
|
+
## INSTALLATION
|
15
|
+
|
16
|
+
The best way to install Validatious is with RubyGems:
|
17
|
+
|
18
|
+
$ [sudo] gem install validatious
|
19
|
+
|
20
|
+
If you're installing from source, you can use [Bundler][bundler] to pick up all the
|
21
|
+
gems:
|
22
|
+
|
23
|
+
$ bundle install # ([more info](http://gembundler.com/bundle_install.html))
|
24
|
+
|
25
|
+
[bundler]: http://gembundler.com/
|
26
|
+
|
27
|
+
|
28
|
+
## USAGE
|
29
|
+
|
30
|
+
All the validators in Validatious are designed to work with Rails 3 and up, and
|
31
|
+
take advantage of ActiveModel::Validator. This means that they are all used in the
|
32
|
+
usual Rails way:
|
33
|
+
|
34
|
+
validates :url, :url => true
|
35
|
+
|
36
|
+
The old Rails 2 style validations are also supported:
|
37
|
+
|
38
|
+
validates_url_format_of :url
|
39
|
+
|
40
|
+
|
41
|
+
## Validations
|
42
|
+
|
43
|
+
Validatious currently provides the following validators:
|
44
|
+
|
45
|
+
|
46
|
+
### URL
|
47
|
+
|
48
|
+
This validates the format of a URL, ensuring that the attribute conforms to the
|
49
|
+
correct format of a URL.
|
50
|
+
|
51
|
+
validates :url, :url => true
|
52
|
+
|
53
|
+
or
|
54
|
+
|
55
|
+
validates_url_format_of :url
|
56
|
+
|
57
|
+
|
58
|
+
## CONTRIBUTE
|
59
|
+
|
60
|
+
If you'd like to hack on Validatious, start by forking my repo on GitHub:
|
61
|
+
|
62
|
+
http://github.com/joelmoss/validatious
|
63
|
+
|
64
|
+
To get all of the dependencies, install the gem first. The best way to get
|
65
|
+
your changes merged back into core is as follows:
|
66
|
+
|
67
|
+
1. Clone down your fork
|
68
|
+
1. Create a thoughtfully named topic branch to contain your change
|
69
|
+
1. Hack away
|
70
|
+
1. Add tests and make sure everything still passes by running `rake`
|
71
|
+
1. If you are adding new functionality, document it in the README
|
72
|
+
1. Do not change the version number, I will do that on my end
|
73
|
+
1. If necessary, rebase your commits into logical chunks, without errors
|
74
|
+
1. Push the branch up to GitHub
|
75
|
+
1. Send a pull request to the joelmoss/validatious project.
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Validatious
|
2
|
+
module Validators
|
3
|
+
|
4
|
+
# == Active Model Url Validator
|
5
|
+
class UrlValidator < ActiveModel::EachValidator
|
6
|
+
IPv4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/ # 0-255
|
7
|
+
REGEX = %r{
|
8
|
+
\A
|
9
|
+
https?:// # http:// or https://
|
10
|
+
([^\s:@]+:[^\s:@]*@)? # optional username:pw@
|
11
|
+
( (xn--)?[a-z0-9]+([-.][a-z0-9]+)*\.[a-z]{2,6}\.? | # domain (including Punycode/IDN)...
|
12
|
+
#{IPv4_PART}(\.#{IPv4_PART}){3} ) # or IPv4
|
13
|
+
(:\d{1,5})? # optional port
|
14
|
+
([/?]\S*)? # optional /whatever or ?whatever
|
15
|
+
\Z
|
16
|
+
}iux
|
17
|
+
|
18
|
+
def validate_each(record, attribute, value)
|
19
|
+
record.errors.add(attribute, :invalid_url, options) if value.to_s !~ REGEX
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Compatibility with ActiveModel validates method which matches option keys to their validator class
|
26
|
+
ActiveModel::Validations::UrlValidator = Validatious::Validators::UrlValidator
|
data/lib/validatious.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "validatious/version"
|
2
|
+
|
3
|
+
module Validatious
|
4
|
+
module Validators
|
5
|
+
# nothing to see here, move along...
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
require "validatious/validators/url_validator"
|
10
|
+
require "validatious/helper_methods"
|
11
|
+
|
12
|
+
require 'active_support/i18n'
|
13
|
+
I18n.load_path << File.dirname(__FILE__) + '/validatious/locale/en.yml'
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
require "validatious"
|
3
|
+
|
4
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
5
|
+
# in spec/support/ and its subdirectories.
|
6
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.mock_with :rspec
|
10
|
+
|
11
|
+
config.before(:all) do
|
12
|
+
DeferredGarbageCollection.start
|
13
|
+
end
|
14
|
+
|
15
|
+
config.after(:all) do
|
16
|
+
DeferredGarbageCollection.reconsider
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Taken from http://makandra.com/notes/950-speed-up-rspec-by-deferring-garbage-collection
|
2
|
+
class DeferredGarbageCollection
|
3
|
+
|
4
|
+
DEFERRED_GC_THRESHOLD = (ENV['DEFER_GC'] || 10.0).to_f
|
5
|
+
|
6
|
+
@@last_gc_run = Time.now
|
7
|
+
|
8
|
+
def self.start
|
9
|
+
GC.disable if DEFERRED_GC_THRESHOLD > 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.reconsider
|
13
|
+
if DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD
|
14
|
+
GC.enable
|
15
|
+
GC.start
|
16
|
+
GC.disable
|
17
|
+
@@last_gc_run = Time.now
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Validatious::Validators::UrlValidator do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Post.validates_url_format_of(:url)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:post) { post = Post.new(:title => "The title", :url => "invalid URL") }
|
12
|
+
|
13
|
+
[
|
14
|
+
'http://example.com',
|
15
|
+
'http://example.com/',
|
16
|
+
'http://www.example.com/',
|
17
|
+
'http://sub.domain.example.com/',
|
18
|
+
'http://bbc.co.uk',
|
19
|
+
'http://example.com?foo',
|
20
|
+
'http://example.com?url=http://example.com',
|
21
|
+
'http://example.com:8000',
|
22
|
+
'http://www.sub.example.com/page.html?foo=bar&baz=%23#anchor',
|
23
|
+
'http://user:pass@example.com',
|
24
|
+
'http://user:@example.com',
|
25
|
+
'http://example.com/~user',
|
26
|
+
'http://example.xy', # Not a real TLD, but we're fine with anything of 2-6 chars
|
27
|
+
'http://example.museum',
|
28
|
+
'http://1.0.255.249',
|
29
|
+
'http://1.2.3.4:80',
|
30
|
+
'HttP://example.com',
|
31
|
+
'https://example.com',
|
32
|
+
# 'http://räksmörgås.nu', # IDN
|
33
|
+
'http://xn--rksmrgs-5wao1o.nu', # Punycode
|
34
|
+
'http://example.com.', # Explicit TLD root period
|
35
|
+
'http://example.com./foo'
|
36
|
+
].each do |url|
|
37
|
+
describe url.inspect do
|
38
|
+
it "should be valid" do
|
39
|
+
post.url = url
|
40
|
+
post.should be_valid
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
[
|
46
|
+
nil, 1, "", " ", "url",
|
47
|
+
"www.example.com",
|
48
|
+
"http://ex ample.com",
|
49
|
+
"http://example.com/foo bar",
|
50
|
+
'http://256.0.0.1',
|
51
|
+
'http://u:u:u@example.com',
|
52
|
+
'http://r?ksmorgas.com',
|
53
|
+
|
54
|
+
# These can all be valid local URLs, but should not be considered valid
|
55
|
+
# for public consumption.
|
56
|
+
"http://example",
|
57
|
+
"http://example.c",
|
58
|
+
'http://example.toolongtld'
|
59
|
+
].each do |url|
|
60
|
+
describe url.inspect do
|
61
|
+
it "should not be valid" do
|
62
|
+
post.url = url
|
63
|
+
post.should_not be_valid
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
data/validatious.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/validatious/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Joel Moss"]
|
6
|
+
gem.email = ["joel@developwithstyle.com"]
|
7
|
+
gem.description = %q{A collection of delicious Rails validators}
|
8
|
+
gem.summary = %q{A collection of delicious Rails validators}
|
9
|
+
gem.homepage = 'https://github.com/joelmoss/validatious'
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "validatious"
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
gem.version = Validatious::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'activemodel'
|
19
|
+
|
20
|
+
gem.add_development_dependency "rspec"
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: validatious
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joel Moss
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-28 00:00:00 +01:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activemodel
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
description: A collection of delicious Rails validators
|
39
|
+
email:
|
40
|
+
- joel@developwithstyle.com
|
41
|
+
executables: []
|
42
|
+
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- .rspec
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- lib/validatious.rb
|
55
|
+
- lib/validatious/helper_methods.rb
|
56
|
+
- lib/validatious/locale/en.yml
|
57
|
+
- lib/validatious/validators/url_validator.rb
|
58
|
+
- lib/validatious/version.rb
|
59
|
+
- spec/spec_helper.rb
|
60
|
+
- spec/support/deferred_garbage_collection.rb
|
61
|
+
- spec/support/models/post.rb
|
62
|
+
- spec/validatious/helper_methods_spec.rb
|
63
|
+
- spec/validatious/validators/url_spec.rb
|
64
|
+
- validatious.gemspec
|
65
|
+
has_rdoc: true
|
66
|
+
homepage: https://github.com/joelmoss/validatious
|
67
|
+
licenses: []
|
68
|
+
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
86
|
+
requirements: []
|
87
|
+
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 1.3.9.1
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: A collection of delicious Rails validators
|
93
|
+
test_files:
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
- spec/support/deferred_garbage_collection.rb
|
96
|
+
- spec/support/models/post.rb
|
97
|
+
- spec/validatious/helper_methods_spec.rb
|
98
|
+
- spec/validatious/validators/url_spec.rb
|