speedtest_net 0.9.0 → 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: e5aeb295f704c706b11dd75b988b6e6bfca9654594f4bcb40c8e50578edd0f3d
4
- data.tar.gz: 15393d3a2c2ae9280d2d21dc256f21dac8b6c852840ff73deae55a5f7cdc461e
3
+ metadata.gz: ae7607d307332c3a3c76f0e8670abd4d11f1d1c1873f22477dec654af45fc015
4
+ data.tar.gz: e7b783804a6b084296d18895f171634069089c2e1e0c321ef2d2f753c2470c7b
5
5
  SHA512:
6
- metadata.gz: c6b7e29afdd57fc54ac599dee9063a38c96636658fced1f5c3d001fc096cb37136a272cbb1af3dc833f3581459645553c0c97dfaf3ff66d11d59d8810470452b
7
- data.tar.gz: 2176eea906ec1d49ba51d20bc67c7a3fd0ba4f8a0991bf5910cf1c4f1cf102b7fcf3101555730e49469926678dd4b0283fa962d1d3daa8687545985cc5af1df8
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.0'
4
+ VERSION = '0.9.2'
5
5
  end
@@ -1,36 +1,37 @@
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@ryonkn.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
20
19
  spec.metadata['changelog_uri'] = spec.homepage
21
20
 
21
+ spec.metadata['rubygems_mfa_required'] = 'true'
22
+
22
23
  # Specify which files should be added to the gem when it is released.
23
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
25
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
- `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
26
29
  end
27
- spec.bindir = 'exe'
28
- 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) }
29
32
  spec.require_paths = ['lib']
30
33
 
31
- spec.required_ruby_version = '>= 2.6.0'
32
-
33
- spec.add_dependency 'curb', '~> 0.9'
34
+ spec.add_dependency 'curb', '>= 0.9', '< 2.0'
34
35
  spec.add_dependency 'rexml', '~> 3.2'
35
36
  spec.add_dependency 'typhoeus', '~> 1.3'
36
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.0
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-10-12 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
@@ -54,17 +60,13 @@ dependencies:
54
60
  version: '1.3'
55
61
  description: Library for testing internet bandwidth using speedtest.net
56
62
  email:
57
- - ryo@ryonkn.com
63
+ - ryo.z.nakano@gmail.com
58
64
  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
@@ -98,6 +100,7 @@ metadata:
98
100
  homepage_uri: https://github.com/ryonkn/speedtest_net
99
101
  source_code_uri: https://github.com/ryonkn/speedtest_net
100
102
  changelog_uri: https://github.com/ryonkn/speedtest_net
103
+ rubygems_mfa_required: 'true'
101
104
  post_install_message:
102
105
  rdoc_options: []
103
106
  require_paths:
@@ -106,14 +109,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
109
  requirements:
107
110
  - - ">="
108
111
  - !ruby/object:Gem::Version
109
- version: 2.6.0
112
+ version: 3.0.0
110
113
  required_rubygems_version: !ruby/object:Gem::Requirement
111
114
  requirements:
112
115
  - - ">="
113
116
  - !ruby/object:Gem::Version
114
117
  version: '0'
115
118
  requirements: []
116
- rubygems_version: 3.2.22
119
+ rubygems_version: 3.4.10
117
120
  signing_key:
118
121
  specification_version: 4
119
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