speedtest_net 0.4.1 → 0.6.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 +4 -4
- data/.github/dependabot.yml +10 -0
- data/.github/workflows/ruby.yml +5 -6
- data/.rubocop.yml +4 -0
- data/bin/console +4 -4
- data/lib/geo.rb +12 -13
- data/lib/speedtest_net.rb +3 -2
- data/lib/speedtest_net/config.rb +1 -3
- data/lib/speedtest_net/download.rb +1 -0
- data/lib/speedtest_net/error.rb +1 -0
- data/lib/speedtest_net/latency.rb +1 -0
- data/lib/speedtest_net/server.rb +15 -4
- data/lib/speedtest_net/upload.rb +9 -6
- data/lib/speedtest_net/user_agent.rb +5 -0
- data/lib/speedtest_net/version.rb +1 -1
- data/renovate.json +5 -0
- data/speedtest_net.gemspec +12 -10
- metadata +58 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0aec09a328146d86a192b080290157be98842cf7c8c7b765faa4646e284ebfb0
|
4
|
+
data.tar.gz: 9302feaeee0e0833ea3197d2edcf71eee47e8d0227c80bd6215c21342fff6f71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7d1212ef3209071e2feb1fab097dbe62c679654717b99537a4ad34c86c54a1ce67613200fa4536dd85e6b125418fdd50c3b6af24318c9de73b0b3e4bcc8e73e
|
7
|
+
data.tar.gz: 6396e99b7a4400ae634b78398f8e40bb07213a1bb34561690082deb486da1cf19c0883fdd1431674287d76a2fb50d92fa81134abae0a04b7ad8cc2d522457f75
|
data/.github/workflows/ruby.yml
CHANGED
@@ -19,10 +19,10 @@ jobs:
|
|
19
19
|
runs-on: ubuntu-latest
|
20
20
|
steps:
|
21
21
|
- uses: actions/checkout@master
|
22
|
-
- name: Setup Ruby 2.
|
23
|
-
uses:
|
22
|
+
- name: Setup Ruby 2.7
|
23
|
+
uses: ruby/setup-ruby@master
|
24
24
|
with:
|
25
|
-
ruby-version: 2.
|
25
|
+
ruby-version: 2.7
|
26
26
|
- name: Run rubocop
|
27
27
|
run: |
|
28
28
|
gem install rubocop rubocop-rspec
|
@@ -32,14 +32,13 @@ jobs:
|
|
32
32
|
runs-on: ubuntu-latest
|
33
33
|
strategy:
|
34
34
|
matrix:
|
35
|
-
ruby: [
|
35
|
+
ruby: [ 2.5, 2.6, 2.7, 'ruby-head' ]
|
36
36
|
steps:
|
37
37
|
- uses: actions/checkout@master
|
38
38
|
- name: Setup Ruby
|
39
|
-
uses:
|
39
|
+
uses: ruby/setup-ruby@master
|
40
40
|
with:
|
41
41
|
ruby-version: ${{ matrix.ruby }}
|
42
|
-
architecture: 'x64'
|
43
42
|
- name: Run apt-get
|
44
43
|
run: |
|
45
44
|
sudo apt-get update
|
data/.rubocop.yml
CHANGED
data/bin/console
CHANGED
@@ -8,8 +8,8 @@ require 'speedtest_net'
|
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
9
9
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
-
require 'pry'
|
12
|
-
Pry.start
|
11
|
+
# require 'pry'
|
12
|
+
# Pry.start
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
require 'irb'
|
15
|
+
IRB.start(__FILE__)
|
data/lib/geo.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Geo
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
attr_reader :lat, :long
|
4
|
+
RADIAN_PER_DEGREE = Math::PI / 180
|
5
|
+
EARTH_RADIUS = 6_371_000
|
8
6
|
|
9
7
|
def initialize(lat, long)
|
10
8
|
@lat = lat
|
@@ -12,17 +10,18 @@ class Geo
|
|
12
10
|
end
|
13
11
|
|
14
12
|
def distance(other) # rubocop:disable Metrics/AbcSize
|
15
|
-
|
16
|
-
|
13
|
+
a = Math.sin(radian_lat) * Math.sin(other.radian_lat) +
|
14
|
+
Math.cos(radian_lat) * Math.cos(other.radian_lat) *
|
15
|
+
Math.cos(radian_long - other.radian_long)
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
Math.acos(a) * EARTH_RADIUS
|
18
|
+
end
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
Math.sin(delta_long / 2)**2
|
20
|
+
def radian_lat
|
21
|
+
@lat * RADIAN_PER_DEGREE
|
22
|
+
end
|
25
23
|
|
26
|
-
|
24
|
+
def radian_long
|
25
|
+
@long * RADIAN_PER_DEGREE
|
27
26
|
end
|
28
27
|
end
|
data/lib/speedtest_net.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'speedtest_net/version'
|
4
|
+
require 'speedtest_net/user_agent'
|
4
5
|
require 'speedtest_net/server'
|
5
6
|
require 'speedtest_net/download'
|
6
7
|
require 'speedtest_net/upload'
|
7
8
|
require 'speedtest_net/result'
|
8
9
|
|
9
10
|
module SpeedtestNet
|
10
|
-
def self.run
|
11
|
+
def self.run(id = nil)
|
11
12
|
config = SpeedtestNet::Config.fetch
|
12
|
-
server = SpeedtestNet::Server.
|
13
|
+
server = SpeedtestNet::Server.select_server(id)
|
13
14
|
download_results = SpeedtestNet::Download.measure(server)
|
14
15
|
upload_results = SpeedtestNet::Upload.measure(server)
|
15
16
|
|
data/lib/speedtest_net/config.rb
CHANGED
@@ -48,9 +48,7 @@ module SpeedtestNet
|
|
48
48
|
client.follow_location = true
|
49
49
|
client.perform
|
50
50
|
|
51
|
-
if client.response_code != 200
|
52
|
-
raise HTTPDownloadError, 'Config download error'
|
53
|
-
end
|
51
|
+
raise HTTPDownloadError, 'Config download error' if client.response_code != 200
|
54
52
|
|
55
53
|
xml = REXML::Document.new(client.body, ignore_whitespace_nodes: :all)
|
56
54
|
xml.elements
|
data/lib/speedtest_net/error.rb
CHANGED
data/lib/speedtest_net/server.rb
CHANGED
@@ -38,6 +38,12 @@ module SpeedtestNet
|
|
38
38
|
servers.sort_by { |s| [s.distance, s.id] }
|
39
39
|
end
|
40
40
|
|
41
|
+
def select_server(id = nil)
|
42
|
+
id.nil? ? best_server : pick_server(id)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
41
47
|
def best_server
|
42
48
|
servers = list
|
43
49
|
closest_servers = servers.first(10)
|
@@ -48,7 +54,14 @@ module SpeedtestNet
|
|
48
54
|
sorted_servers.first
|
49
55
|
end
|
50
56
|
|
51
|
-
|
57
|
+
def pick_server(id)
|
58
|
+
servers = list
|
59
|
+
server = servers.find { |s| s.id == id }
|
60
|
+
raise InvalidServerIdError if server.nil?
|
61
|
+
|
62
|
+
server.measure_latency
|
63
|
+
server
|
64
|
+
end
|
52
65
|
|
53
66
|
def create_instance(server)
|
54
67
|
config = SpeedtestNet::Config.fetch
|
@@ -65,9 +78,7 @@ module SpeedtestNet
|
|
65
78
|
client.follow_location = true
|
66
79
|
client.perform
|
67
80
|
|
68
|
-
if client.response_code != 200
|
69
|
-
raise HTTPDownloadError, 'Server lists download error'
|
70
|
-
end
|
81
|
+
raise HTTPDownloadError, 'Server lists download error' if client.response_code != 200
|
71
82
|
|
72
83
|
xml = REXML::Document.new(client.body, ignore_whitespace_nodes: :all)
|
73
84
|
xml.elements['settings/servers']
|
data/lib/speedtest_net/upload.rb
CHANGED
@@ -29,15 +29,18 @@ module SpeedtestNet
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def multi_uploader(urls, size)
|
32
|
+
def multi_uploader(urls, size) # rubocop:disable Metrics/MethodLength
|
33
33
|
responses = []
|
34
34
|
content = 'A' * size
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
multi = Curl::Multi.new
|
36
|
+
urls.each do |url|
|
37
|
+
client = Curl::Easy.new(url)
|
38
|
+
client.headers['User-Agent'] = SpeedtestNet::USER_AGENT
|
39
|
+
client.http_post(Curl::PostField.content('content1', content))
|
40
|
+
client.on_complete { |data| responses << data }
|
41
|
+
multi.add(client)
|
40
42
|
end
|
43
|
+
multi.perform
|
41
44
|
responses.map(&:upload_speed).sum * 8
|
42
45
|
end
|
43
46
|
end
|
data/speedtest_net.gemspec
CHANGED
@@ -28,18 +28,20 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
|
+
spec.required_ruby_version = '>= 2.5.0'
|
32
|
+
|
31
33
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
32
|
-
spec.add_development_dependency 'codacy-coverage'
|
33
|
-
spec.add_development_dependency 'factory_bot'
|
34
|
-
spec.add_development_dependency '
|
35
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
34
|
+
spec.add_development_dependency 'codacy-coverage', '~> 2.1'
|
35
|
+
spec.add_development_dependency 'factory_bot', '~> 6.0'
|
36
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
36
37
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
37
|
-
spec.add_development_dependency 'rubocop'
|
38
|
-
spec.add_development_dependency 'rubocop-rspec'
|
39
|
-
spec.add_development_dependency 'simplecov'
|
40
|
-
spec.add_development_dependency 'vcr'
|
41
|
-
spec.add_development_dependency 'webmock'
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 0.76'
|
39
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
|
40
|
+
spec.add_development_dependency 'simplecov', '~> 0.17'
|
41
|
+
spec.add_development_dependency 'vcr', '~> 6.0'
|
42
|
+
spec.add_development_dependency 'webmock', '~> 3.7'
|
42
43
|
|
43
44
|
spec.add_dependency 'curb', '~> 0.9'
|
44
|
-
spec.add_dependency '
|
45
|
+
spec.add_dependency 'rexml', '~> 3.2'
|
46
|
+
spec.add_dependency 'typhoeus', '~> 1.3'
|
45
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: speedtest_net
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakano
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,58 +28,44 @@ dependencies:
|
|
28
28
|
name: codacy-coverage
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.1'
|
34
34
|
type: :development
|
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: '
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: factory_bot
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: pry
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
45
|
+
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
47
|
+
version: '6.0'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - "
|
52
|
+
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
54
|
+
version: '6.0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
61
|
+
version: '13.0'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
68
|
+
version: '13.0'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: rspec
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,72 +84,72 @@ dependencies:
|
|
98
84
|
name: rubocop
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
89
|
+
version: '0.76'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
96
|
+
version: '0.76'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: rubocop-rspec
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
|
-
- - "
|
101
|
+
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
103
|
+
version: '1.36'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
|
-
- - "
|
108
|
+
- - "~>"
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
110
|
+
version: '1.36'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: simplecov
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
|
-
- - "
|
115
|
+
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
117
|
+
version: '0.17'
|
132
118
|
type: :development
|
133
119
|
prerelease: false
|
134
120
|
version_requirements: !ruby/object:Gem::Requirement
|
135
121
|
requirements:
|
136
|
-
- - "
|
122
|
+
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
124
|
+
version: '0.17'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: vcr
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
|
-
- - "
|
129
|
+
- - "~>"
|
144
130
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
131
|
+
version: '6.0'
|
146
132
|
type: :development
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
|
-
- - "
|
136
|
+
- - "~>"
|
151
137
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
138
|
+
version: '6.0'
|
153
139
|
- !ruby/object:Gem::Dependency
|
154
140
|
name: webmock
|
155
141
|
requirement: !ruby/object:Gem::Requirement
|
156
142
|
requirements:
|
157
|
-
- - "
|
143
|
+
- - "~>"
|
158
144
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
145
|
+
version: '3.7'
|
160
146
|
type: :development
|
161
147
|
prerelease: false
|
162
148
|
version_requirements: !ruby/object:Gem::Requirement
|
163
149
|
requirements:
|
164
|
-
- - "
|
150
|
+
- - "~>"
|
165
151
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
152
|
+
version: '3.7'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: curb
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,20 +164,34 @@ dependencies:
|
|
178
164
|
- - "~>"
|
179
165
|
- !ruby/object:Gem::Version
|
180
166
|
version: '0.9'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rexml
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.2'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.2'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: typhoeus
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- - "
|
185
|
+
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: '
|
187
|
+
version: '1.3'
|
188
188
|
type: :runtime
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- - "
|
192
|
+
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
194
|
+
version: '1.3'
|
195
195
|
description: Library for testing internet bandwidth using speedtest.net
|
196
196
|
email:
|
197
197
|
- ryo@ryonkn.com
|
@@ -199,6 +199,7 @@ executables: []
|
|
199
199
|
extensions: []
|
200
200
|
extra_rdoc_files: []
|
201
201
|
files:
|
202
|
+
- ".github/dependabot.yml"
|
202
203
|
- ".github/workflows/ruby.yml"
|
203
204
|
- ".gitignore"
|
204
205
|
- ".rspec"
|
@@ -221,7 +222,9 @@ files:
|
|
221
222
|
- lib/speedtest_net/result.rb
|
222
223
|
- lib/speedtest_net/server.rb
|
223
224
|
- lib/speedtest_net/upload.rb
|
225
|
+
- lib/speedtest_net/user_agent.rb
|
224
226
|
- lib/speedtest_net/version.rb
|
227
|
+
- renovate.json
|
225
228
|
- speedtest_net.gemspec
|
226
229
|
homepage: https://github.com/ryonkn/speedtest_net
|
227
230
|
licenses:
|
@@ -230,7 +233,7 @@ metadata:
|
|
230
233
|
homepage_uri: https://github.com/ryonkn/speedtest_net
|
231
234
|
source_code_uri: https://github.com/ryonkn/speedtest_net
|
232
235
|
changelog_uri: https://github.com/ryonkn/speedtest_net
|
233
|
-
post_install_message:
|
236
|
+
post_install_message:
|
234
237
|
rdoc_options: []
|
235
238
|
require_paths:
|
236
239
|
- lib
|
@@ -238,15 +241,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
238
241
|
requirements:
|
239
242
|
- - ">="
|
240
243
|
- !ruby/object:Gem::Version
|
241
|
-
version:
|
244
|
+
version: 2.5.0
|
242
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
246
|
requirements:
|
244
247
|
- - ">="
|
245
248
|
- !ruby/object:Gem::Version
|
246
249
|
version: '0'
|
247
250
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
249
|
-
signing_key:
|
251
|
+
rubygems_version: 3.1.2
|
252
|
+
signing_key:
|
250
253
|
specification_version: 4
|
251
254
|
summary: Library for testing internet bandwidth using speedtest.net
|
252
255
|
test_files: []
|