speedtest_net 0.7.0 → 0.9.1

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: 7b33950e2013b5e7608eae2b1d3ded42bea175d66e7c5298e952926fb96cc40f
4
+ data.tar.gz: bc40d98a9adff5e426d4feca1ccc18bfb19d8977a2e2cb40b7f2dd52e283f6b1
5
5
  SHA512:
6
- metadata.gz: 838e4b7eb05e59234e650c6d807c985a236467bf89af5a440df795febe66e6c211026b54f5ecd6019e41bed08e6b50e61ea9de1fc5f4b2ad6f4ade54ec6f55e9
7
- data.tar.gz: 51d43777a2d506eb2092e1b77fd1de923881e4ba0fabe727a09b7da8dea1a0112bdd78ea3af2cd89f4072de352a0667b6ff4799e19110923ce34afd05c4270dd
6
+ metadata.gz: c63cc0218a5a999e2dc4139a590d7be2f40f191240a0540e73c092d8ec35845b69627187a8b01202e65228743697f3cd2429fb68e3748f42b6aff716cea96288
7
+ data.tar.gz: 221fc7a4f6dca42c7aac968744f92b5acd434bee8dc09649539f05f01ba363e026af8181dc8248a904ae9ce64e5ca50830141a999a643edf81945a1605825563
@@ -19,20 +19,27 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  steps:
21
21
  - uses: actions/checkout@master
22
- - name: Setup Ruby 2.7
22
+ - name: Setup Ruby
23
23
  uses: ruby/setup-ruby@master
24
24
  with:
25
- ruby-version: 2.7
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
26
34
  - name: Run rubocop
27
35
  run: |
28
- gem install rubocop rubocop-rspec
29
36
  rubocop
30
37
 
31
38
  rspec:
32
39
  runs-on: ubuntu-latest
33
40
  strategy:
34
41
  matrix:
35
- ruby: [ 2.5, 2.6, 2.7, 'ruby-head' ]
42
+ ruby: [ 2.6, 2.7, 3.0, 'head' ]
36
43
  steps:
37
44
  - uses: actions/checkout@master
38
45
  - name: Setup Ruby
data/.rubocop.yml CHANGED
@@ -1,12 +1,11 @@
1
- require: rubocop-rspec
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rake
4
+ - rubocop-rspec
2
5
 
3
6
  AllCops:
4
- TargetRubyVersion: 2.5
5
- Exclude:
6
- - 'speedtest_net.gemspec'
7
-
8
- Layout/ClassStructure:
9
- Enabled: true
7
+ TargetRubyVersion: 2.6
8
+ NewCops: enable
10
9
 
11
10
  Style/Documentation:
12
11
  Enabled: false
data/Gemfile CHANGED
@@ -4,3 +4,15 @@ 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', '>= 1.0.0'
13
+ gem 'rubocop-performance', '>= 1.11.4'
14
+ gem 'rubocop-rake', '>= 0.6.0'
15
+ gem 'rubocop-rspec', '>= 1.44.1'
16
+ gem 'simplecov', '>= 0.17'
17
+ gem 'vcr', '>= 6.0'
18
+ 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/Grade/fa55809b2789403489d9d5063249c238)](https://www.codacy.com/gh/ryonkn/speedtest_net/dashboard?utm_source=github.com&utm_medium=referral&utm_content=ryonkn/speedtest_net&utm_campaign=Badge_Grade)
7
7
 
8
8
  A Ruby library for testing internet bandwidth using speedtest.net
9
9
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ class Client
5
+ attr_reader :ip, :isp, :geo
6
+
7
+ def initialize(ip, isp, geo)
8
+ @ip = ip
9
+ @isp = isp
10
+ @geo = geo
11
+ end
12
+ end
13
+ end
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rexml/document'
4
+ require 'speedtest_net/client'
4
5
  require 'speedtest_net/error'
5
- require 'geo'
6
+ require 'speedtest_net/geo'
6
7
 
7
8
  module SpeedtestNet
8
9
  class Config
@@ -55,11 +56,7 @@ module SpeedtestNet
55
56
  end
56
57
 
57
58
  def client_config(elements)
58
- {
59
- ip: elements['ip'],
60
- isp: elements['isp'],
61
- geo: Geo.new(elements['lat'].to_f, elements['lon'].to_f)
62
- }
59
+ Client.new(elements['ip'], elements['isp'], Geo.new(elements['lat'].to_f, elements['lon'].to_f))
63
60
  end
64
61
 
65
62
  def server_config(elements)
@@ -2,7 +2,10 @@
2
2
 
3
3
  require 'curb'
4
4
  require 'securerandom'
5
+ require 'timeout'
5
6
  require 'pathname'
7
+ require 'speedtest_net/calculate_speed'
8
+ require 'speedtest_net/http_timeout'
6
9
 
7
10
  module SpeedtestNet
8
11
  class Download
@@ -10,23 +13,37 @@ module SpeedtestNet
10
13
  random1500x1500.jpg random2000x2000.jpg random3000x3000.jpg
11
14
  random3500x3500.jpg random4000x4000.jpg].freeze
