speedtest_net 0.9.1 → 0.9.2

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: 7b33950e2013b5e7608eae2b1d3ded42bea175d66e7c5298e952926fb96cc40f
4
- data.tar.gz: bc40d98a9adff5e426d4feca1ccc18bfb19d8977a2e2cb40b7f2dd52e283f6b1
3
+ metadata.gz: ae7607d307332c3a3c76f0e8670abd4d11f1d1c1873f22477dec654af45fc015
4
+ data.tar.gz: e7b783804a6b084296d18895f171634069089c2e1e0c321ef2d2f753c2470c7b
5
5
  SHA512:
6
- metadata.gz: c63cc0218a5a999e2dc4139a590d7be2f40f191240a0540e73c092d8ec35845b69627187a8b01202e65228743697f3cd2429fb68e3748f42b6aff716cea96288
7
- data.tar.gz: 221fc7a4f6dca42c7aac968744f92b5acd434bee8dc09649539f05f01ba363e026af8181dc8248a904ae9ce64e5ca50830141a999a643edf81945a1605825563
6
+ metadata.gz: 8f015a05bb41bd9c8564af2440fc67206cc5fda3bf1c82fbb97014268c2a6184532496bec7ea0b39de47c6db94d90c7e31f1446301c00732b71f58bd4a99cebf
7
+ data.tar.gz: 889349ae54eca6504548703454624a3ef57d499dfcaaf206b19e8a8869dd0ce6c873d4423ed4bf0ef60b10aa525ccb59e9ae991a75e72010241a7c3c933d3a28
data/.rubocop.yml CHANGED
@@ -4,7 +4,7 @@ require:
4
4
  - rubocop-rspec
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 2.6
7
+ TargetRubyVersion: 3.0
8
8
  NewCops: enable
9
9
 
10
10
  Style/Documentation:
@@ -4,8 +4,8 @@ require 'curb'
4
4
  require 'securerandom'
5
5
  require 'timeout'
6
6
  require 'pathname'
7
- require 'speedtest_net/calculate_speed'
8
7
  require 'speedtest_net/http_timeout'
8
+ require 'speedtest_net/measure_result'
9
9
 
10
10
  module SpeedtestNet
11
11
  class Download
@@ -13,14 +13,6 @@ module SpeedtestNet
13
13
  random1500x1500.jpg random2000x2000.jpg random3000x3000.jpg
14
14
  random3500x3500.jpg random4000x4000.jpg].freeze
15
15
 
16
- def initialize(results)
17
- @results = results
18
- end
19
-
20
- def calculate
21
- CalculateSpeed.call(@results)
22
- end
23
-
24
16
  class << self
25
17
  def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
26
18
  config = Config.fetch
@@ -36,7 +28,7 @@ module SpeedtestNet
36
28
  end
37
29
  rescue Timeout::Error # rubocop:disable Lint/SuppressedException
38
30
  end
39
- new(results)
31
+ MeasureResult.new(results)
40
32
  end
41
33
 
42
34
  private
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ class MeasureResult
5
+ def initialize(results = [])
6
+ @results = results.select { |result| result.instance_of?(Integer) || result.instance_of?(Float) }
7
+ end
8
+
9
+ def calculate
10
+ return 0.0 if @results.empty?
11
+
12
+ # Fastest 10% and slowest 30% of results are then discarded
13
+ # See: https://support.ookla.com/hc/en-us/articles/234575828-What-is-the-test-flow-and-methodology-for-the-Speedtest-
14
+ sorted_results = @results.sort
15
+ count = sorted_results.size
16
+
17
+ faster = count - (count * 0.1).round # fastest 10%
18
+ slower = (count * 0.3).round # slowest 30%
19
+ target_results = sorted_results[slower...faster]
20
+
21
+ # The remaining result are averaged together to determine
22
+ # the final result
23
+ target_results.sum.to_f / target_results.count
24
+ end
25
+ end
26
+ end
@@ -8,15 +8,15 @@ module SpeedtestNet
8
8
  class Result
9
9
  attr_reader :client, :server
10
10
 
11
- def initialize(client, server, download, upload)
11
+ def initialize(client, server, download_result, upload_result)
12
12
  @client = client
