naughty_or_nice 2.0.0 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ffbdc7af85eed5f4b34c437590c4c0d38eed1dd6
4
- data.tar.gz: 5285a0ae47a4908efb6d6582b02a78c02cbe27a2
2
+ SHA256:
3
+ metadata.gz: 76bf0044478e435776c91bdb769f30517f71832a44d6c5091ac9ef5b4f76823c
4
+ data.tar.gz: a426c8e77324a8fd72e652c2f9fc0ace6b35e3bc60d901edd049c241c150f226
5
5
  SHA512:
6
- metadata.gz: 6a4f84828325d89c6fc187be7c489ea31f00a88ef4529aa03b3874a2acf1faad97650650c75821d145da0c5ad34dbd62f227a1922e08ed5ae3c5128eb703a172
7
- data.tar.gz: 312f9b00bbeb629521f470ce4e7f5adaa1f6297794113b73424e1d6fbad2bc8c9be473d38c83958416facab22bf00b36206147c89bf2eb8ad149de3e9d31ff38
6
+ metadata.gz: 65e4e117e1b6cf2a0825ef65c11807b1e238b02894ab8a6f07065bc2dc7410a863cb7b10021702cec8ed33f644db0ebce89997a773036573af33c8ee7e052216
7
+ data.tar.gz: 4ed85b6546a1d2520759a2d5e4c35f7de6e4fc2c448dbf452cb1ade23d6ca2491c809908cb00ec5866b2cbd9bd5e88ab1679dadbb4faea78290e75ace8968759
data/README.md CHANGED
@@ -36,7 +36,7 @@ class Checker
36
36
  include NaughtyOrNice
37
37
 
38
38
  def valid?
39
- domain.tld == ".gov"
39
+ domain.tld == "gov"
40
40
  end
41
41
  end
42
42
  ```
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'public_suffix'
2
- require "addressable/uri"
4
+ require 'addressable/uri'
3
5
  require_relative './naughty_or_nice/version'
4
6
 
7
+ # Primary module to be mixed into the child class
5
8
  module NaughtyOrNice
6
-
7
9
  # Source: http://bit.ly/1n2X9iv
8
10
  EMAIL_REGEX = %r{
9
11
  ^
10
12
  (
11
- [\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+
13
+ [\w!\#$%&'*+\-/=?\^`\{|\}~]+
12
14
  \.
13
15
  )
14
16
  *
15
- [\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+
17
+ [\w!\#$%&'*+\-/=?\^`\{|\}~]+
16
18
  @
17
19
  (
18
20
  (
@@ -37,19 +39,19 @@ module NaughtyOrNice
37
39
  ){3}
38
40
  \d{1,3}
39
41
  (
40
- \:\d{1,5}
42
+ :\d{1,5}
41
43
  )?
42
44
  )
43
45
  $
44
- }xi
46
+ }xi.freeze
45
47
 
48
+ # Ruby idiom that allows `include` to create class methods
46
49
  module ClassMethods
47
50
  def valid?(text)
48
- self.new(text).valid?
51
+ new(text).valid?
49
52
  end
50
53
  end
51
54
 
52
- # Ruby idiom that allows `include` to create class methods
53
55
  def self.included(base)
54
56
  base.extend(ClassMethods)
55
57
  end
@@ -69,28 +71,32 @@ module NaughtyOrNice
69
71
  #
70
72
  # Returns the domain object or nil, but no errors, never an error
71
73
  def domain
72
- @domain ||= PublicSuffix.parse(domain_text)
73
- rescue PublicSuffix::DomainInvalid, PublicSuffix::DomainNotAllowed
74
- nil
74
+ return @domain if defined? @domain
75
+
76
+ @domain = begin
77
+ PublicSuffix.parse(normalized_domain, default_rule: nil)
78
+ rescue PublicSuffix::DomainInvalid, PublicSuffix::DomainNotAllowed
79
+ nil
80
+ end
75
81
  end
76
82
 
77
83
  # Checks if the input string represents a valid domain
78
84
  #
79
85
  # Returns boolean true if a valid domain, otherwise false
