speedtest_net 0.7.0 → 0.8.0

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: 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