13
13
  @server = server
14
- @download = download
15
- @upload = upload
14
+ @download_result = download_result
15
+ @upload_result = upload_result
16
16
  end
17
17
 
18
18
  def download
19
- @download.calculate
19
+ @download_result.calculate
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
- @upload.calculate
27
+ @upload_result.calculate
28
28
  end
29
29
 
30
30
  def pretty_upload
@@ -3,22 +3,14 @@
3
3
  require 'curb'
4
4
  require 'securerandom'
5
5
  require 'timeout'
6
- require 'speedtest_net/calculate_speed'
7
6
  require 'speedtest_net/http_timeout'
7
+ require 'speedtest_net/measure_result'
8
8
 
9
9
  module SpeedtestNet
10
10
  class Upload
11
11
  SIZE = [250_000, 500_000, 1_000_000, 2_000_000, 4_000_000, 8_000_000,
12
12
  12_000_000, 17_000_000, 24_000_000, 32_000_000].freeze
13
13
 
14
- def initialize(results)
15
- @results = results
16
- end
17
-
18
- def calculate
19
- CalculateSpeed.call(@results)
20
- end
21
-
22
14
  class << self
23
15
  def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
24
16
  config = Config.fetch
@@ -34,7 +26,7 @@ module SpeedtestNet
34
26
  end
35
27
  rescue Timeout::Error # rubocop:disable Lint/SuppressedException
36
28
  end
37
- new(results)
29
+ MeasureResult.new(results)
38
30
  end
39
31
 
40
32
  private
@@ -48,12 +40,12 @@ module SpeedtestNet
48
40
 
49
41
  def multi_uploader(urls, size) # rubocop:disable Metrics/MethodLength
50
42
  responses = []
51
- content = 'A' * size
43
+ post_field = "content1=#{'A' * size}"
52
44
  multi = Curl::Multi.new
53
45
  urls.each do |url|
54
46
  client = Curl::Easy.new(url)
55
47
  client.headers['User-Agent'] = USER_AGENT
56
- client.http_post(Curl::PostField.content('content1', content))
48
+ client.http_post(post_field)
57
49
  client.on_complete { |data| responses << data }
58
50
  multi.add(client)
59
51
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- USER_AGENT = "SpeedtestNet/#{VERSION}"
4
+ USER_AGENT = "SpeedtestNet/#{VERSION}".freeze
5
5
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.9.1'
4
+ VERSION = '0.9.2'
5
5
  end
@@ -1,19 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'speedtest_net/version'
3
+ require_relative 'lib/speedtest_net/version'
6
4
 
7
5
  Gem::Specification.new do |spec|
8
- spec.name = 'speedtest_net'
9
- spec.version = SpeedtestNet::VERSION
10
- spec.authors = ['Ryo Nakano']
11
- spec.email = ['ryo.z.nakano@gmail.com']
6
+ spec.name = 'speedtest_net'
7
+ spec.version = SpeedtestNet::VERSION
8
+ spec.authors = ['Ryo Nakano']
9
+ spec.email = ['ryo.z.nakano@gmail.com']
12
10
 
13
- spec.summary = 'Library for testing internet bandwidth using speedtest.net'
14
- spec.description = 'Library for testing internet bandwidth using speedtest.net'
15
- spec.homepage = 'https://github.com/ryonkn/speedtest_net'
16
- spec.license = 'MIT'
11
+ spec.summary = 'Library for testing internet bandwidth using speedtest.net'
12
+ spec.description = 'Library for testing internet bandwidth using speedtest.net'
13
+ spec.homepage = 'https://github.com/ryonkn/speedtest_net'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 3.0.0'
17
16
 
18
17
  spec.metadata['homepage_uri'] = spec.homepage
19
18
  spec.metadata['source_code_uri'] = spec.homepage
@@ -24,15 +23,15 @@ Gem::Specification.new do |spec|
24
23
  # Specify which files should be added to the gem when it is released.
25
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
25
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
+ end
28
29
  end
29
- spec.bindir = 'exe'
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.bindir = 'exe'
31
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
32
  spec.require_paths = ['lib']
32
33
 
