public_ip 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +5 -1
- data/.ruby-version +1 -1
- data/.travis.yml +1 -2
- data/Rakefile +2 -2
- data/bin/public_ip +0 -1
- data/lib/public_ip/service/curl_my_ip.rb +9 -0
- data/lib/public_ip/service/ifconfig_me.rb +4 -0
- data/lib/public_ip/service/ip_echo.rb +4 -0
- data/lib/public_ip/service/json_type.rb +2 -4
- data/lib/public_ip/service/matched_expression.rb +1 -3
- data/lib/public_ip/service/mx_toolbox.rb +2 -6
- data/lib/public_ip/service/parsed_html.rb +4 -2
- data/lib/public_ip/service/plain.rb +2 -4
- data/lib/public_ip/service/registry.rb +2 -3
- data/lib/public_ip/service/simple.rb +18 -2
- data/lib/public_ip/service/what_is_my_ip.rb +3 -1
- data/lib/public_ip/version.rb +1 -1
- data/lib/public_ip.rb +4 -7
- data/public_ip.gemspec +14 -8
- metadata +46 -32
- data/lib/public_ip/service/ip_ogre.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 39935714ca59a830458e02a82ebbee41923c6467d2c0de7de85b0919a0ba14d2
|
4
|
+
data.tar.gz: 2401864e2aed2471eeb0f84fd0dedd8de4512235f0afdda9bdd78051c649f6bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecdc0f1f5846704361c49ba8a48d55d37fe06bb4a92d4b5a725f30b54915af914f50fd77798b9a017b4c7fb7078495de212a4ce78b6b7f5293c33293ce582f8c
|
7
|
+
data.tar.gz: 8a4b325cb53a39513c3c3d1e50657e9d7da8ac5fc44c422e15b55d0480fde9529f43631f4f2ec1f2df9618132e8a04f6cf992c174bc6b92f42e95eae0f4fbb84
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.5.0
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
@@ -5,11 +5,11 @@ require 'cucumber/rake/task'
|
|
5
5
|
require 'rubocop/rake_task'
|
6
6
|
|
7
7
|
Cucumber::Rake::Task.new(:features) do |t|
|
8
|
-
t.cucumber_opts = 'features --format pretty'
|
8
|
+
t.cucumber_opts = 'features --format pretty --retry 5'
|
9
9
|
end
|
10
10
|
|
11
11
|
RuboCop::RakeTask.new(:rubocop)
|
12
12
|
|
13
13
|
RSpec::Core::RakeTask.new(:spec)
|
14
14
|
|
15
|
-
task default: [
|
15
|
+
task default: %i[spec features rubocop]
|
data/bin/public_ip
CHANGED
@@ -6,12 +6,10 @@ module PublicIp
|
|
6
6
|
extend PublicIp::Service::Registrable
|
7
7
|
|
8
8
|
def self.parse_json(_json_data)
|
9
|
-
|
9
|
+
raise 'Not implemented'
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.
|
13
|
-
response = perform_request
|
14
|
-
|
12
|
+
def self.extract_ip(response)
|
15
13
|
parse_json(JSON.parse(response.body.strip))
|
16
14
|
end
|
17
15
|
end
|
@@ -2,13 +2,9 @@ require 'nokogiri'
|
|
2
2
|
|
3
3
|
module PublicIp
|
4
4
|
module Service
|
5
|
-
class MxToolbox <
|
5
|
+
class MxToolbox < Plain
|
6
6
|
def self.uri
|
7
|
-
URI('
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.parse_ip_address(response_body)
|
11
|
-
Nokogiri::HTML(response_body).css('#ctl00_ContentPlaceHolder1_hlIP').text
|
7
|
+
URI('https://api.mxtoolbox.com/api/v1/utils/whatsmyip')
|
12
8
|
end
|
13
9
|
end
|
14
10
|
end
|
@@ -3,9 +3,11 @@ module PublicIp
|
|
3
3
|
class ParsedHTML < Simple
|
4
4
|
extend PublicIp::Service::Registrable
|
5
5
|
|
6
|
-
def self.
|
7
|
-
|
6
|
+
def self.parse_ip_address(_html)
|
7
|
+
raise 'Not implemented'
|
8
|
+
end
|
8
9
|
|
10
|
+
def self.extract_ip(response)
|
9
11
|
parse_ip_address(response.body)
|
10
12
|
end
|
11
13
|
end
|
@@ -8,9 +8,8 @@ module PublicIp
|
|
8
8
|
attr_reader :service_database
|
9
9
|
|
10
10
|
def self.register_service(service_class)
|
11
|
-
|
12
|
-
|
13
|
-
end
|
11
|
+
return if instance.service_database.key?(service_class.symbol)
|
12
|
+
instance.service_database[service_class.symbol] = service_class
|
14
13
|
end
|
15
14
|
|
16
15
|
def self.[](service)
|
@@ -1,14 +1,30 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'timeout'
|
3
|
+
require 'ipaddress'
|
3
4
|
|
4
5
|
module PublicIp
|
5
6
|
module Service
|
7
|
+
class InvalidIpAddress < StandardError; end
|
8
|
+
class TimedOut < StandardError; end
|
9
|
+
|
6
10
|
class Simple
|
7
11
|
attr_reader :uri
|
8
12
|
attr_reader :headers
|
9
13
|
|
14
|
+
def self.ip
|
15
|
+
response = perform_request
|
16
|
+
|
17
|
+
ip_address = extract_ip(response)
|
18
|
+
|
19
|
+
unless IPAddress.valid?(ip_address)
|
20
|
+
raise PublicIp::Service::InvalidIpAddress, "#{ip_address} is not a valid ip address"
|
21
|
+
end
|
22
|
+
|
23
|
+
ip_address
|
24
|
+
end
|
25
|
+
|
10
26
|
def self.uri
|
11
|
-
|
27
|
+
raise 'Not implemented'
|
12
28
|
end
|
13
29
|
|
14
30
|
def self.headers
|
@@ -27,7 +43,7 @@ module PublicIp
|
|
27
43
|
end
|
28
44
|
|
29
45
|
def self.perform_request
|
30
|
-
Timeout.timeout(PublicIp::TIMEOUT_IN_SECS) do
|
46
|
+
Timeout.timeout(PublicIp::TIMEOUT_IN_SECS, PublicIp::Service::TimedOut) do
|
31
47
|
request = Net::HTTP::Get.new(uri, headers)
|
32
48
|
http = Net::HTTP.new(uri.host, uri.port)
|
33
49
|
http.use_ssl = (uri.scheme == 'https')
|
@@ -12,7 +12,9 @@ module PublicIp
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.parse_ip_address(response_body)
|
15
|
-
Nokogiri::HTML(response_body).
|
15
|
+
doc = Nokogiri::HTML(response_body).at('h3:contains("Your Public IPv4 is: ")')
|
16
|
+
|
17
|
+
return doc.text.strip.sub('Your Public IPv4 is: ', '') unless doc.nil?
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
data/lib/public_ip/version.rb
CHANGED
data/lib/public_ip.rb
CHANGED
@@ -13,7 +13,6 @@ module PublicIp
|
|
13
13
|
TIMEOUT_IN_SECS = 3
|
14
14
|
|
15
15
|
class UnknownService < StandardError; end
|
16
|
-
class TimedOut < StandardError; end
|
17
16
|
|
18
17
|
module_function
|
19
18
|
|
@@ -24,13 +23,11 @@ module PublicIp
|
|
24
23
|
else
|
25
24
|
PublicIp::Service::Registry[service].ip
|
26
25
|
end
|
27
|
-
rescue
|
26
|
+
rescue PublicIp::Service::TimedOut, PublicIp::Service::InvalidIpAddress
|
28
27
|
tries -= 1
|
29
|
-
if tries
|
30
|
-
|
31
|
-
|
32
|
-
raise PublicIp::TimedOut, 'Took too long to get your public ip address, try with another service'
|
33
|
-
end
|
28
|
+
retry if tries.positive? && service == :random
|
29
|
+
|
30
|
+
raise
|
34
31
|
end
|
35
32
|
|
36
33
|
def list_services
|
data/public_ip.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# rubocop:disable Metrics/BlockLength
|
2
|
+
|
1
3
|
lib = File.expand_path('../lib', __FILE__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require 'public_ip/version'
|
@@ -10,10 +12,10 @@ Gem::Specification.new do |spec|
|
|
10
12
|
|
11
13
|
spec.summary = 'Get your public internet IP the easy way.'
|
12
14
|
spec.description = <<-DESCRIPTION
|
13
|
-
Ever questioned what is your public internet IP and you've forgotten how to do it.
|
14
|
-
Instead of remembering every service that you can query to get your public internet IP you can use PublicIP.
|
15
|
-
You can use it directly in your code or in your CLI.
|
16
|
-
DESCRIPTION
|
15
|
+
Ever questioned what is your public internet IP and you've forgotten how to do it.
|
16
|
+
Instead of remembering every service that you can query to get your public internet IP you can use PublicIP.
|
17
|
+
You can use it directly in your code or in your CLI.
|
18
|
+
DESCRIPTION
|
17
19
|
|
18
20
|
spec.homepage = 'https://github.com/pedrocarrico/public_ip'
|
19
21
|
spec.license = 'MIT'
|
@@ -23,14 +25,18 @@ DESCRIPTION
|
|
23
25
|
spec.executables = ['public_ip']
|
24
26
|
spec.require_paths = ['lib']
|
25
27
|
|
28
|
+
spec.required_ruby_version = '>= 2.1'
|
29
|
+
|
30
|
+
spec.add_dependency 'ipaddress', '~> 0.8.3'
|
26
31
|
spec.add_dependency 'methadone', '~> 1.9.2'
|
27
|
-
spec.add_dependency 'nokogiri', '~> 1.
|
32
|
+
spec.add_dependency 'nokogiri', '~> 1.8.1'
|
28
33
|
|
34
|
+
spec.add_development_dependency 'aruba', '~> 0.14.3'
|
29
35
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
36
|
+
spec.add_development_dependency 'pry', '~> 0.10.3'
|
30
37
|
spec.add_development_dependency 'rake', '~> 10.0'
|
31
38
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
32
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
33
|
-
spec.add_development_dependency 'pry', '~> 0.10.3'
|
39
|
+
spec.add_development_dependency 'rubocop', '~> 0.52.1'
|
34
40
|
spec.add_development_dependency 'webmock', '~> 1.22.3'
|
35
|
-
spec.add_development_dependency 'aruba', '~> 0.11.2'
|
36
41
|
end
|
42
|
+
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: public_ip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pedro Carriço
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ipaddress
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.3
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: methadone
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -30,116 +44,116 @@ dependencies:
|
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
47
|
+
version: 1.8.1
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
54
|
+
version: 1.8.1
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: aruba
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
61
|
+
version: 0.14.3
|
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
|
-
version:
|
68
|
+
version: 0.14.3
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '10
|
75
|
+
version: '1.10'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '10
|
82
|
+
version: '1.10'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: pry
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: 0.10.3
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 0.10.3
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0
|
103
|
+
version: '10.0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0
|
110
|
+
version: '10.0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: rspec
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
117
|
+
version: '3.4'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
124
|
+
version: '3.4'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: rubocop
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
131
|
+
version: 0.52.1
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
138
|
+
version: 0.52.1
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: webmock
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
145
|
+
version: 1.22.3
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
139
|
-
description: |
|
140
|
-
|
141
|
-
|
142
|
-
|
152
|
+
version: 1.22.3
|
153
|
+
description: |2
|
154
|
+
Ever questioned what is your public internet IP and you've forgotten how to do it.
|
155
|
+
Instead of remembering every service that you can query to get your public internet IP you can use PublicIP.
|
156
|
+
You can use it directly in your code or in your CLI.
|
143
157
|
email:
|
144
158
|
- pedro.carrico@gmail.com
|
145
159
|
executables:
|
@@ -164,6 +178,7 @@ files:
|
|
164
178
|
- lib/public_ip.rb
|
165
179
|
- lib/public_ip/service/akamai.rb
|
166
180
|
- lib/public_ip/service/amazon_aws.rb
|
181
|
+
- lib/public_ip/service/curl_my_ip.rb
|
167
182
|
- lib/public_ip/service/dyndns.rb
|
168
183
|
- lib/public_ip/service/i_can_haz_ip.rb
|
169
184
|
- lib/public_ip/service/ident_me.rb
|
@@ -172,7 +187,6 @@ files:
|
|
172
187
|
- lib/public_ip/service/ip_chicken.rb
|
173
188
|
- lib/public_ip/service/ip_echo.rb
|
174
189
|
- lib/public_ip/service/ip_info.rb
|
175
|
-
- lib/public_ip/service/ip_ogre.rb
|
176
190
|
- lib/public_ip/service/ipify.rb
|
177
191
|
- lib/public_ip/service/json_type.rb
|
178
192
|
- lib/public_ip/service/matched_expression.rb
|
@@ -201,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
201
215
|
requirements:
|
202
216
|
- - ">="
|
203
217
|
- !ruby/object:Gem::Version
|
204
|
-
version: '
|
218
|
+
version: '2.1'
|
205
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
220
|
requirements:
|
207
221
|
- - ">="
|
@@ -209,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
223
|
version: '0'
|
210
224
|
requirements: []
|
211
225
|
rubyforge_project:
|
212
|
-
rubygems_version: 2.
|
226
|
+
rubygems_version: 2.7.3
|
213
227
|
signing_key:
|
214
228
|
specification_version: 4
|
215
229
|
summary: Get your public internet IP the easy way.
|