12
15
 
16
+ def initialize(results)
17
+ @results = results
18
+ end
19
+
20
+ def calculate
21
+ CalculateSpeed.call(@results)
22
+ end
23
+
13
24
  class << self
14
- def measure(server)
25
+ def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
15
26
  config = Config.fetch
16
27
  concurrent_number = config.download[:threadsperurl]
17
28
 
18
- results = FILES.map do |file|
19
- urls = create_urls(server, file, concurrent_number)
20
- multi_downloader(urls)
29
+ results = []
30
+ begin
31
+ Timeout.timeout(timeout) do
32
+ FILES.each do |file|
33
+ urls = create_urls(server, file, concurrent_number)
34
+ results << multi_downloader(urls)
35
+ end
36
+ end
37
+ rescue Timeout::Error # rubocop:disable Lint/SuppressedException
21
38
  end
22
- results
39
+ new(results)
23
40
  end
24
41
 
25
42
  private
26
43
 
27
44
  def create_urls(server, file, number)
28
45
  base_url = Pathname(server.url).dirname.to_s
29
- number.times.map do
46
+ Array.new(number) do
30
47
  random = SecureRandom.urlsafe_base64
31
48
  "#{base_url}/#{file}?x=#{random}"
32
49
  end
@@ -42,7 +59,7 @@ module SpeedtestNet
42
59
  multi.add(client)
43
60
  end
44
61
  multi.perform
45
- responses.map(&:download_speed).sum * 8
62
+ responses.sum(&:download_speed) * 8
46
63
  end
47
64
  end
48
65
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module SpeedtestNet
4
4
  class Error < StandardError; end
5
+
5
6
  class HTTPDownloadError < Error; end
7
+
6
8
  class InvalidServerIdError < Error; end
7
9
  end
@@ -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,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ class Geo
5
+ RADIAN_PER_DEGREE = Math::PI / 180
6
+ EARTH_RADIUS = 6_371_000
7
+
8
+ def initialize(lat, long)
9
+ @lat = lat
10
+ @long = long
11
+ end
12
+
13
+ def distance(other) # rubocop:disable Metrics/AbcSize
14
+ a = (Math.sin(radian_lat) * Math.sin(other.radian_lat)) +
15
+ (Math.cos(radian_lat) * Math.cos(other.radian_lat) * Math.cos(radian_long - other.radian_long))
16
+
17
+ Math.acos(a) * EARTH_RADIUS
18
+ end
19
+
20
+ def radian_lat
21
+ @lat * RADIAN_PER_DEGREE
22
+ end
23
+
24
+ def radian_long
25
+ @long * RADIAN_PER_DEGREE
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpeedtestNet
4
+ HTTP_TIMEOUT = 180
5
+ end
@@ -15,7 +15,7 @@ module SpeedtestNet
15
15
  test_length = test_length(config)
16
16
  timeout = config.latency[:timeout]
17
17
 
18
- latencies = test_length.times.map do
18
+ latencies = Array.new(test_length) do
19
19
  latency_url = latency_url(server)
20
20
  measure_latency(latency_url, timeout)
21
21
  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
@@ -4,7 +4,7 @@ require 'rexml/document'
4
4
  require 'speedtest_net/config'
5
5
  require 'speedtest_net/latency'
6
6
  require 'speedtest_net/error'
7
- require 'geo'
7
+ require 'speedtest_net/geo'
8
8
 
9
9
  module SpeedtestNet
10
10
  class Server
@@ -69,7 +69,7 @@ module SpeedtestNet
69
69
  url = server['url2'] || server['url']
70
70
 
71
71
  geo = Geo.new(server['lat'].to_f, server['lon'].to_f)
72
- distance = geo.distance(config.client[:geo])
72
+ distance = geo.distance(config.client.geo)
73
73
 
74
74
  new(server['id'].to_i, url, geo, distance, server)
75
75
  end
@@ -2,28 +2,45 @@
2
2
 
3
3
  require 'curb'
4
4
  require 'securerandom'
5
+ require 'timeout'
6
+ require 'speedtest_net/calculate_speed'
7
+ require 'speedtest_net/http_timeout'
5
8
 
6
9
  module SpeedtestNet
7
10
  class Upload
8
11
  SIZE = [250_000, 500_000, 1_000_000, 2_000_000, 4_000_000, 8_000_000,
9
12
  12_000_000, 17_000_000, 24_000_000, 32_000_000].freeze
10
13
 
14
+ def initialize(results)
15
+ @results = results
16
+ end
17
+
18
+ def calculate
19
+ CalculateSpeed.call(@results)
20
+ end
21
+
11
22
  class << self
12
- def measure(server)
23
+ def measure(server, timeout: HTTP_TIMEOUT) # rubocop:disable Metrics/MethodLength
13
24
  config = Config.fetch
14
25
  concurrent_number = config.upload[:threadsperurl]
15
26
 
