speedtest_net 0.9.1 → 0.9.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: 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