validate_url 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown ADDED
File without changes
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ puts IO.read(File.join(File.dirname(__FILE__), 'README.markdown'))
@@ -0,0 +1,82 @@
1
+ module Perfectline
2
+ module ValidatesUrl
3
+
4
+ class Validator
5
+ require 'uri'
6
+
7
+ def self.valid_url?(value, schemes)
8
+ schemes = [*schemes].map(&:to_s)
9
+ begin
10
+ uri = ::URI.parse(value)
11
+
12
+ unless schemes.include?(uri.scheme)
13
+ raise ::URI::InvalidURIError
14
+ end
15
+
16
+ unless uri.send(:scheme).present?
17
+ raise ::URI::InvalidURIError
18
+ end
19
+
20
+ unless uri.send(:host).present?
21
+ raise ::URI::InvalidURIError
22
+ end
23
+
24
+ rescue ::URI::InvalidURIError
25
+ return false
26
+ end
27
+
28
+ true
29
+ end
30
+ end
31
+
32
+ module Rails2
33
+ require 'active_record'
34
+
35
+ def validates_url(*attribute_names)
36
+ options = attribute_names.extract_options!.symbolize_keys
37
+ options.reverse_merge!(:schemes => %w(http https))
38
+ options.reverse_merge!(:message => "is not a valid URL")
39
+
40
+ validates_each(attribute_names, options) do |record, attribute, value|
41
+ unless valid_url?(value, options.fetch(:schemes))
42
+ record.errors.add(attribute, options[:message], :value => value)
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ module Rails3
49
+ require 'active_model'
50
+ require 'active_model/validations'
51
+ require 'active_support/concern'
52
+
53
+ extend ActiveSupport::Concern
54
+
55
+ class UrlValidator < ActiveModel::EachValidator
56
+ def initialize(options)
57
+ options.reverse_merge!(:schemes => %w(http https))
58
+ options.reverse_merge!(:message => "is not a valid URL")
59
+ super(options)
60
+ end
61
+
62
+ def validate_each(record, attribute, value)
63
+ unless Perfectline::ValidatesUrl::Validator.valid_url?(value, options.fetch(:schemes))
64
+ record.errors.add(attribute, options.fetch(:message), :value => value)
65
+ end
66
+ end
67
+ end
68
+
69
+ module ClassMethods
70
+ def validates_url(*attr_names)
71
+ validates_with UrlValidator, _merge_attributes(attr_names)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ if Rails::VERSION::MAJOR >= 3
79
+ ActiveModel::Validations.send(:include, Perfectline::ValidatesUrl::Rails3)
80
+ else
81
+ ActiveRecord::Base.send(:include, Perfectline::ValidatesUrl::Rails2)
82
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'validates_url'
@@ -0,0 +1,9 @@
1
+ require 'active_model/validations'
2
+
3
+ class User
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :homepage
7
+
8
+ validates :homepage, :url => true
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_model/validations'
2
+
3
+ class UserWithBlank
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :homepage
7
+
8
+ validates :homepage, :url => {:allow_blank => true}
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_model/validations'
2
+
3
+ class UserWithLegacySyntax
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :homepage
7
+
8
+ validates_url :homepage, :allow_blank => true
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_model/validations'
2
+
3
+ class UserWithNil
4
+ include ActiveModel::Validations
5
+
6
+ attr_accessor :homepage
7
+
8
+ validates :homepage, :url => {:allow_nil => true}
9
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/resources')
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+
5
+ require 'spec'
6
+ require 'rails'
7
+ require 'validates_url'
8
+
9
+ autoload :User, 'resources/user'
10
+ autoload :UserWithNil, 'resources/user_with_nil'
11
+ autoload :UserWithBlank, 'resources/user_with_blank'
12
+ autoload :UserWithLegacySyntax, 'resources/user_with_legacy_syntax'
13
+
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe "URL validation", Perfectline::ValidatesUrl::Rails3::UrlValidator do
4
+
5
+ context "with regular validator" do
6
+ before do
7
+ @user = User.new
8
+ end
9
+
10
+ it "should not allow nil as url" do
11
+ @user.homepage = nil
12
+ @user.should_not be_valid
13
+ end
14
+
15
+ it "should not allow blank as url" do
16
+ @user.homepage = ""
17
+ @user.should_not be_valid
18
+ end
19
+
20
+ it "should not allow an url without scheme" do
21
+ @user.homepage = "www.example.com"
22
+ @user.should_not be_valid
23
+ end
24
+
25
+ it "should allow an url with http" do
26
+ @user.homepage = "http://localhost"
27
+ @user.should be_valid
28
+ end
29
+
30
+ it "should allow an url with https" do
31
+ @user.homepage = "https://localhost"
32
+ @user.should be_valid
33
+ end
34
+
35
+ end
36
+
37
+ context "with allow nil" do
38
+ before do
39
+ @user = UserWithNil.new
40
+ end
41
+
42
+ it "should allow nil as url" do
43
+ @user.homepage = nil
44
+ @user.should be_valid
45
+ end
46
+
47
+ it "should not allow blank as url" do
48
+ @user.homepage = ""
49
+ @user.should_not be_valid
50
+ end
51
+
52
+ it "shoild allow a valid url" do
53
+ @user.homepage = "http://www.example.com"
54
+ @user.should be_valid
55
+ end
56
+ end
57
+
58
+ context "with allow blank" do
59
+ before do
60
+ @user = UserWithBlank.new
61
+ end
62
+
63
+ it "should allow nil as url" do
64
+ @user.homepage = nil
65
+ @user.should be_valid
66
+ end
67
+
68
+ it "should allow blank as url" do
69
+ @user.homepage = ""
70
+ @user.should be_valid
71
+ end
72
+
73
+ it "should allow a valid url" do
74
+ @user.homepage = "http://www.example.com"
75
+ @user.should be_valid
76
+ end
77
+ end
78
+
79
+ context "with legacy syntax" do
80
+ before do
81
+ @user = UserWithLegacySyntax.new
82
+ end
83
+
84
+ it "should allow nil as url" do
85
+ @user.homepage = nil
86
+ @user.should be_valid
87
+ end
88
+
89
+ it "should allow blank as url" do
90
+ @user.homepage = ""
91
+ @user.should be_valid
92
+ end
93
+
94
+ it "should allow a valid url" do
95
+ @user.homepage = "http://www.example.com"
96
+ @user.should be_valid
97
+ end
98
+
99
+ it "should not allow invalid url" do
100
+ @user.homepage = "random"
101
+ @user.should_not be_valid
102
+ end
103
+ end
104
+
105
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: validate_url
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Tanel Suurhans
13
+ - Tarmo Lehtpuu
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-08 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: diff-lcs
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 1
44
+ - 1
45
+ - 2
46
+ version: 1.1.2
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: Library for validating urls in Rails.
50
+ email:
51
+ - tanel.suurhans@perfectline.ee
52
+ - tarmo.lehtpuu@perfectline.ee
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README.markdown
59
+ files:
60
+ - README.markdown
61
+ - install.rb
62
+ - lib/validates_url.rb
63
+ - rails/init.rb
64
+ - spec/resources/user.rb
65
+ - spec/resources/user_with_blank.rb
66
+ - spec/resources/user_with_legacy_syntax.rb
67
+ - spec/resources/user_with_nil.rb
68
+ - spec/spec_helper.rb
69
+ - spec/validates_url_spec.rb
70
+ has_rdoc: true
71
+ homepage: http://github.com/perfectline/validates_url/tree/master
72
+ licenses: []
73
+
74
+ post_install_message:
75
+ rdoc_options:
76
+ - --charset=UTF-8
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ requirements: []
96
+
97
+ rubyforge_project:
98
+ rubygems_version: 1.3.7
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Library for validating urls in Rails.
102
+ test_files:
103
+ - spec/resources/user.rb
104
+ - spec/resources/user_with_blank.rb
105
+ - spec/resources/user_with_legacy_syntax.rb
106
+ - spec/resources/user_with_nil.rb
107
+ - spec/spec_helper.rb
108
+ - spec/validates_url_spec.rb