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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8557381dfe5f9b85498b317c29d985ce7bf3d7ed6e79546775e8e5128c14a3da
4
- data.tar.gz: 6961f5827bdd67097558d9d72ce07efd6534451b59b725ffbcbfe4f565c734c8
3
+ metadata.gz: 0aec09a328146d86a192b080290157be98842cf7c8c7b765faa4646e284ebfb0
4
+ data.tar.gz: 9302feaeee0e0833ea3197d2edcf71eee47e8d0227c80bd6215c21342fff6f71
5
5
  SHA512:
6
- metadata.gz: 8dc78c384eff85bc4dde708e6dbb988d44e4bd7e4ba99c5c6e62c1a43360230086099d8d629bc8b5590daf6133a59d36e9eeebf96a998a9697dc71da135e4dae
7
- data.tar.gz: 6f90f4ac77852c2018a3f31691e916addd6dd5765ea62f1de855c20d99899e73b80f0c98a6c9f8165bfd127609366b077a755c8c3726e915554c3b4c299da460
6
+ metadata.gz: e7d1212ef3209071e2feb1fab097dbe62c679654717b99537a4ad34c86c54a1ce67613200fa4536dd85e6b125418fdd50c3b6af24318c9de73b0b3e4bcc8e73e
7
+ data.tar.gz: 6396e99b7a4400ae634b78398f8e40bb07213a1bb34561690082deb486da1cf19c0883fdd1431674287d76a2fb50d92fa81134abae0a04b7ad8cc2d522457f75
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: '20:00'
8
+ open-pull-requests-limit: 10
9
+ assignees:
10
+ - ryonkn
@@ -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.6
23
- uses: actions/setup-ruby@v1
22
+ - name: Setup Ruby 2.7
23
+ uses: ruby/setup-ruby@master
24
24
  with:
25
- ruby-version: 2.6.x
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: [ '2.5.x', '2.6.x' ]
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: actions/setup-ruby@v1
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
@@ -1,8 +1,12 @@
1
1
  require: rubocop-rspec
2
2
 
3
3
  AllCops:
4
+ TargetRubyVersion: 2.5
4
5
  Exclude:
5
6
  - 'speedtest_net.gemspec'
6
7
 
8
+ Layout/ClassStructure:
9
+ Enabled: true
10
+
7
11
  Style/Documentation:
8
12
  Enabled: false
@@ -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
- # require "irb"
15
- # IRB.start(__FILE__)
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
- RADIUS_PER_DEGREE = Math::PI / 180
5
- RADIUS_METER = 6_371_000
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
- delta_lat = (@lat - other.lat) * RADIUS_PER_DEGREE
16
- delta_long = (@long - other.long) * RADIUS_PER_DEGREE
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
- lat_radius = @lat * RADIUS_PER_DEGREE
19
- other_lat_radius = other.lat * RADIUS_PER_DEGREE
17
+ Math.acos(a) * EARTH_RADIUS
18
+ end
20
19
 
21
- a = Math.sin(delta_lat / 2)**2 +
22
- Math.cos(lat_radius) *
23
- Math.cos(other_lat_radius) *
24
- Math.sin(delta_long / 2)**2
20
+ def radian_lat
21
+ @lat * RADIAN_PER_DEGREE
22
+ end
25
23
 
26
- Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) * 2 * RADIUS_METER
24
+ def radian_long
25
+ @long * RADIAN_PER_DEGREE
27
26
  end
28
27
  end
@@ -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.best_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
 
@@ -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
@@ -37,6 +37,7 @@ module SpeedtestNet
37
37
  multi = Curl::Multi.new
38
38
  urls.each do |url|
39
39
  client = Curl::Easy.new(url)
40
+ client.headers['User-Agent'] = SpeedtestNet::USER_AGENT
40
41
  client.on_complete { |data| responses << data }
41
42
  multi.add(client)
42
43
  end
@@ -3,4 +3,5 @@
3
3
  module SpeedtestNet
4
4
  class Error < StandardError; end
5
5
  class HTTPDownloadError < Error; end
6
+ class InvalidServerIdError < Error; end
6
7
  end
@@ -35,6 +35,7 @@ module SpeedtestNet
35
35
  end
36
36
 
37
37
  def measure_latency(url, timeout)
38
+ Typhoeus::Config.user_agent = SpeedtestNet::USER_AGENT
38
39
  client = Typhoeus::Request.new(url, followlocation: true,
39
40
  timeout: timeout)
40
41
  client.run
@@ -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
- private
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']
@@ -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
- url_fields = urls.map do |url|
36
- { url: url, post_fields: { 'content1' => content } }
37
- end
38
- Curl::Multi.post(url_fields) do |curl|
39
- responses << curl
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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ USER_AGENT = "SpeedtestNet/#{SpeedtestNet::VERSION}"
5
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.4.1'
4
+ VERSION = '0.6.2'
5
5
  end
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
@@ -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 'pry'
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 'typhoeus'
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.1
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: 2019-11-20 00:00:00.000000000 Z
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: '0'
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: '0'
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: '10.0'
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: '10.0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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.0.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: []