speedtest_net 0.5.0 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e96f1e3dfc288c7a9203f575420bc6b25d5077c8dbde6e3822851f54296fff5f
4
- data.tar.gz: 8019fba56eae4047eab3ae84b6afbaa4979262e3ed59395a6394c1ad466e013c
3
+ metadata.gz: ed21ac6a96ef110554941966993ee911a4062090216400207534c59afcc5b383
4
+ data.tar.gz: 466c522ae2b60cd187a5d7b98b023db50bfa8f9834e55a01979879de154a3e34
5
5
  SHA512:
6
- metadata.gz: 6bcfdd411e38e6e6a602ce61a41f32ed5f27ee1723269502e8d80cedc08a8d5ccad1bcd61874f3621287024463bce1d6466b92834a999f639f04ebae529b856a
7
- data.tar.gz: d535e32474576a614709b33b67bc836cc32bf32021ee8d1a38eaf202817cacfd0e223c1f8c4d9efd7a3ce17ef3ad605fbb37832100bfcff3ae6b87905f27b9df
6
+ metadata.gz: 838e4b7eb05e59234e650c6d807c985a236467bf89af5a440df795febe66e6c211026b54f5ecd6019e41bed08e6b50e61ea9de1fc5f4b2ad6f4ade54ec6f55e9
7
+ data.tar.gz: 51d43777a2d506eb2092e1b77fd1de923881e4ba0fabe727a09b7da8dea1a0112bdd78ea3af2cd89f4072de352a0667b6ff4799e19110923ce34afd05c4270dd
@@ -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
@@ -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__)
@@ -1,24 +1,24 @@
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
- config = SpeedtestNet::Config.fetch
12
- server = SpeedtestNet::Server.best_server
13
- download_results = SpeedtestNet::Download.measure(server)
14
- upload_results = SpeedtestNet::Upload.measure(server)
11
+ def self.run(id = nil, exclude_server_ids: [])
12
+ config = Config.fetch
13
+ server = Server.select_server(id, exclude_server_ids)
14
+ download_results = Download.measure(server)
15
+ upload_results = Upload.measure(server)
15
16
 
16
- SpeedtestNet::Config.clear_cache
17
- SpeedtestNet::Result.new(config.client, server, download_results,
18
- upload_results)
17
+ Config.clear_cache
18
+ Result.new(config.client, server, download_results, upload_results)
19
19
  end
20
20
 
21
21
  def self.list_server
22
- SpeedtestNet::Server.list
22
+ Server.list
23
23
  end
24
24
  end
@@ -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
@@ -12,7 +12,7 @@ module SpeedtestNet
12
12
 
13
13
  class << self
14
14
  def measure(server)
15
- config = SpeedtestNet::Config.fetch
15
+ config = Config.fetch
16
16
  concurrent_number = config.download[:threadsperurl]
17
17
 
18
18
  results = FILES.map do |file|
@@ -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'] = 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
@@ -11,7 +11,7 @@ module SpeedtestNet
11
11
 
12
12
  class << self
13
13
  def measure(server)
14
- config = SpeedtestNet::Config.fetch
14
+ config = Config.fetch
15
15
  test_length = test_length(config)
16
16
  timeout = config.latency[:timeout]
17
17
 
@@ -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
@@ -16,7 +16,7 @@ module SpeedtestNet
16
16
  end
17
17
 
18
18
  def download
19
- SpeedtestNet::CalculateSpeed.call(@download_results)
19
+ CalculateSpeed.call(@download_results)
20
20
  end
21
21
 
22
22
  def pretty_download
@@ -24,7 +24,7 @@ module SpeedtestNet
24
24
  end
25
25
 
26
26
  def upload
27
- SpeedtestNet::CalculateSpeed.call(@upload_results)
27
+ CalculateSpeed.call(@upload_results)
28
28
  end
29
29
 
30
30
  def pretty_upload
@@ -26,7 +26,7 @@ module SpeedtestNet
26
26
  end
27
27
 
28
28
  def measure_latency
29
- @latency = SpeedtestNet::Latency.measure(self)
29
+ @latency = Latency.measure(self)
30
30
  end
31
31
 
32
32
  class << self
