speedtest_net 0.1.1 → 0.2.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: 787db5a853e47d1ff30c1d19a559d5fa97ac509a04b02cfd5bf40af2480f1c48
4
- data.tar.gz: 5f3d1de9803286980bde19667c43953484e2acaf87ce89efd64fe1d0e396e9a3
3
+ metadata.gz: bcdc8354efb8ccb8f3816bb7c3951211da2e8e2371eaa4790ed7d05061f1eaf3
4
+ data.tar.gz: a02b89411ed31e8e3893266063c2309e03a1fb1abac2a626d2d9fc961b5e25ea
5
5
  SHA512:
6
- metadata.gz: 361732b261cf02801d3507938ae4bc59f533bf2c26d8d3ee66c7267948ede13c1fa9f5e78145455b0b4171bffad15ef9233912ed7a0af690c2a4f74d10577a44
7
- data.tar.gz: 53f5835b6b32905b7f1332595a4ddc02f2d3b5e26258867b6d3d15f5b972b437c5d9ff6d909ffca9e601e6d59d9f8804dd8c536770f9f9088c4ce637af8a6179
6
+ metadata.gz: eb96f0835e8253dbe5c149d9cf921f2bf4840b4cffdde07826b02ded3de13f348e1d896d5f8d636ee5db66182e1a5b8c5ddde49abebfbe2eb1ab8f2fdd804cbd
7
+ data.tar.gz: 8b2478d2d3b4e56ab77a99247f399b4e243f1299f248005be1adc6962259d34ed540344d89be2132674b7b0cc06af1f43653947d2cfd9887614373f818fe6332
data/lib/geo.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Geo
4
+ RADIUS_PER_DEGREE = Math::PI / 180
5
+ RADIUS_METER = 6_371_000
6
+
7
+ attr_reader :lat, :long
8
+
9
+ def initialize(lat, long)
10
+ @lat = lat
11
+ @long = long
12
+ end
13
+
14
+ def distance(other) # rubocop:disable Metrics/AbcSize
15
+ delta_lat = (@lat - other.lat) * RADIUS_PER_DEGREE
16
+ delta_long = (@long - other.long) * RADIUS_PER_DEGREE
17
+
18
+ lat_radius = @lat * RADIUS_PER_DEGREE
19
+ other_lat_radius = other.lat * RADIUS_PER_DEGREE
20
+
21
+ a = Math.sin(delta_lat / 2)**2 +
22
+ Math.cos(lat_radius) *
23
+ Math.cos(other_lat_radius) *
24
+ Math.sin(delta_long / 2)**2
25
+
26
+ Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) * 2 * RADIUS_METER
27
+ end
28
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rexml/document'
4
4
  require 'speedtest_net/error'
5
- require 'speedtest_net/geo'
5
+ require 'geo'
6
6
 
7
7
  module SpeedtestNet
8
8
  class Config
@@ -60,7 +60,7 @@ module SpeedtestNet
60
60
  {
61
61
  ip: elements['ip'],
62
62
  isp: elements['isp'],
63
- geo: SpeedtestNet::Geo.new(elements['lat'].to_f, elements['lon'].to_f)
63
+ geo: Geo.new(elements['lat'].to_f, elements['lon'].to_f)
64
64
  }
65
65
  end
66
66
 
@@ -44,10 +44,11 @@ module SpeedtestNet
44
44
  end
45
45
 
46
46
  def calculate_results(results)
47
- count = results.count
47
+ sorted_results = results.sort
48
+ count = sorted_results.count
48
49
  faster = count - (count * 0.1).round
49
50
  slower = (count * 0.3).round
50
- target_results = results[slower...faster]
51
+ target_results = sorted_results[slower...faster]
51
52
  target_results.sum / target_results.count
52
53
  end
53
54
  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 'speedtest_net/geo'
7
+ require 'geo'
8
8
 
9
9
  module SpeedtestNet
10
10
  class Server
@@ -52,7 +52,7 @@ module SpeedtestNet
52
52
  config = SpeedtestNet::Config.fetch
53
53
  url = server['url2'] || server['url']
54
54
 
55
- geo = SpeedtestNet::Geo.new(server['lat'].to_f, server['lon'].to_f)
55
+ geo = Geo.new(server['lat'].to_f, server['lon'].to_f)
56
56
  distance = geo.distance(config.client[:geo])
57
57
 
58
58
  new(server['id'].to_i, url, geo, distance, server)
@@ -42,10 +42,11 @@ module SpeedtestNet
42
42
  end
43
43
 
44
44
  def calculate_results(results)
45
- count = results.count
45
+ sorted_results = results.sort
46
+ count = sorted_results.count
46
47
  faster = count - (count * 0.1).round
47
48
  slower = (count * 0.3).round
48
- target_results = results[slower...faster]
49
+ target_results = sorted_results[slower...faster]
49
50
  target_results.sum / target_results.count
50
51
  end
51
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpeedtestNet
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speedtest_net
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.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: 2019-11-03 00:00:00.000000000 Z
11
+ date: 2019-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,11 +140,11 @@ files:
140
140
  - Rakefile
141
141
  - bin/console
142
142
  - bin/setup
143
+ - lib/geo.rb
143
144
  - lib/speedtest_net.rb
144
145
  - lib/speedtest_net/config.rb
145
146
  - lib/speedtest_net/download.rb
146
147
  - lib/speedtest_net/error.rb
147
- - lib/speedtest_net/geo.rb
148
148
  - lib/speedtest_net/latency.rb
149
149
  - lib/speedtest_net/result.rb
150
150
  - lib/speedtest_net/run.rb
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SpeedtestNet
4
- class Geo
5
- RADIUS_PER_DEGREE = Math::PI / 180
6
- RADIUS_METER = 6_371_000
7
-
8
- attr_reader :lat, :long
9
-
10
- def initialize(lat, long)
11
- @lat = lat
12
- @long = long
13
- end
14
-
15
- def distance(other) # rubocop:disable Metrics/AbcSize
16
- delta_lat = (@lat - other.lat) * RADIUS_PER_DEGREE
17
- delta_long = (@long - other.long) * RADIUS_PER_DEGREE
18
-
19
- lat_radius = @lat * RADIUS_PER_DEGREE
20
- other_lat_radius = other.lat * RADIUS_PER_DEGREE
21
-
22
- a = Math.sin(delta_lat / 2)**2 +
23
- Math.cos(lat_radius) *
24
- Math.cos(other_lat_radius) *
25
- Math.sin(delta_long / 2)**2
26
-
27
- Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) * 2 * RADIUS_METER
28
- end
29
- end
30
- end