16
- results = SIZE.map do |size|
17
- urls = create_urls(server, concurrent_number)
18
- multi_uploader(urls, size)
27
+ results = []
28
+ begin
29
+ Timeout.timeout(timeout) do
30
+ SIZE.each do |size|
31
+ urls = create_urls(server, concurrent_number)
32
+ results << multi_uploader(urls, size)
33
+ end
34
+ end
35
+ rescue Timeout::Error # rubocop:disable Lint/SuppressedException
19
36
  end
20
- results
37
+ new(results)
21
38
  end
22
39
 
23
40
  private
24
41
 
25
42
  def create_urls(server, number)
26
- number.times.map do
43
+ Array.new(number) do
27
44
  random = SecureRandom.urlsafe_base64
28
45
  "#{server.url}?x=#{random}"
29
46
  end
@@ -41,7 +58,7 @@ module SpeedtestNet
41
58
  multi.add(client)
42
59
  end
43
60
  multi.perform
44
- responses.map(&:upload_speed).sum * 8
61
+ responses.sum(&:upload_speed) * 8
45
62
  end
46
63
  end
47
64
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.7.0'
4
+ VERSION = '0.9.1'
5
5
  end
data/lib/speedtest_net.rb CHANGED
@@ -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)
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.name = 'speedtest_net'
9
9
  spec.version = SpeedtestNet::VERSION
10
10
  spec.authors = ['Ryo Nakano']
11
- spec.email = ['ryo@ryonkn.com']
11
+ spec.email = ['ryo.z.nakano@gmail.com']
12
12
 
13
13
  spec.summary = 'Library for testing internet bandwidth using speedtest.net'
14
14
  spec.description = 'Library for testing internet bandwidth using speedtest.net'
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.metadata['source_code_uri'] = spec.homepage
20
20
  spec.metadata['changelog_uri'] = spec.homepage
21
21
 
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
23
+
22
24
  # Specify which files should be added to the gem when it is released.
23
25
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
26
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
@@ -28,18 +30,7 @@ Gem::Specification.new do |spec|
28
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
31
  spec.require_paths = ['lib']
30
32
 
31
- spec.required_ruby_version = '>= 2.5.0'
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'
33
+ spec.required_ruby_version = '>= 2.6.0'
43
34
 
44
35
  spec.add_dependency 'curb', '~> 0.9'
45
36
  spec.add_dependency 'rexml', '~> 3.2'
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.9.1
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: 2021-11-20 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
@@ -194,7 +54,7 @@ dependencies:
194
54
  version: '1.3'
195
55
  description: Library for testing internet bandwidth using speedtest.net
196
56
  email:
197
- - ryo@ryonkn.com
57
+ - ryo.z.nakano@gmail.com
198
58
  executables: []
199
59
  extensions: []
200
60
  extra_rdoc_files: []
@@ -212,12 +72,17 @@ files:
212
72
  - Rakefile
213
73
  - bin/console
214
74
  - bin/setup
215
- - lib/geo.rb
216
75
  - lib/speedtest_net.rb
217
76
  - lib/speedtest_net/calculate_speed.rb
77
+ - lib/speedtest_net/client.rb
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/geo.rb
85
+ - lib/speedtest_net/http_timeout.rb
221
86
  - lib/speedtest_net/latency.rb
222
87
  - lib/speedtest_net/result.rb
223
88
  - lib/speedtest_net/server.rb
@@ -233,6 +98,7 @@ metadata:
233
98
  homepage_uri: https://github.com/ryonkn/speedtest_net
234
99
  source_code_uri: https://github.com/ryonkn/speedtest_net
235
100
  changelog_uri: https://github.com/ryonkn/speedtest_net
101
+ rubygems_mfa_required: 'true'
236
102
  post_install_message:
237
103
  rdoc_options: []
238
104
  require_paths:
@@ -241,14 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
241
107
  requirements:
242
108
  - - ">="
243
109
  - !ruby/object:Gem::Version
244
- version: 2.5.0
110
+ version: 2.6.0
245
111
  required_rubygems_version: !ruby/object:Gem::Requirement
246
112
  requirements:
247
113
  - - ">="
248
114
  - !ruby/object:Gem::Version
249
115
  version: '0'
250
116
  requirements: []
251
- rubygems_version: 3.1.2
117
+ rubygems_version: 3.2.22
252
118
  signing_key:
253
119
  specification_version: 4
254
120
  summary: Library for testing internet bandwidth using speedtest.net
data/lib/geo.rb DELETED
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Geo
4
- RADIAN_PER_DEGREE = Math::PI / 180
5
- EARTH_RADIUS = 6_371_000
6
-
7
- def initialize(lat, long)
8
- @lat = lat
9
- @long = long
10
- end
11
-
12
- def distance(other) # rubocop:disable Metrics/AbcSize
13
- a = Math.sin(radian_lat) * Math.sin(other.radian_lat) +
14
- Math.cos(radian_lat) * Math.cos(other.radian_lat) *
15
- Math.cos(radian_long - other.radian_long)
16
-
17
- Math.acos(a) * EARTH_RADIUS
18
- end
19
-
20
- def radian_lat
21
- @lat * RADIAN_PER_DEGREE
22
- end
23
-
24
- def radian_long
25
- @long * RADIAN_PER_DEGREE
26
- end
27
- end