80
86
  def valid?
81
- !!(domain && domain.valid?)
87
+ !domain.nil?
82
88
  end
83
89
 
84
90
  # Is the input text in the form of a valid email address?
85
91
  #
86
92
  # Returns true if email, otherwise false
87
93
  def email?
88
- !!(@text =~ EMAIL_REGEX)
94
+ !(@text =~ EMAIL_REGEX).nil?
89
95
  end
90
96
 
91
97
  # Return the parsed domain as a string
92
98
  def to_s
93
- domain.to_s if domain
99
+ @to_s ||= domain.to_s if domain
94
100
  end
95
101
 
96
102
  def inspect
@@ -104,20 +110,22 @@ module NaughtyOrNice
104
110
  # Can handle urls, domains, or emails
105
111
  #
106
112
  # Returns the domain string
107
- def domain_text
108
- return nil if @text.empty?
109
-
110
- uri = Addressable::URI.parse(@text)
113
+ def normalized_domain
114
+ if @text.empty?
115
+ nil
116
+ elsif parsed_domain
117
+ parsed_domain.host
118
+ end
119
+ end
111
120
 
112
- if uri.host # valid https?://* URI
113
- uri.host
114
- elsif email?
115
- @text.match(/@([\w\.\-]+)\Z/i)[1]
116
- else # url sans http://
117
- uri = Addressable::URI.parse("http://#{@text}")
121
+ def parsed_domain
122
+ @parsed_domain ||= begin
123
+ text = @text.dup
124
+ text.prepend('http://') unless %r{\Ahttps?://}.match?(text)
125
+ uri = Addressable::URI.parse(text)
118
126
  # properly parse http://foo edge cases
119
127
  # see https://github.com/sporkmonger/addressable/issues/145
120
- uri.host if uri.host =~ /\./
128
+ uri if uri.host.include?('.')
121
129
  end
122
130
  rescue Addressable::URI::InvalidURIError
123
131
  nil
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NaughtyOrNice
2
- VERSION = "2.0.0"
4
+ VERSION = '2.1.2'
3
5
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: naughty_or_nice
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-09 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: public_suffix
14
+ name: addressable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.2'
19
+ version: '2.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.2'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: addressable
28
+ name: public_suffix
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.3'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '2.3'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
- name: shoulda
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
@@ -67,19 +67,47 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.5'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-performance
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '10.3'
103
+ version: '2.0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '10.3'
110
+ version: '2.0'
83
111
  description: Naughty or Nice simplifies the process of extracting domain information
84
112
  from a domain-like string (an email, a URL, etc.) and checking whether it meets
85
113
  criteria you specify.
@@ -90,14 +118,13 @@ extra_rdoc_files: []
90
118
  files:
91
119
  - LICENSE.md
92
120
  - README.md
93
- - Rakefile
94
121
  - lib/naughty_or_nice.rb
95
122
  - lib/naughty_or_nice/version.rb
96
123
  homepage: http://github.com/benbalter/naughty_or_nice
97
124
  licenses:
98
125
  - MIT
99
126
  metadata: {}
100
- post_install_message:
127
+ post_install_message:
101
128
  rdoc_options: []
102
129
  require_paths:
103
130
  - lib
@@ -112,9 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
139
  - !ruby/object:Gem::Version
113
140
  version: '0'
114
141
  requirements: []
115
- rubyforge_project:
116
- rubygems_version: 2.2.3
117
- signing_key:
142
+ rubygems_version: 3.1.4
143
+ signing_key:
118
144
  specification_version: 4
119
145
  summary: You've made the list. We'll help you check it twice. Given a domain-like
120
146
  string, verifies inclusion in a list you provide.
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
-
4
- Rake::TestTask.new(:test) do |test|
5
- test.libs << 'lib' << 'test'
6
- test.pattern = 'test/**/test_naughty_or_nice*.rb'
7
- test.verbose = true
8
- end
9
-
10
- desc "Open console with Naughty Or Nice loaded"
11
- task :console do
12
- exec "pry -r ./lib/naughty_or_nice.rb"
13
- end