@@ -38,9 +38,16 @@ module SpeedtestNet
38
38
  servers.sort_by { |s| [s.distance, s.id] }
39
39
  end
40
40
 
41
- def best_server
41
+ def select_server(id = nil, exclude_server_ids = [])
42
+ id.nil? ? best_server(exclude_server_ids) : pick_server(id)
43
+ end
44
+
45
+ private
46
+
47
+ def best_server(exclude_server_ids)
42
48
  servers = list
43
- closest_servers = servers.first(10)
49
+ excluded_servers = servers.reject { |server| exclude_server_ids.include?(server.id) }
50
+ closest_servers = excluded_servers.first(10)
44
51
  closest_servers.each(&:measure_latency)
45
52
  sorted_servers = closest_servers.sort_by do |s|
46
53
  [s.latency, s.distance, s.id]
@@ -48,10 +55,17 @@ module SpeedtestNet
48
55
  sorted_servers.first
49
56
  end
50
57
 
51
- private
58
+ def pick_server(id)
59
+ servers = list
60
+ server = servers.find { |s| s.id == id }
61
+ raise InvalidServerIdError if server.nil?
62
+
63
+ server.measure_latency
64
+ server
65
+ end
52
66
 
53
67
  def create_instance(server)
54
- config = SpeedtestNet::Config.fetch
68
+ config = Config.fetch
55
69
  url = server['url2'] || server['url']
56
70
 
57
71
  geo = Geo.new(server['lat'].to_f, server['lon'].to_f)
@@ -65,9 +79,7 @@ module SpeedtestNet
65
79
  client.follow_location = true
66
80
  client.perform
67
81
 
68
- if client.response_code != 200
69
- raise HTTPDownloadError, 'Server lists download error'
70
- end
82
+ raise HTTPDownloadError, 'Server lists download error' if client.response_code != 200
71
83
 
72
84
  xml = REXML::Document.new(client.body, ignore_whitespace_nodes: :all)
73
85
  xml.elements['settings/servers']
@@ -10,7 +10,7 @@ module SpeedtestNet
10
10
 
11
11
  class << self
12
12
  def measure(server)
13
- config = SpeedtestNet::Config.fetch
13
+ config = Config.fetch
14
14
  concurrent_number = config.upload[:threadsperurl]
15
15
 
16
16
  results = SIZE.map do |size|
@@ -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'] = 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/#{VERSION}"
5
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.5.0'
4
+ VERSION = '0.7.0'
5
5
  end
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
@@ -32,16 +32,16 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_development_dependency 'bundler', '~> 2.0'
34
34
  spec.add_development_dependency 'codacy-coverage', '~> 2.1'
35
- spec.add_development_dependency 'factory_bot', '~> 5.1'
36
- spec.add_development_dependency 'pry', '~> 0.12'
35
+ spec.add_development_dependency 'factory_bot', '~> 6.0'
37
36
  spec.add_development_dependency 'rake', '~> 13.0'
38
37
  spec.add_development_dependency 'rspec', '~> 3.0'
39
38
  spec.add_development_dependency 'rubocop', '~> 0.76'
40
39
  spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
41
40
  spec.add_development_dependency 'simplecov', '~> 0.17'
42
- spec.add_development_dependency 'vcr', '~> 5.0'
41
+ spec.add_development_dependency 'vcr', '~> 6.0'
43
42
  spec.add_development_dependency 'webmock', '~> 3.7'
44
43
 
45
44
  spec.add_dependency 'curb', '~> 0.9'
45
+ spec.add_dependency 'rexml', '~> 3.2'
46
46
  spec.add_dependency 'typhoeus', '~> 1.3'
47
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.5.0
4
+ version: 0.7.0
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-12-14 00:00:00.000000000 Z
11
+ date: 2020-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,28 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.1'
47
+ version: '6.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.1'
55
- - !ruby/object:Gem::Dependency
56
- name: pry
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.12'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.12'
54
+ version: '6.0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +128,14 @@ dependencies:
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: '5.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: '5.0'
138
+ version: '6.0'
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: webmock
155
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +164,20 @@ 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
@@ -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
@@ -245,8 +248,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
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: []