validate_url 0.1.2 → 0.1.3

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/lib/validates_url.rb CHANGED
@@ -1,80 +1,29 @@
1
- module Perfectline
2
- module ValidatesUrl
1
+ require 'uri'
2
+ require 'active_model'
3
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)
4
+ module ActiveModel
5
+ module Validations
6
+ class UrlValidator < ActiveModel::EachValidator
11
7
 
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
8
+ def initialize(options)
37
9
  options.reverse_merge!(:schemes => %w(http https))
38
10
  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
11
+ super(options)
45
12
  end
46
- end
47
-
48
- module Rails3
49
- require 'active_model'
50
- require 'active_model/validations'
51
13
 
52
- class UrlValidator < ActiveModel::EachValidator
53
- def initialize(options)
54
- options.reverse_merge!(:schemes => %w(http https))
55
- options.reverse_merge!(:message => "is not a valid URL")
56
- super(options)
57
- end
14
+ def validate_each(record, attribute, value)
15
+ schemes = [*options.fetch(:schemes)].map(&:to_s)
58
16
 
59
- def validate_each(record, attribute, value)
60
- unless Perfectline::ValidatesUrl::Validator.valid_url?(value, options.fetch(:schemes))
61
- record.errors.add(attribute, options.fetch(:message), :value => value)
62
- end
17
+ unless URI::regexp(schemes).match(value)
18
+ record.errors.add(attribute, options.fetch(:message), :value => value)
63
19
  end
64
20
  end
21
+ end
65
22
 
66
- module ClassMethods
67
- def validates_url(*attr_names)
68
- validates_with UrlValidator, _merge_attributes(attr_names)
69
- end
23
+ module ClassMethods
24
+ def validates_url(*attr_names)
25
+ validates_with UrlValidator, _merge_attributes(attr_names)
70
26
  end
71
27
  end
72
28
  end
73
- end
74
-
75
- if Rails::VERSION::MAJOR >= 3
76
- ActiveModel::Validations::UrlValidator = Perfectline::ValidatesUrl::Rails3::UrlValidator
77
- ActiveModel::Validations::HelperMethods.send(:include, Perfectline::ValidatesUrl::Rails3::ClassMethods)
78
- else
79
- ActiveRecord::Base.send(:include, Perfectline::ValidatesUrl::Rails2)
80
29
  end
@@ -1,5 +1,3 @@
1
- require 'active_model/validations'
2
-
3
1
  class User
4
2
  include ActiveModel::Validations
5
3
 
@@ -0,0 +1,5 @@
1
+ class UserWithAr < ActiveRecord::Base
2
+ self.table_name = "users"
3
+
4
+ validates :homepage, :url => true
5
+ end
@@ -0,0 +1,5 @@
1
+ class UserWithArLegacy < ActiveRecord::Base
2
+ self.table_name = "users"
3
+
4
+ validates_url :homepage
5
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,12 +2,23 @@ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/resources')
3
3
  $LOAD_PATH.unshift(File.dirname(__FILE__))
4
4
 
5
- require 'spec'
6
- require 'rails'
7
- require 'validates_url'
5
+ require 'rspec'
6
+ require 'sqlite3'
7
+ require 'active_record'
8
+ require 'active_record/base'
9
+ require 'active_record/migration'
10
+
11
+ ActiveRecord::Migration.verbose = false
12
+ ActiveRecord::Base.establish_connection(
13
+ "adapter" => "sqlite3",
14
+ "database" => ":memory:"
15
+ )
16
+
17
+ require File.join(File.dirname(__FILE__), '..', 'rails', 'init')
8
18
 
9
19
  autoload :User, 'resources/user'
10
20
  autoload :UserWithNil, 'resources/user_with_nil'
11
21
  autoload :UserWithBlank, 'resources/user_with_blank'
12
22
  autoload :UserWithLegacySyntax, 'resources/user_with_legacy_syntax'
13
-
23
+ autoload :UserWithAr, 'resources/user_with_ar'
24
+ autoload :UserWithArLegacy, 'resources/user_with_ar_legacy'
@@ -1,6 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "URL validation", Perfectline::ValidatesUrl::Rails3::UrlValidator do
3
+ describe "URL validation" do
4
+
5
+ before(:all) do
6
+ ActiveRecord::Schema.define(:version => 1) do
7
+
8
+ create_table :users, :force => true do |t|
9
+ t.column :homepage, :string
10
+ end
11
+
12
+ end
13
+ end
14
+
15
+ after(:all) do
16
+ ActiveRecord::Base.connection.drop_table(:users)
17
+ end
4
18
 
