ruby-limiter 1.0.2 → 1.1.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: b5539b1f191ad06d89a530968e52be20b50668a3a3697cbd1c860875158cd888
4
- data.tar.gz: 778c400b703c08064b34651f879e26d6cb68fc1b3525d3459a7a3ccd1559d0e4
3
+ metadata.gz: 5608ca6c1f3eafc6056387bb8e2addc54af6e8e0bc17394703d31fff14374f87
4
+ data.tar.gz: a30d6a8ca052fc4621575cbbcb1100e0de534a6fdd4d1ce293f9b23b67e9c1b4
5
5
  SHA512:
6
- metadata.gz: 927ac894b0f0b5c55fcf7c877a8514d35ecb6db7be85a9b3ff286107666718652ec83c9fd4d767a8d3a60fd845a7831d11c37c46b4878ae43527e4c7ef82eb01
7
- data.tar.gz: 7bbc065f4b96be1a69158e5dc7d586bf6b4b25cd6042e3c50e593124faf5d173f8d0b5f5cffacc80830666ae712d15ed531ab680f9c75b42a5713c4fff2b2990
6
+ metadata.gz: 0eb16ba74c5d5731e90cc094f707f294d47c67408955fde22b049ad078b6600d24a8e9215616b3a05853528066716df56052423b9d9e2631149636163c6411cb
7
+ data.tar.gz: dbe54f4cec3e94188f813c68ae9a91d6692d33a33a289394138d67a5d5a77ebb636cad98574d8fd655706243b9702f189541819ccd62f52724970f2016496d90
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.1.0
4
+
5
+ - using Process.clock_gettime(Process::CLOCK_MONOTONIC) instead of Time.now for improved accuracy
6
+
3
7
  ## v1.0.2
4
8
 
5
9
  - DOCFIX: fix name of gem in README
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'limiter/clock'
3
4
  require 'limiter/mixin'
4
5
  require 'limiter/rate_queue'
5
6
  require 'limiter/version'
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'singleton'
4
+ require 'forwardable'
5
+
6
+ module Limiter
7
+ class Clock
8
+ include Singleton
9
+
10
+ extend SingleForwardable
11
+ def_single_delegators :instance, :sleep, :time
12
+
13
+ def sleep(interval)
14
+ Kernel.sleep(interval)
15
+ end
16
+
17
+ def time
18
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
19
+ end
20
+ end
21
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Limiter
4
4
  class RateQueue
5
- EPOCH = Time.at(0)
5
+ EPOCH = 0.0
6
6
 
7
7
  def initialize(size, interval: 60)
8
8
  @size = size
@@ -21,7 +21,7 @@ module Limiter
21
21
 
22
22
  sleep_until(time + @interval)
23
23
 
24
- @ring[@head] = Time.now
24
+ @ring[@head] = clock.time
25
25
  @head = (@head + 1) % @size
26
26
  end
27
27
 
@@ -31,9 +31,13 @@ module Limiter
31
31
  private
32
32
 
33
33
  def sleep_until(time)
34
- interval = time - Time.now
34
+ interval = time - clock.time
35
35
  return unless interval.positive?
36
- sleep(interval)
36
+ clock.sleep(interval)
37
+ end
38
+
39
+ def clock
40
+ Clock
37
41
  end
38
42
  end
39
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Limiter
4
- VERSION = '1.0.2'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_development_dependency 'bundler'
31
31
  spec.add_development_dependency 'minitest', '~> 5.0'
32
+ spec.add_development_dependency 'mocha', '~> 1.11'
32
33
  spec.add_development_dependency 'rake', '~> 10.0'
33
34
  spec.add_development_dependency 'rubocop', '~> 0.56'
34
- spec.add_development_dependency 'timecop', '~> 0.8.0'
35
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - S. Brent Faulkner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-18 00:00:00.000000000 Z
11
+ date: 2020-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,47 +39,47 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: mocha
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '1.11'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '1.11'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubocop
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.56'
61
+ version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.56'
68
+ version: '10.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: timecop
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.8.0
75
+ version: '0.56'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.8.0
82
+ version: '0.56'
83
83
  description:
84
84
  email:
85
85
  - brent.faulkner@shopify.com
@@ -100,6 +100,7 @@ files:
100
100
  - bin/setup
101
101
  - dev.yml
102
102
  - lib/limiter.rb
103
+ - lib/limiter/clock.rb
103
104
  - lib/limiter/mixin.rb
104
105
  - lib/limiter/rate_queue.rb
105
106
  - lib/limiter/version.rb