public_ip 0.1.1 → 0.2.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 +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.
|