5
19
  context "with regular validator" do
6
20
  before do
@@ -32,6 +46,10 @@ describe "URL validation", Perfectline::ValidatesUrl::Rails3::UrlValidator do
32
46
  @user.should be_valid
33
47
  end
34
48
 
49
+ it "shout not allow a url with an invalid scheme" do
50
+ @user.homepage = "ftp://localhost"
51
+ @user.should_not be_valid
52
+ end
35
53
  end
36
54
 
37
55
  context "with allow nil" do
@@ -102,4 +120,26 @@ describe "URL validation", Perfectline::ValidatesUrl::Rails3::UrlValidator do
102
120
  end
103
121
  end
104
122
 
123
+ context "with ActiveRecord" do
124
+ before do
125
+ @user = UserWithAr.new
126
+ end
127
+
128
+ it "should not allow invalid url" do
129
+ @user.homepage = "random"
130
+ @user.should_not be_valid
131
+ end
132
+ end
133
+
134
+ context "with ActiveRecord and legacy syntax" do
135
+ before do
136
+ @user = UserWithArLegacy.new
137
+ end
138
+
139
+ it "should not allow invalid url" do
140
+ @user.homepage = "random"
141
+ @user.should_not be_valid
142
+ end
143
+ end
144
+
105
145
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tanel Suurhans
@@ -22,6 +22,7 @@ dependencies:
22
22
  name: activemodel
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
25
26
  requirements:
26
27
  - - ">="
27
28
  - !ruby/object:Gem::Version
@@ -36,6 +37,7 @@ dependencies:
36
37
  name: rspec
37
38
  prerelease: false
38
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
39
41
  requirements:
40
42
  - - ">="
41
43
  - !ruby/object:Gem::Version
@@ -48,6 +50,7 @@ dependencies:
48
50
  name: diff-lcs
49
51
  prerelease: false
50
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
51
54
  requirements:
52
55
  - - ">="
53
56
  - !ruby/object:Gem::Version
@@ -73,6 +76,14 @@ files:
73
76
  - install.rb
74
77
  - lib/validates_url.rb
75
78
  - rails/init.rb
79
+ - spec/validates_url_spec.rb
80
+ - spec/resources/user_with_blank.rb
81
+ - spec/resources/user_with_nil.rb
82
+ - spec/resources/user_with_ar.rb
83
+ - spec/resources/user_with_legacy_syntax.rb
84
+ - spec/resources/user_with_ar_legacy.rb
85
+ - spec/resources/user.rb
86
+ - spec/spec_helper.rb
76
87
  has_rdoc: true
77
88
  homepage: http://github.com/perfectline/validates_url/tree/master
78
89
  licenses: []
@@ -83,6 +94,7 @@ rdoc_options:
83
94
  require_paths:
84
95
  - lib
85
96
  required_ruby_version: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - ">="
88
100
  - !ruby/object:Gem::Version
@@ -90,6 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
102
  - 0
91
103
  version: "0"
92
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ">="
95
108
  - !ruby/object:Gem::Version
@@ -99,14 +112,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
112
  requirements: []
100
113
 
101
114
  rubyforge_project:
102
- rubygems_version: 1.3.6
115
+ rubygems_version: 1.3.7
103
116
  signing_key:
104
117
  specification_version: 3
105
118
  summary: Library for validating urls in Rails.
106
119
  test_files:
107
- - spec/resources/user.rb
120
+ - spec/validates_url_spec.rb
108
121
  - spec/resources/user_with_blank.rb
109
- - spec/resources/user_with_legacy_syntax.rb
110
122
  - spec/resources/user_with_nil.rb
123
+ - spec/resources/user_with_ar.rb
124
+ - spec/resources/user_with_legacy_syntax.rb
125
+ - spec/resources/user_with_ar_legacy.rb
126
+ - spec/resources/user.rb
111
127
  - spec/spec_helper.rb
112
- - spec/validates_url_spec.rb