speedtest_net 0.3.0 → 0.3.1

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: 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