govdelivery-proctor 1.3 → 1.3.1

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
  SHA1:
3
- metadata.gz: bce8d79f6531e5607f2cc402de70da89aa6c961a
4
- data.tar.gz: cc01c5f9d058db7f0aacff5ecffa1141417dac37
3
+ metadata.gz: 91a9b90149544728c77ca574a3aea6c8a9e38562
4
+ data.tar.gz: d20eeee7b30bb5d9d27a721830c2f5c1633647a3
5
5
  SHA512:
6
- metadata.gz: 1047b2266805be8100f8d365a36952e4a91afb18dac09a15a84c9563094971fbf3ace15ff6b5a0823aa0340c62eaf72a0f98f180e2c91392f016d3258e40cdd6
7
- data.tar.gz: 75b16d48140304a9cab0cf1343b2f153cda23bd7ca0ee77a02ecd5d901fade3c8b3ba8be2269aae0ca67aba32400bf5247f255c70d8b1ae2ef8c267946f1391f
6
+ metadata.gz: f78e93e3d88422f8e54e12c0e81c6e68ac7b38584bd548fc92e195c445265f5ba6e0f076e00bdf86f6f667183fbf16c050e0758f4c224e7c194bd5bb0d593c6f
7
+ data.tar.gz: 45599c8cc3c0e03332b7f8675a17a8fa74eac2f61754a53fb83eb6a8d612c68896af89eba665524a2828d74c2ff6b58b9934479417a1ea066ffb45f247128739
@@ -0,0 +1,17 @@
1
+ before_script:
2
+ - rbenv install -s
3
+ - bundle -v || gem install bundler
4
+ - bundle install --quiet --path .bundle
5
+
6
+ stages:
7
+ - Test
8
+
9
+ cache:
10
+ key: bundle_files
11
+ paths:
12
+ - .bundle/
13
+
14
+ Test:
15
+ stage: Test
16
+ script:
17
+ - bundle exec rake test
@@ -0,0 +1 @@
1
+ jruby-1.7.25
@@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  [How to use a CHANGELOG](http://keepachangelog.com/)
6
+ ## [1.3.1]
7
+ ### Fixed
8
+ - Changes made as part of 1.3.0 caused an error to be thrown when ActiveSupport::Duration was used for `limit` or `inc` arguments of accelerating_check
9
+ - Reverted `Math.log` formula for accelerating_check in favor of a more simple formula because the former was worse than the latter
10
+ - Live logging amount of time an operation will be sleeping before sleep occurs
6
11
  ## [1.3.0]
7
12
  ### Added
8
13
  - Say hello to steady_check which sleeps for the increment passed to it
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
  gemspec
@@ -1,33 +1,55 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- govdelivery-proctor (1.2.1)
4
+ govdelivery-proctor (1.3.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- byebug (9.0.5)
9
+ activesupport (4.2.7.1)
10
+ i18n (~> 0.7)
11
+ json (~> 1.7, >= 1.7.7)
12
+ minitest (~> 5.1)
13
+ thread_safe (~> 0.3, >= 0.3.4)
14
+ tzinfo (~> 1.1)
10
15
  coderay (1.1.1)
16
+ ffi (1.9.14-java)
17
+ i18n (0.7.0)
18
+ json (1.8.3)
19
+ json (1.8.3-java)
11
20
  method_source (0.8.2)
12
- power_assert (0.3.0)
21
+ minitest (5.10.1)
22
+ power_assert (0.4.1)
13
23
  pry (0.10.4)
14
24
  coderay (~> 1.1.0)
15
25
  method_source (~> 0.8.1)
16
26
  slop (~> 3.4)
17
- pry-byebug (3.4.0)
18
- byebug (~> 9.0)
19
- pry (~> 0.10)
27
+ pry (0.10.4-java)
28
+ coderay (~> 1.1.0)
29
+ method_source (~> 0.8.1)
30
+ slop (~> 3.4)
31
+ spoon (~> 0.0)
32
+ rake (11.3.0)
20
33
  slop (3.6.0)
21
- test-unit (3.2.1)
34
+ spoon (0.0.6)
35
+ ffi
36
+ test-unit (3.2.3)
22
37
  power_assert
38
+ thread_safe (0.3.5)
39
+ thread_safe (0.3.5-java)
40
+ tzinfo (1.2.2)
41
+ thread_safe (~> 0.1)
23
42
 
24
43
  PLATFORMS
44
+ java
25
45
  ruby
26
46
 
27
47
  DEPENDENCIES
48
+ activesupport (~> 4.0)
28
49
  bundler (~> 1.7)
29
50
  govdelivery-proctor!
30
- pry-byebug (~> 3.4)
51
+ pry
52
+ rake
31
53
  test-unit
32
54
 
33
55
  BUNDLED WITH
data/README.md CHANGED
@@ -78,16 +78,20 @@ end
78
78
  ## Development
79
79
  ### Get Dev Dependencies
80
80
 
81
- $ bundle install
81
+ $ bundle install
82
82
 
83
83
  ### Build
84
84
 
85
- $ gem build proctor.gemspec
85
+ $ gem build proctor.gemspec
86
86
 
87
87
  ### Install locally
88
88
 
89
- $ gem install govdelivery-proctor-1.2.0.gem
89
+ $ gem install govdelivery-proctor-1.3.1.gem
90
90
 
91
91
  ### Test
92
92
 
93
- $ rake test
93
+ $ rake test
94
+
95
+ ### Push to rubygems
96
+
97
+ $ gem push govdelivery-proctor-1.3.1.gem
@@ -1,7 +1,7 @@
1
1
  module GovDelivery::Proctor
2
2
  class CheckTimeExceeded < StandardError; end
3
3
 
4
- def self.backoff_check(limit, desc = 'Backoff check', inc = 1)
4
+ def self.backoff_check(limit, desc = 'Backoff check', inc = 20)
5
5
  raise 'Check requires a block' unless block_given?
6
6
  check(limit, 'backoff', desc, inc) do
7
7
  yield
@@ -10,14 +10,14 @@ module GovDelivery::Proctor
10
10
 
11
11
  # Sometimes you want to reverse backoff because as time
12
12
  # passes it is more likely your condition is true
13
- def self.accelerating_check(limit, desc = 'Backon check', inc = 1)
13
+ def self.accelerating_check(limit, desc = 'Accelerating check', inc = 20)
14
14
  raise 'Check requires a block' unless block_given?
15
15
  check(limit, 'accelerate', desc, inc) do
16
16
  yield
17
17
  end
18
18
  end
19
19
 
20
- def self.steady_check(limit, desc = 'Steady check', inc = 1)
20
+ def self.steady_check(limit, desc = 'Steady check', inc = 10)
21
21
  raise 'Check requires a block' unless block_given?
22
22
  check(limit, 'steady', desc, inc) do
23
23
  yield
@@ -25,22 +25,24 @@ module GovDelivery::Proctor
25
25
  end
26
26
 
27
27
  # if backoff, double the wait time each time
28
- # if accelerating, ramp up after long pause
28
+ # if accelerate, halve the wait time each time based on limit
29
+ # and use increment only for minimum wait time
29
30
  # if steady, just keep it steady
31
+ # to_i used to make ActiveSupport::Durations safe
30
32
  def self.sleep_time(check_type, limit, increment, iteration)
31
- case check_type
32
- when 'steady'
33
- increment
34
- when 'backoff'
35
- (2**iteration) * increment
36
- when 'accelerate'
37
- val = Math.log(limit, iteration + 1)
38
- val = val.to_f.infinite? ? limit / increment : val
39
- val = val.to_f.nan? ? 1 : val.round
40
- [increment, val * increment].max
41
- else
42
- raise "Check type #{check_type} invalid: choose backon, accelerate or steady."
43
- end
33
+ limit = limit.to_i
34
+ increment = increment.to_i
35
+ sleep_time = case check_type
36
+ when 'steady'
37
+ increment
38
+ when 'backoff'
39
+ (2**iteration) * increment
40
+ when 'accelerate'
41
+ [(limit / 2) / (iteration + 1), increment].max
42
+ else
43
+ raise "Check type #{check_type} invalid: choose accelerate, backoff, or steady."
44
+ end
45
+ [sleep_time, limit].min
44
46
  end
45
47
 
46
48
  def self.check(limit, check_type, desc, inc)
@@ -50,7 +52,8 @@ module GovDelivery::Proctor
50
52
  x = 0
51
53
  response = nil
52
54
  Kernel.loop do
53
- sleep_time = sleep_time(check_type, limit, inc, ++x)
55
+ sleep_time = sleep_time(check_type, limit, inc, x)
56
+ getStandardLogger.info("sleeping for #{sleep_time} seconds")
54
57
  sleep(sleep_time)
55
58
  slept_time += sleep_time
56
59
  response = yield
@@ -59,9 +62,9 @@ module GovDelivery::Proctor
59
62
  fail_message = "#{desc} has taken too long. Have waited #{slept_time} seconds\nlog: #{@backBuffer.string}"
60
63
  raise CheckTimeExceeded, fail_message
61
64
  end
65
+ x += 1
62
66
  # We're doing this twice, once for standard out so you can see it's still
63
67
  # working, and then again inside the logged output if it fails.
64
-
65
68
  getStandardLogger.info("Still waiting while #{desc}, current time=#{slept_time}")
66
69
  log.info("Still waiting while #{desc}, current time=#{slept_time}")
67
70
  end
@@ -1,5 +1,5 @@
1
1
  module GovDelivery
2
2
  module Proctor
3
- VERSION = "1.3"
3
+ VERSION = "1.3.1"
4
4
  end
5
5
  end
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'test-unit'
22
21
  spec.add_development_dependency 'bundler', '~> 1.7'
23
- spec.add_development_dependency 'pry-byebug', '~> 3.4'
22
+ spec.add_development_dependency 'pry'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'test-unit'
25
+ spec.add_development_dependency 'activesupport', '~>4.0'
24
26
  end
@@ -4,5 +4,6 @@ Bundler.require :default, :test
4
4
 
5
5
  require 'test/unit'
6
6
  require 'govdelivery-proctor'
7
- require 'pry-byebug'
7
+ require 'pry'
8
8
  require 'logger'
9
+ require 'active_support/time'
@@ -17,20 +17,30 @@ class TestProctor < Test::Unit::TestCase
17
17
  assert_equal 480, GovDelivery::Proctor.sleep_time('backoff', 600, 30, 4)
18
18
  end
19
19
 
20
- def test_sleep_time_accelerate_iteration_default_to_minimum
21
- assert_equal 10, GovDelivery::Proctor.sleep_time('accelerate', 1, 10, 2)
20
+ def test_sleep_time_accelerate_default_to_limit
21
+ assert_equal 1, GovDelivery::Proctor.sleep_time('accelerate', 1, 10, 2)
22
+ end
23
+
24
+ def test_sleep_time_accelerate_default_to_limit_with_ActiveSupport_Duration
25
+ assert_equal 1, GovDelivery::Proctor.sleep_time('accelerate', 1.second, 10.seconds, 2)
22
26
  end
23
27
 
24
28
  def test_sleep_time_accelerate_iteration_one
25
- assert_equal 90, GovDelivery::Proctor.sleep_time('accelerate', 600, 10, 1)
29
+ assert_equal 150, GovDelivery::Proctor.sleep_time('accelerate', 600, 10, 1)
26
30
  end
27
31
 
28
32
  def test_sleep_time_accelerate_iteration_four
29
- assert_equal 40, GovDelivery::Proctor.sleep_time('accelerate', 600, 10, 4)
33
+ assert_equal 60, GovDelivery::Proctor.sleep_time('accelerate', 600, 10, 4)
34
+ end
35
+
36
+ def test_sleep_time_accelerate_respect_increment
37
+ assert_equal 45, GovDelivery::Proctor.sleep_time('accelerate', 60, 45, 4)
30
38
  end
31
39
 
32
- def test_sleep_time_accelerate_iteration_four_lower_sleep
33
- assert_equal 4, GovDelivery::Proctor.sleep_time('accelerate', 600, 1, 4)
40
+ def test_sleep_time_accelerate_real_world
41
+ assert_equal 240, GovDelivery::Proctor.sleep_time('accelerate', 8.minutes, 30, 0)
42
+ assert_equal 120, GovDelivery::Proctor.sleep_time('accelerate', 8.minutes, 30, 1)
43
+ assert_equal 40, GovDelivery::Proctor.sleep_time('accelerate', 8.minutes, 30, 5)
34
44
  end
35
45
 
36
46
  def test_backoff_check_condition_true
@@ -66,7 +76,7 @@ class TestProctor < Test::Unit::TestCase
66
76
  false
67
77
  end
68
78
  end
69
- assert_equal "Backon check has taken too long. Have waited 1 seconds\nlog: ", ex.message
79
+ assert_equal "Accelerating check has taken too long. Have waited 1 seconds\nlog: ", ex.message
70
80
  end
71
81
 
72
82
  def test_steady_check_condition_false
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govdelivery-proctor
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.3'
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Bushey
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-13 00:00:00.000000000 Z
11
+ date: 2016-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: test-unit
14
+ name: bundler
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - "~>"
23
+ - !ruby/object:Gem::Version
24
+ version: '1.7'
25
+ prerelease: false
26
+ type: :development
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
15
34
  requirement: !ruby/object:Gem::Requirement
16
35
  requirements:
17
36
  - - ">="
18
37
  - !ruby/object:Gem::Version
19
38
  version: '0'
20
- type: :development
21
39
  prerelease: false
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
22
43
  version_requirements: !ruby/object:Gem::Requirement
23
44
  requirements:
24
45
  - - ">="
25
46
  - !ruby/object:Gem::Version
26
47
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
48
  requirement: !ruby/object:Gem::Requirement
30
49
  requirements:
31
- - - "~>"
50
+ - - ">="
32
51
  - !ruby/object:Gem::Version
33
- version: '1.7'
34
- type: :development
52
+ version: '0'
35
53
  prerelease: false
54
+ type: :development
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
36
57
  version_requirements: !ruby/object:Gem::Requirement
37
58
  requirements:
38
- - - "~>"
59
+ - - ">="
39
60
  - !ruby/object:Gem::Version
40
- version: '1.7'
41
- - !ruby/object:Gem::Dependency
42
- name: pry-byebug
61
+ version: '0'
43
62
  requirement: !ruby/object:Gem::Requirement
44
63
  requirements:
45
- - - "~>"
64
+ - - ">="
46
65
  - !ruby/object:Gem::Version
47
- version: '3.4'
48
- type: :development
66
+ version: '0'
49
67
  prerelease: false
68
+ type: :development
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
50
71
  version_requirements: !ruby/object:Gem::Requirement
51
72
  requirements:
52
73
  - - "~>"
53
74
  - !ruby/object:Gem::Version
54
- version: '3.4'
75
+ version: '4.0'
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '4.0'
81
+ prerelease: false
82
+ type: :development
55
83
  description: Classes and functions to support feature testing.
56
84
  email:
57
85
  - bill.bushey@govdelivery.com
@@ -60,6 +88,8 @@ extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
62
90
  - ".gitignore"
91
+ - ".gitlab-ci.yml"
92
+ - ".ruby-version"
63
93
  - CHANGELOG.md
64
94
  - Gemfile
65
95
  - Gemfile.lock
@@ -75,7 +105,7 @@ homepage: ''
75
105
  licenses:
76
106
  - MIT
77
107
  metadata: {}
78
- post_install_message:
108
+ post_install_message:
79
109
  rdoc_options: []
80
110
  require_paths:
81
111
  - lib
@@ -90,9 +120,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
120
  - !ruby/object:Gem::Version
91
121
  version: '0'
92
122
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.5.1
95
- signing_key:
123
+ rubyforge_project:
124
+ rubygems_version: 2.4.8
125
+ signing_key:
96
126
  specification_version: 4
97
127
  summary: Classes and functions to support feature testing.
98
128
  test_files: