speedtest_net 0.7.0 → 0.8.0

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: ed21ac6a96ef110554941966993ee911a4062090216400207534c59afcc5b383
4
- data.tar.gz: 466c522ae2b60cd187a5d7b98b023db50bfa8f9834e55a01979879de154a3e34
3
+ metadata.gz: 35f79907495fb46041e545a27bf81429cbeb7d4ac8281cc5b3e0dc58cd329b66
4
+ data.tar.gz: 0750ba31b2672dc5c9b3b3707dbf80d7a4bdcc3095971f54aa9ea45477f7e39e
5
5
  SHA512:
6
- metadata.gz: 838e4b7eb05e59234e650c6d807c985a236467bf89af5a440df795febe66e6c211026b54f5ecd6019e41bed08e6b50e61ea9de1fc5f4b2ad6f4ade54ec6f55e9
7
- data.tar.gz: 51d43777a2d506eb2092e1b77fd1de923881e4ba0fabe727a09b7da8dea1a0112bdd78ea3af2cd89f4072de352a0667b6ff4799e19110923ce34afd05c4270dd
6
+ metadata.gz: f8801cfc3a1dd4ce6ad90c8d76ed3ffe0196d9d74996f05e624f6c948f71a65c496d73140ca230c2cd84e64ecb191ab6d4d2818fd68f8520ef7133bb1d5d55ea
7
+ data.tar.gz: 6e15ea46406b725c5b290312a81230a8caed487118c87fe46a0ff03cd86eb7ad6fca04500d5ac9029af3bd66455c141cdb23feb6ab47bb8fbbc20b770fd93dd9
data/Gemfile CHANGED
@@ -4,3 +4,13 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in speedtest_net.gemspec
6
6
  gemspec
7
+
8
+ gem 'codacy-coverage', '>= 2.1'
9
+ gem 'factory_bot', '>= 6.0'
10
+ gem 'rake', '>= 13.0'
11
+ gem 'rspec', '>= 3.0'
12
+ gem 'rubocop', '>= 0.76'
13
+ gem 'rubocop-rspec', '>= 1.36'
14
+ gem 'simplecov', '>= 0.17'
15
+ gem 'vcr', '>= 6.0'
16
+ gem 'webmock', '>= 3.7'
data/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/speedtest_net.svg)](https://badge.fury.io/rb/speedtest_net)
4
4
  [![Actions Status](https://github.com/ryonkn/speedtest_net/workflows/GitHub%20Actions/badge.svg)](https://github.com/ryonkn/speedtest_net/actions)
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)
6
- [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/18f112dae19a48938bdf2b225d3a76bb)](https://www.codacy.com/manual/ryonkn/speedtest_net?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Coverage)
5
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/fa55809b2789403489d9d5063249c238)](https://www.codacy.com/manual/ryonkn/speedtest_net/dashboard?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Grade)
6
+ [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/fa55809b2789403489d9d5063249c238)](https://www.codacy.com/manual/ryonkn/speedtest_net/dashboard?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Coverage)
7
7
 
8
8
  A Ruby library for testing internet bandwidth using speedtest.net
9
9
 
@@ -6,13 +6,14 @@ require 'speedtest_net/server'
6
6
  require 'speedtest_net/download'
7
7
  require 'speedtest_net/upload'
8
8
  require 'speedtest_net/result'
9
+ require 'speedtest_net/http_timeout'
9
10
 
10
11
  module SpeedtestNet
11
- def self.run(id = nil, exclude_server_ids: [])
12
+ def self.run(id = nil, exclude_server_ids: [], timeout: HTTP_TIMEOUT)
12
13
  config = Config.fetch
13
14
  server = Server.select_server(id, exclude_server_ids)
14
- download_results = Download.measure(server)
15
- upload_results = Upload.measure(server)
15
+ download_results = Download.measure(server, timeout: timeout)
16
+ upload_results = Upload.measure(server, timeout: timeout)
16
17
 
17
18
  Config.clear_cache
18
19
  Result.new(config.client, server, download_results, upload_results)
@@ -3,6 +3,8 @@
3
3
  require 'curb'
4
4
  require 'securerandom'
5
5
  require 'pathname'
6
+ require 'speedtest_net/calculate_speed'
7
+ require 'speedtest_net/http_timeout'
6
8
 
7
9
  module SpeedtestNet
8
10
  class Download
@@ -10,16 +12,30 @@ module SpeedtestNet
10
12
  random1500x1500.jpg random2000x2000.jpg random3000x3000.jpg
11
13
  random3500x3500.jpg random4000x4000.jpg].freeze
12
14
 
15
+ def initialize(results)
16
+ @results = results
17
+ end
18
+
19
+ def calculate
20
+ CalculateSpeed.call(@results)
21
+ end
22
+
13
23
  class << self
14
- def measure(server)
24
+ def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
15
25
  config = Config.fetch
16
26
  concurrent_number = config.download[:threadsperurl]
17
27
 
18
- results = FILES.map do |file|
19
- urls = create_urls(server, file, concurrent_number)
20
- multi_downloader(urls)
28
+ results = []
29
+ begin
30
+ Timeout.timeout(timeout) do
31
+ FILES.each do |file|
32
+ urls = create_urls(server, file, concurrent_number)
33
+ results << multi_downloader(urls)
34
+ end
35
+ end
36
+ rescue Timeout::Error # rubocop:disable Lint/SuppressedException
21
37
  end
22
- results
38
+ new(results)
23
39
  end
24
40
 
25
41
  private
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ module Formatter
5
+ class Distance
6
+ class << self
7
+ def call(distance)
8
+ format('%<distance>.3f kilometre', distance: (distance / 1_000).round(3))
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ module Formatter
5
+ class Latency
6
+ class << self
7
+ def call(latency)
8
+ format('%<latency>f millisecond', latency: latency * 1_000)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ module Formatter
5
+ class Speed
6
+ UNITS = %w[bps Kbps Mbps Gbps Tbps].freeze
7
+
8
+ class << self
9
+ def call(speed)
10
+ i = 0
11
+ while speed >= 1000
12
+ speed /= 1000
13
+ i += 1
14
+ end
15
+ format('%<speed>.2f %<unit>s', speed: speed, unit: UNITS[i])
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ HTTP_TIMEOUT = 180
5
+ end
@@ -1,34 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'speedtest_net/calculate_speed'
3
+ require 'speedtest_net/formatter/distance'
4
+ require 'speedtest_net/formatter/latency'
5
+ require 'speedtest_net/formatter/speed'
4
6
 
5
7
  module SpeedtestNet
6
8
  class Result
7
- UNITS = %w[bps Kbps Mbps Gbps Tbps].freeze
9
+ attr_reader :client, :server
8
10
 
9
- attr_reader :client, :server, :download_results, :upload_results
10
-
11
- def initialize(client, server, download_results, upload_results)
11
+ def initialize(client, server, download, upload)
12
12
  @client = client
13
13
  @server = server
14
- @download_results = download_results
15
- @upload_results = upload_results
14
+ @download = download
15
+ @upload = upload
16
16
  end
17
17
 
18
18
  def download
19
- CalculateSpeed.call(@download_results)
19
+ @download.calculate
20
20
  end
21
21
 
22
22
  def pretty_download
23
- pretty_format(download)
23
+ Formatter::Speed.call(download)
24
24
  end
25
25
 
26
26
  def upload
27
- CalculateSpeed.call(@upload_results)
27
+ @upload.calculate
28
28
  end
29
29
 
30
30
  def pretty_upload
31
- pretty_format(upload)
31
+ Formatter::Speed.call(upload)
32
32
  end
33
33
 
34
34
  def latency
@@ -36,7 +36,7 @@ module SpeedtestNet
36
36
  end
37
37
 
38
38
  def pretty_latency
39
- format('%<latency>f millisecond', latency: latency * 1_000)
39
+ Formatter::Latency.call(latency)
40
40
  end
41
41
 
42
42
  def distance
@@ -44,18 +44,7 @@ module SpeedtestNet
44
44
  end
45
45
 
46
46
  def pretty_distance
47
- format('%<distance>.3f kilometre', distance: (distance / 1_000).round(3))
48
- end
49
-
50
- private
51
-
52
- def pretty_format(speed)
53
- i = 0
54
- while speed > 1000
55
- speed /= 1000
56
- i += 1
57
- end
58
- format('%<speed>.2f %<unit>s', speed: speed, unit: UNITS[i])
47
+ Formatter::Distance.call(distance)
59
48
  end
60
49
  end
61
50
  end
@@ -2,22 +2,38 @@
2
2
 
3
3
  require 'curb'
4
4
  require 'securerandom'
5
+ require 'speedtest_net/calculate_speed'
6
+ require 'speedtest_net/http_timeout'
5
7
 
6
8
  module SpeedtestNet
7
9
  class Upload
8
10
  SIZE = [250_000, 500_000, 1_000_000, 2_000_000, 4_000_000, 8_000_000,
9
11
  12_000_000, 17_000_000, 24_000_000, 32_000_000].freeze
10
12
 
13
+ def initialize(results)
14
+ @results = results
15
+ end
16
+
17
+ def calculate
18
+ CalculateSpeed.call(@results)
19
+ end
20
+
11
21
  class << self
12
- def measure(server)
22
+ def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
13
23
  config = Config.fetch
14
24
  concurrent_number = config.upload[:threadsperurl]
15
25
 
16
- results = SIZE.map do |size|
17
- urls = create_urls(server, concurrent_number)
18
- multi_uploader(urls, size)
26
+ results = []
27
+ begin
28
+ Timeout.timeout(timeout) do
29
+ SIZE.each do |size|
30
+ urls = create_urls(server, concurrent_number)
31
+ results << multi_uploader(urls, size)
32
+ end
33
+ end
34
+ rescue Timeout::Error # rubocop:disable Lint/SuppressedException
19
35
  end
20
- results
36
+ new(results)
21
37
  end
22
38
 
23
39
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
@@ -30,17 +30,6 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.required_ruby_version = '>= 2.5.0'
32
32
 
33
- spec.add_development_dependency 'bundler', '~> 2.0'
34
- spec.add_development_dependency 'codacy-coverage', '~> 2.1'
35
- spec.add_development_dependency 'factory_bot', '~> 6.0'
36
- spec.add_development_dependency 'rake', '~> 13.0'
37
- spec.add_development_dependency 'rspec', '~> 3.0'
38
- spec.add_development_dependency 'rubocop', '~> 0.76'
39
- spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
40
- spec.add_development_dependency 'simplecov', '~> 0.17'
41
- spec.add_development_dependency 'vcr', '~> 6.0'
42
- spec.add_development_dependency 'webmock', '~> 3.7'
43
-
44
33
  spec.add_dependency 'curb', '~> 0.9'
45
34
  spec.add_dependency 'rexml', '~> 3.2'
46
35
  spec.add_dependency 'typhoeus', '~> 1.3'
metadata CHANGED
@@ -1,155 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speedtest_net
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakano
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-04 00:00:00.000000000 Z
11
+ date: 2020-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: codacy-coverage
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.1'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.1'
41
- - !ruby/object:Gem::Dependency
42
- name: factory_bot
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '6.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '6.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '13.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '13.0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.76'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.76'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.36'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.36'
111
- - !ruby/object:Gem::Dependency
112
- name: simplecov
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '0.17'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '0.17'
125
- - !ruby/object:Gem::Dependency
126
- name: vcr
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '6.0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '6.0'
139
- - !ruby/object:Gem::Dependency
140
- name: webmock
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '3.7'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '3.7'
153
13
  - !ruby/object:Gem::Dependency
154
14
  name: curb
155
15
  requirement: !ruby/object:Gem::Requirement
@@ -218,6 +78,10 @@ files:
218
78
  - lib/speedtest_net/config.rb
219
79
  - lib/speedtest_net/download.rb
220
80
  - lib/speedtest_net/error.rb
81
+ - lib/speedtest_net/formatter/distance.rb
82
+ - lib/speedtest_net/formatter/latency.rb
83
+ - lib/speedtest_net/formatter/speed.rb
84
+ - lib/speedtest_net/http_timeout.rb
221
85
  - lib/speedtest_net/latency.rb
222
86
  - lib/speedtest_net/result.rb
223
87
  - lib/speedtest_net/server.rb