speedtest_net 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 217f3633009196a3ae906596f022ca6c81c12bb4098338560b91b7fb523ec68a
4
- data.tar.gz: 87eb7634a57f9d3176f6a6ff58f706c88f357ab5b7a4246b115151ecd68c8628
3
+ metadata.gz: d1a5c88b87cc3d889f9b0eca0e229ade428e5cb5235fbde09556b2fb561c5c6f
4
+ data.tar.gz: 4376f9b649bc1528cd07a29b20f81464cf794da3aeb8acbfb339dda87dc64b9e
5
5
  SHA512:
6
- metadata.gz: 5f396b5c02e00fe4b1f276824e947c7bfbb667e2f46627775479d1711c68356d2b76a5c1d2e5c65757e8d168f63d84168175b88a587d9002f92ba575eddfcd81
7
- data.tar.gz: 02eefbc9acacb3b4618588ada8874c5cc315183c092d1382bdde90ca6ed92ce5c7c06cffd529c9a5ac89ec8f6e34ccdddf5eb5ad4cc50cc9cb206d3c40447382
6
+ metadata.gz: f36f079a6359caf1896ab0f864df4cc7797ed1e07077ce047d641260437519ff11432898e8679842abdd3965f6e1e6457de9fe1276097452dd7dbac786a75dd3
7
+ data.tar.gz: 43defb7ec4ff05512f4c57f80ca2f4e30635e8bc17ba4235867c5a1362f2de691458c6c0aaddbd6735da58d4c607d599587bf9bc6cfaf9f60509bf2f9fd121e4
@@ -0,0 +1,53 @@
1
+ name: GitHub Actions
2
+
3
+ on:
4
+ push:
5
+ paths-ignore:
6
+ - CODE_OF_CONDUCT.md
7
+ - LICENSE.txt
8
+ - README.md
9
+ pull_request:
10
+ paths-ignore:
11
+ - CODE_OF_CONDUCT.md
12
+ - LICENSE.txt
13
+ - README.md
14
+
15
+ jobs:
16
+ rubocop:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@master
20
+ - name: Setup Ruby 2.6
21
+ uses: actions/setup-ruby@v1
22
+ with:
23
+ ruby-version: 2.6.x
24
+ - name: Run rubocop
25
+ run: |
26
+ gem install rubocop rubocop-rspec
27
+ rubocop
28
+
29
+ rspec:
30
+ runs-on: ubuntu-latest
31
+ strategy:
32
+ matrix:
33
+ ruby: [ '2.5.x', '2.6.x' ]
34
+ steps:
35
+ - uses: actions/checkout@master
36
+ - name: Setup Ruby
37
+ uses: actions/setup-ruby@v1
38
+ with:
39
+ ruby-version: ${{ matrix.ruby }}
40
+ architecture: 'x64'
41
+ - name: Run apt-get
42
+ run: |
43
+ sudo apt-get update
44
+ sudo apt-get install libcurl4-openssl-dev
45
+ - name: Bundle install
46
+ run: |
47
+ gem install bundler
48
+ bundle install --jobs 4 --retry 3
49
+ - name: Run rspec
50
+ run: bundle exec rspec
51
+ env:
52
+ CI: true
53
+ CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
+ .envrc
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # SpeedtestNet
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/speedtest_net.svg)](https://badge.fury.io/rb/speedtest_net)
4
+ [![Actions Status](https://github.com/ryonkn/speedtest_net/workflows/GitHub%20Actions/badge.svg)](https://github.com/ryonkn/speedtest_net/actions)
4
5
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/18f112dae19a48938bdf2b225d3a76bb)](https://www.codacy.com/manual/ryonkn/speedtest_net?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Grade)
5
6
 
6
7
  A Ruby library for testing internet bandwidth using speedtest.net
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ class CalculateSpeed
5
+ class << self
6
+ # Fastest 10% and slowest 30% of results are then discarded
7
+ # See: https://support.ookla.com/hc/en-us/articles/234575828-What-is-the-test-flow-and-methodology-for-the-Speedtest-
8
+ def call(results)
9
+ sorted_results = sorted_nemric_results(results)
10
+ count = sorted_results.count
11
+
12
+ return 0.0 if count.zero?
13
+
14
+ faster = count - (count * 0.1).round # fastest 10%
15
+ slower = (count * 0.3).round # slowest 30%
16
+ target_results = sorted_results[slower...faster]
17
+
18
+ # The remaining result are averaged together to determine
19
+ # the final result
20
+ target_results.sum.to_f / target_results.count
21
+ end
22
+
23
+ private
24
+
25
+ def sorted_nemric_results(results)
26
+ numeric_results = results.select { |result| result.is_a? Numeric }
27
+ numeric_results.sort
28
+ end
29
+ end
30
+ end
31
+ end
@@ -86,9 +86,9 @@ module SpeedtestNet
86
86
  def upload_config(elements)
87
87
  {
88
88
  testlength: elements['testlength'].to_i,
89
- initialtest: elements['initialtest'],
89
+ initialtest: elements['initialtest'].to_i,
90
90
  mintestsize: elements['mintestsize'],
91
- threads: elements['threads'],
91
+ threads: elements['threads'].to_i,
92
92
  maxchunksize: elements['maxchunksize'],
93
93
  maxchunkcount: elements['maxchunkcount'].to_i,
94
94
  threadsperurl: elements['threadsperurl'].to_i
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'curb'
4
4
  require 'securerandom'
5
+ require 'speedtest_net/calculate_speed'
5
6
 
6
7
  module SpeedtestNet
7
8
  class Download
@@ -18,7 +19,7 @@ module SpeedtestNet
18
19
  urls = create_urls(server, file, concurrent_number)
19
20
  multi_downloader(urls)
20
21
  end
21
- calculate_results(results)
22
+ SpeedtestNet::CalculateSpeed.call(results)
22
23
  end
23
24
 
24
25
  private
@@ -42,15 +43,6 @@ module SpeedtestNet
42
43
  multi.perform
43
44
  responses.map(&:download_speed).sum * 8
44
45
  end
45
-
46
- def calculate_results(results)
47
- sorted_results = results.sort
48
- count = sorted_results.count
49
- faster = count - (count * 0.1).round
50
- slower = (count * 0.3).round
51
- target_results = sorted_results[slower...faster]
52
- target_results.sum / target_results.count
53
- end
54
46
  end
55
47
  end
56
48
  end
@@ -35,14 +35,16 @@ module SpeedtestNet
35
35
  servers = xml_servers.map do |server|
36
36
  create_instance(server)
37
37
  end
38
- servers.sort { |a, b| a.distance <=> b.distance }
38
+ servers.sort_by { |s| [s.distance, s.id] }
39
39
  end
40
40
 
41
41
  def best_server
42
42
  servers = list
43
43
  closest_servers = servers.first(10)
44
44
  closest_servers.each(&:measure_latency)
45
- sorted_servers = closest_servers.sort { |a, b| a.latency <=> b.latency }
45
+ sorted_servers = closest_servers.sort_by do |s|
46
+ [s.latency, s.distance, s.id]
47
+ end
46
48
  sorted_servers.first
47
49
  end
48
50
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'curb'
4
4
  require 'securerandom'
5
+ require 'speedtest_net/calculate_speed'
5
6
 
6
7
  module SpeedtestNet
7
8
  class Upload
@@ -17,7 +18,7 @@ module SpeedtestNet
17
18
  urls = create_urls(server, concurrent_number)
18
19
  multi_uploader(urls, size)
19
20
  end
20
- calculate_results(results)
21
+ SpeedtestNet::CalculateSpeed.call(results)
21
22
  end
22
23
 
23
24
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.3.0'
4
+ VERSION = '0.3.1'
5
5
  end
@@ -34,6 +34,10 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency 'rspec', '~> 3.0'
35
35
  spec.add_development_dependency 'rubocop'
36
36
  spec.add_development_dependency 'rubocop-rspec'
37
+ spec.add_development_dependency 'simplecov'
38
+ spec.add_development_dependency 'vcr'
39
+ spec.add_development_dependency 'webmock'
40
+ spec.add_development_dependency 'codacy-coverage'
37
41
 
38
42
  spec.add_dependency 'curb', '~> 0.9'
39
43
  spec.add_dependency 'typhoeus'
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.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakano
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-06 00:00:00.000000000 Z
11
+ date: 2019-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,62 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: codacy-coverage
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
97
153
  - !ruby/object:Gem::Dependency
98
154
  name: curb
99
155
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +185,7 @@ executables: []
129
185
  extensions: []
130
186
  extra_rdoc_files: []
131
187
  files:
188
+ - ".github/workflows/ruby.yml"
132
189
  - ".gitignore"
133
190
  - ".rspec"
134
191
  - ".rubocop.yml"
@@ -142,6 +199,7 @@ files:
142
199
  - bin/setup
143
200
  - lib/geo.rb
144
201
  - lib/speedtest_net.rb
202
+ - lib/speedtest_net/calculate_speed.rb
145
203
  - lib/speedtest_net/config.rb
146
204
  - lib/speedtest_net/download.rb
147
205
  - lib/speedtest_net/error.rb