33
- spec.required_ruby_version = '>= 2.6.0'
34
-
35
- spec.add_dependency 'curb', '~> 0.9'
34
+ spec.add_dependency 'curb', '>= 0.9', '< 2.0'
36
35
  spec.add_dependency 'rexml', '~> 3.2'
37
36
  spec.add_dependency 'typhoeus', '~> 1.3'
38
37
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speedtest_net
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakano
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-20 00:00:00.000000000 Z
11
+ date: 2023-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.9'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.9'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rexml
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -59,12 +65,8 @@ executables: []
59
65
  extensions: []
60
66
  extra_rdoc_files: []
61
67
  files:
62
- - ".github/dependabot.yml"
63
- - ".github/workflows/ruby.yml"
64
- - ".gitignore"
65
68
  - ".rspec"
66
69
  - ".rubocop.yml"
67
- - ".travis.yml"
68
70
  - CODE_OF_CONDUCT.md
69
71
  - Gemfile
70
72
  - LICENSE.txt
@@ -73,7 +75,6 @@ files:
73
75
  - bin/console
74
76
  - bin/setup
75
77
  - lib/speedtest_net.rb
76
- - lib/speedtest_net/calculate_speed.rb
77
78
  - lib/speedtest_net/client.rb
78
79
  - lib/speedtest_net/config.rb
79
80
  - lib/speedtest_net/download.rb
@@ -84,6 +85,7 @@ files:
84
85
  - lib/speedtest_net/geo.rb
85
86
  - lib/speedtest_net/http_timeout.rb
86
87
  - lib/speedtest_net/latency.rb
88
+ - lib/speedtest_net/measure_result.rb
87
89
  - lib/speedtest_net/result.rb
88
90
  - lib/speedtest_net/server.rb
89
91
  - lib/speedtest_net/upload.rb
@@ -107,14 +109,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
109
  requirements:
108
110
  - - ">="
109
111
  - !ruby/object:Gem::Version
110
- version: 2.6.0
112
+ version: 3.0.0
111
113
  required_rubygems_version: !ruby/object:Gem::Requirement
112
114
  requirements:
113
115
  - - ">="
114
116
  - !ruby/object:Gem::Version
115
117
  version: '0'
116
118
  requirements: []
117
- rubygems_version: 3.2.22
119
+ rubygems_version: 3.4.10
118
120
  signing_key:
119
121
  specification_version: 4
120
122
  summary: Library for testing internet bandwidth using speedtest.net
@@ -1,10 +0,0 @@
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
@@ -1,61 +0,0 @@
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
- schedule:
15
- - cron: '0 3 * * *'
16
-
17
- jobs:
18
- rubocop:
19
- runs-on: ubuntu-latest
20
- steps:
21
- - uses: actions/checkout@master
22
- - name: Setup Ruby
23
- uses: ruby/setup-ruby@master
24
- with:
25
- ruby-version: 3.0
26
- - name: Run apt-get
27
- run: |
28
- sudo apt-get update
29
- sudo apt-get install libcurl4-openssl-dev
30
- - name: Bundle install
31
- run: |
32
- gem install bundler
33
- bundle install --jobs 4 --retry 3
34
- - name: Run rubocop
35
- run: |
36
- rubocop
37
-
38
- rspec:
39
- runs-on: ubuntu-latest
40
- strategy:
41
- matrix:
42
- ruby: [ 2.6, 2.7, 3.0, 'head' ]
43
- steps:
44
- - uses: actions/checkout@master
45
- - name: Setup Ruby
46
- uses: ruby/setup-ruby@master
47
- with:
48
- ruby-version: ${{ matrix.ruby }}
49
- - name: Run apt-get
50
- run: |
51
- sudo apt-get update
52
- sudo apt-get install libcurl4-openssl-dev
53
- - name: Bundle install
54
- run: |
55
- gem install bundler
56
- bundle install --jobs 4 --retry 3
57
- - name: Run rspec
58
- run: bundle exec rspec
59
- env:
60
- CI: true
61
- CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- /Gemfile.lock
10
-
11
- # rspec failure tracking
12
- .rspec_status
13
- .envrc
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.4
7
- before_install: gem install bundler -v 2.0.2
@@ -1,31 +0,0 @@
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