speedtest_net 0.9.1 → 0.9.3

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: 51cc1e86cecab279d17dcff636fefcfd636d62238683981bcba817f92425735c
4
+ data.tar.gz: 37de835de5541088678f101026bc9272b8ccfe95283d955f6ae6f48ec5e5d6dc
5
5
  SHA512:
6
- metadata.gz: c63cc0218a5a999e2dc4139a590d7be2f40f191240a0540e73c092d8ec35845b69627187a8b01202e65228743697f3cd2429fb68e3748f42b6aff716cea96288
7
- data.tar.gz: 221fc7a4f6dca42c7aac968744f92b5acd434bee8dc09649539f05f01ba363e026af8181dc8248a904ae9ce64e5ca50830141a999a643edf81945a1605825563
6
+ metadata.gz: 02a5eda90b95c2a2537a3b8270dafd3814fd187233389b66afb040a284856bf978dc25a1049cdcf2a0ef25988a09a773b1876b81c2aed3b01201e2a82c039d2c
7
+ data.tar.gz: 0cf8d0e602701b79c0c7eff33cba299f41e5605beb1f139f40de917d424208dfca1b8a5998f58ce0a7b846cfd1eb20ad2cdfa0db4d255a294f0dd3971cf30930
data/.rubocop.yml CHANGED
@@ -1,10 +1,11 @@
1
- require:
1
+ plugins:
2
+ - rubocop-factory_bot
2
3
  - rubocop-performance
3
4
  - rubocop-rake
4
5
  - rubocop-rspec
5
6
 
6
7
  AllCops:
7
- TargetRubyVersion: 2.6
8
+ TargetRubyVersion: 3.2
8
9
  NewCops: enable
9
10
 
10
11
  Style/Documentation:
data/Gemfile CHANGED
@@ -5,14 +5,16 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in speedtest_net.gemspec
6
6
  gemspec
7
7
 
8
- gem 'codacy-coverage', '>= 2.1'
9
8
  gem 'factory_bot', '>= 6.0'
9
+ gem 'irb', '>= 1.6.0'
10
10
  gem 'rake', '>= 13.0'
11
11
  gem 'rspec', '>= 3.0'
12
12
  gem 'rubocop', '>= 1.0.0'
13
+ gem 'rubocop-factory_bot', '>= 2.23'
13
14
  gem 'rubocop-performance', '>= 1.11.4'
14
15
  gem 'rubocop-rake', '>= 0.6.0'
15
16
  gem 'rubocop-rspec', '>= 1.44.1'
16
17
  gem 'simplecov', '>= 0.17'
18
+ gem 'simplecov-cobertura', '>= 3.1.0'
17
19
  gem 'vcr', '>= 6.0'
18
20
  gem 'webmock', '>= 3.7'
@@ -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.3'
5
5
  end
metadata CHANGED
@@ -1,29 +1,34 @@
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.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakano
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2021-11-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: curb
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
18
  version: '0.9'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ">="
25
27
  - !ruby/object:Gem::Version
26
28
  version: '0.9'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '2.0'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: rexml
29
34
  requirement: !ruby/object:Gem::Requirement
@@ -59,12 +64,8 @@ executables: []
59
64
  extensions: []
60
65
  extra_rdoc_files: []
61
66
  files:
62
- - ".github/dependabot.yml"
63
- - ".github/workflows/ruby.yml"
64
- - ".gitignore"
65
67
  - ".rspec"
66
68
  - ".rubocop.yml"
67
- - ".travis.yml"
68
69
  - CODE_OF_CONDUCT.md
69
70
  - Gemfile
70
71
  - LICENSE.txt
@@ -73,7 +74,6 @@ files:
73
74
  - bin/console
74
75
  - bin/setup
75
76
  - lib/speedtest_net.rb
76
- - lib/speedtest_net/calculate_speed.rb
77
77
  - lib/speedtest_net/client.rb
78
78
  - lib/speedtest_net/config.rb
79
79
  - lib/speedtest_net/download.rb
@@ -84,13 +84,13 @@ files:
84
84
  - lib/speedtest_net/geo.rb
85
85
  - lib/speedtest_net/http_timeout.rb
86
86
  - lib/speedtest_net/latency.rb
87
+ - lib/speedtest_net/measure_result.rb
87
88
  - lib/speedtest_net/result.rb
88
89
  - lib/speedtest_net/server.rb
89
90
  - lib/speedtest_net/upload.rb
90
91
  - lib/speedtest_net/user_agent.rb
91
92
  - lib/speedtest_net/version.rb
92
93
  - renovate.json
93
- - speedtest_net.gemspec
94
94
  homepage: https://github.com/ryonkn/speedtest_net
95
95
  licenses:
96
96
  - MIT
@@ -99,7 +99,6 @@ metadata:
99
99
  source_code_uri: https://github.com/ryonkn/speedtest_net
100
100
  changelog_uri: https://github.com/ryonkn/speedtest_net
101
101
  rubygems_mfa_required: 'true'
102
- post_install_message:
103
102
  rdoc_options: []
104
103
  require_paths:
105
104
  - lib
@@ -107,15 +106,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
106
  requirements:
108
107
  - - ">="
109
108
  - !ruby/object:Gem::Version
110
- version: 2.6.0
109
+ version: 3.2.0
111
110
  required_rubygems_version: !ruby/object:Gem::Requirement
112
111
  requirements:
113
112
  - - ">="
114
113
  - !ruby/object:Gem::Version
115
114
  version: '0'
116
115
  requirements: []
117
- rubygems_version: 3.2.22
118
- signing_key:
116
+ rubygems_version: 4.0.3
119
117
  specification_version: 4
120
118
  summary: Library for testing internet bandwidth using speedtest.net
121
119
  test_files: []
@@ -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
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'speedtest_net/version'
6
-
7
- 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']
12
-
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'
17
-
18
- spec.metadata['homepage_uri'] = spec.homepage
19
- spec.metadata['source_code_uri'] = spec.homepage
20
- spec.metadata['changelog_uri'] = spec.homepage
21
-
22
- spec.metadata['rubygems_mfa_required'] = 'true'
23
-
24
- # Specify which files should be added to the gem when it is released.
25
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
- end
29
- spec.bindir = 'exe'
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ['lib']
32
-
33
- spec.required_ruby_version = '>= 2.6.0'
34
-
35
- spec.add_dependency 'curb', '~> 0.9'
36
- spec.add_dependency 'rexml', '~> 3.2'
37
- spec.add_dependency 'typhoeus', '~> 1.3'
38
- end