naughty_or_nice 2.0.0 → 2.1.2

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 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