url_format 0.0.8 → 1.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/LICENSE.txt +1 -1
- data/README.md +58 -2
- data/Rakefile +6 -0
- data/lib/url_format.rb +7 -2
- data/lib/url_format/url_format_validator.rb +1 -2
- data/lib/url_format/version.rb +1 -1
- data/spec/spec_helper.rb +11 -0
- data/spec/url_format_spec.rb +47 -0
- data/spec/url_format_validator_spec.rb +30 -0
- data/url_format.gemspec +2 -0
- metadata +34 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3297d45a6ae1932a9de8ff8bd8b5a3b5636d6ea4
|
4
|
+
data.tar.gz: b646131d7c98760dc919355eb2b1fd669a2c601d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0d462f83aaf7b4bed83ec50ec73e5a04f90772779e2877998511747f4cf68c512403cf3aae9460c36c085699898b493ec0cabc767e8be7c022b1ef7b899740e
|
7
|
+
data.tar.gz: a74483679fb45b6679b790e5145ddc7671f580c488da65437b4903d12b091c88c63e75212af393cc9dc31b263aa23a357ddb37c6ad231f9dd147dd723fd00d65
|
data/.travis.yml
ADDED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# UrlFormat
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/johnotander/url_format)
|
4
|
+
|
5
|
+
This gem validates a URL, adds the `http://` prefix if not included, and provides a `get_domain` method.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,61 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
Using it is as simple as using the `validates` keyword in your model:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
class User < ActiveRecord::Base
|
27
|
+
|
28
|
+
# ...
|
29
|
+
|
30
|
+
validates :url, url_format: true
|
31
|
+
|
32
|
+
# ...
|
33
|
+
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
Now the url attribute will be validated accordingly:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
User.new(url: 'http://example.com').valid? # => true
|
41
|
+
User.new(url: 'invalid_url..com').valid? # => false
|
42
|
+
```
|
43
|
+
|
44
|
+
Also, the model in question doesn't need to inherit from ActiveRecord::Base, you only need to `include ActiveModel::Validations` in your class:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
require 'url_format'
|
48
|
+
|
49
|
+
class Awesome
|
50
|
+
include ActiveModel::Validations
|
51
|
+
|
52
|
+
attr_accessor :url
|
53
|
+
|
54
|
+
validates :url, url_format: true
|
55
|
+
|
56
|
+
def domain
|
57
|
+
UrlFormat.get_domain(url)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
awesome = Awesome.new
|
62
|
+
|
63
|
+
awesome.url = "www.example.com"
|
64
|
+
awesome.valid? # => true
|
65
|
+
awesome.url # => 'http://www.example.com'
|
66
|
+
awesome.domain # => 'example.com'
|
67
|
+
|
68
|
+
awesome.url = "invalid_url"
|
69
|
+
awesome.valid? # => false
|
70
|
+
```
|
71
|
+
|
72
|
+
The gem can ensure that a url is prefixed with `http://` as well:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
UrlFormat.ensure_http_prefix('google.com') # => 'http://google.com'
|
76
|
+
UrlFormat.ensure_http_prefix('https://google.com') # => 'https://google.com'
|
77
|
+
```
|
22
78
|
|
23
79
|
## Contributing
|
24
80
|
|
data/Rakefile
CHANGED
data/lib/url_format.rb
CHANGED
@@ -5,8 +5,13 @@ require "uri"
|
|
5
5
|
module UrlFormat
|
6
6
|
|
7
7
|
def self.get_domain(url)
|
8
|
-
host = URI.parse(url).host.downcase
|
8
|
+
host = URI.parse(ensure_http_prefix(url)).host.downcase
|
9
9
|
host.start_with?('www.') ? host[4..-1] : host
|
10
|
-
rescue URI::InvalidURIError
|
10
|
+
rescue URI::InvalidURIError, NoMethodError
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.ensure_http_prefix(url)
|
14
|
+
return url if url =~ /\Ahttps?:\/\//
|
15
|
+
"http://#{url}"
|
11
16
|
end
|
12
17
|
end
|
@@ -9,8 +9,7 @@ class UrlFormatValidator < ActiveModel::EachValidator
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def format_value(record, attribute, value)
|
12
|
-
|
13
|
-
record.send("#{attribute}=","http://#{value}")
|
12
|
+
record.send("#{attribute}=",UrlFormat.ensure_http_prefix(value))
|
14
13
|
end
|
15
14
|
|
16
15
|
# Thanks to Dean Perry and Ryan Bates
|
data/lib/url_format/version.rb
CHANGED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe UrlFormat do
|
4
|
+
|
5
|
+
subject { UrlFormat }
|
6
|
+
|
7
|
+
describe '.get_domain' do
|
8
|
+
|
9
|
+
let(:urls_with_domains) {
|
10
|
+
{
|
11
|
+
'http://google.com' => 'google.com',
|
12
|
+
'https://fake.google.com' => 'fake.google.com',
|
13
|
+
'www.fake.google.com/fake_stuff' => 'fake.google.com',
|
14
|
+
'fake.fake.google.com' => 'fake.fake.google.com'
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
it 'should return the proper domain' do
|
19
|
+
urls_with_domains.each do |url, domain|
|
20
|
+
expect(subject.get_domain(url)).to eq(domain)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.ensure_http_prefix' do
|
26
|
+
|
27
|
+
context 'without a prefix' do
|
28
|
+
|
29
|
+
let(:url) { 'www.google.com' }
|
30
|
+
|
31
|
+
it 'should prefix with http://' do
|
32
|
+
expect(subject.ensure_http_prefix(url)).to eq("http://#{ url }")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with a prefix' do
|
37
|
+
|
38
|
+
let(:urls) { %w(http://google.com https://google.com) }
|
39
|
+
|
40
|
+
it 'should not modify the url' do
|
41
|
+
urls.each do |url|
|
42
|
+
expect(subject.ensure_http_prefix(url)).to eq(url)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe UrlFormatValidator do
|
4
|
+
|
5
|
+
let(:fake_model) { FakeModel.new }
|
6
|
+
|
7
|
+
context 'with valid urls' do
|
8
|
+
|
9
|
+
let(:valid_urls) { %w(http://google.com https://www.google.com www.google.com google.com) }
|
10
|
+
|
11
|
+
it 'should be happy' do
|
12
|
+
valid_urls.each do |url|
|
13
|
+
fake_model.url = url
|
14
|
+
expect(fake_model.valid?).to be_truthy
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with invalid urls' do
|
20
|
+
|
21
|
+
let(:invalid_urls) { %w(invalid http://invalid..com, invalid..com) }
|
22
|
+
|
23
|
+
it 'should not be happy' do
|
24
|
+
invalid_urls.each do |invalid_url|
|
25
|
+
fake_model.url = invalid_url
|
26
|
+
expect(fake_model.valid?).to be_falsey
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/url_format.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "activemodel"
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
23
25
|
spec.add_development_dependency "rspec"
|
metadata
CHANGED
@@ -1,55 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: url_format
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Otander
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
|
-
- - ~>
|
31
|
+
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
33
|
version: '1.3'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
|
-
- - ~>
|
38
|
+
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '1.3'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
description: Validate the url format of an attribute.
|
@@ -59,7 +73,8 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
- .gitignore
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
63
78
|
- Gemfile
|
64
79
|
- LICENSE.txt
|
65
80
|
- README.md
|
@@ -67,6 +82,9 @@ files:
|
|
67
82
|
- lib/url_format.rb
|
68
83
|
- lib/url_format/url_format_validator.rb
|
69
84
|
- lib/url_format/version.rb
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
- spec/url_format_spec.rb
|
87
|
+
- spec/url_format_validator_spec.rb
|
70
88
|
- url_format.gemspec
|
71
89
|
homepage: https://github.com/johnotander/url_format
|
72
90
|
licenses:
|
@@ -78,18 +96,21 @@ require_paths:
|
|
78
96
|
- lib
|
79
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
80
98
|
requirements:
|
81
|
-
- -
|
99
|
+
- - ">="
|
82
100
|
- !ruby/object:Gem::Version
|
83
101
|
version: '0'
|
84
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
103
|
requirements:
|
86
|
-
- -
|
104
|
+
- - ">="
|
87
105
|
- !ruby/object:Gem::Version
|
88
106
|
version: '0'
|
89
107
|
requirements: []
|
90
108
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.
|
109
|
+
rubygems_version: 2.4.5
|
92
110
|
signing_key:
|
93
111
|
specification_version: 4
|
94
112
|
summary: Validate the url format of an attribute.
|
95
|
-
test_files:
|
113
|
+
test_files:
|
114
|
+
- spec/spec_helper.rb
|
115
|
+
- spec/url_format_spec.rb
|
116
|
+
- spec/url_format_validator_spec.rb
|