From 1aa5cf4c513b3a9aeed7057f99a5b13c97087f50 Mon Sep 17 00:00:00 2001 From: Kye Wei Date: Thu, 12 Nov 2015 19:23:36 +0000 Subject: [PATCH] Small Changes --- ext/semian/semian_integer.c | 7 +++++++ lib/semian/circuit_breaker.rb | 5 +++-- lib/semian/simple_integer.rb | 4 ++-- lib/semian/simple_sliding_window.rb | 6 +++--- lib/semian/simple_state.rb | 2 +- test/simple_integer_test.rb | 13 ++++++++++--- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/ext/semian/semian_integer.c b/ext/semian/semian_integer.c index a94b5377..91fd8d21 100644 --- a/ext/semian/semian_integer.c +++ b/ext/semian/semian_integer.c @@ -73,6 +73,12 @@ semian_integer_set_value(VALUE self, VALUE num) return num; } +static VALUE +semian_integer_reset(VALUE self) +{ + return semian_integer_set_value(self, INT2NUM(0)); +} + static VALUE semian_integer_increment(int argc, VALUE *argv, VALUE self) { @@ -113,5 +119,6 @@ Init_semian_integer (void) rb_define_method(cInteger, "bind_init_fn", semian_integer_bind_init_fn_wrapper, 0); rb_define_method(cInteger, "value", semian_integer_get_value, 0); rb_define_method(cInteger, "value=", semian_integer_set_value, 1); + rb_define_method(cInteger, "reset", semian_integer_reset, 0); rb_define_method(cInteger, "increment", semian_integer_increment, -1); } diff --git a/lib/semian/circuit_breaker.rb b/lib/semian/circuit_breaker.rb index 48073445..be74ec95 100644 --- a/lib/semian/circuit_breaker.rb +++ b/lib/semian/circuit_breaker.rb @@ -3,7 +3,7 @@ class CircuitBreaker #:nodoc: extend Forwardable def initialize(name, exceptions:, success_threshold:, error_threshold:, error_timeout:, permissions:, implementation:) - @name = name.to_s + @name = name.to_sym @success_count_threshold = success_threshold @error_count_threshold = error_threshold @error_timeout = error_timeout @@ -102,7 +102,8 @@ def error_timeout_expired? end def push_time(window, duration:, time: Time.now) - @errors.synchronize do # Store an integer amount of milliseconds since epoch + # The sliding window stores the integer amount of milliseconds since epoch as a timestamp + @errors.synchronize do window.shift while window.first && window.first / 1000 + duration < time.to_i window << (time.to_f * 1000).to_i end diff --git a/lib/semian/simple_integer.rb b/lib/semian/simple_integer.rb index 44d17a25..d2814aec 100644 --- a/lib/semian/simple_integer.rb +++ b/lib/semian/simple_integer.rb @@ -3,8 +3,8 @@ module Simple class Integer #:nodoc: attr_accessor :value - def initialize - @value = 0 + def initialize(**_) + reset end def increment(val = 1) diff --git a/lib/semian/simple_sliding_window.rb b/lib/semian/simple_sliding_window.rb index 0da81970..e3de9978 100644 --- a/lib/semian/simple_sliding_window.rb +++ b/lib/semian/simple_sliding_window.rb @@ -12,7 +12,7 @@ class SlidingWindow #:nodoc: # like this: if @max_size = 4, current time is 10, @window =[5,7,9,10]. # Another push of (11) at 11 sec would make @window [7,9,10,11], shifting off 5. - def initialize(max_size:) + def initialize(max_size:, **_) @max_size = max_size @window = [] end @@ -24,9 +24,9 @@ def resize_to(size) self end - def push(time_ms) + def push(value) @window.shift while @window.size >= @max_size - @window << time_ms + @window << value self end diff --git a/lib/semian/simple_state.rb b/lib/semian/simple_state.rb index d97f4960..e8880d48 100644 --- a/lib/semian/simple_state.rb +++ b/lib/semian/simple_state.rb @@ -1,7 +1,7 @@ module Semian module Simple class State #:nodoc: - def initialize + def initialize(**_) reset end diff --git a/test/simple_integer_test.rb b/test/simple_integer_test.rb index a571ede3..195051d9 100644 --- a/test/simple_integer_test.rb +++ b/test/simple_integer_test.rb @@ -5,7 +5,6 @@ class TestSimpleInteger < MiniTest::Unit::TestCase def setup @integer = CLASS.new - @integer.value = 0 end def teardown @@ -14,7 +13,6 @@ def teardown module IntegerTestCases def test_access_value - @integer.value = 0 assert_equal(0, @integer.value) @integer.value = 99 assert_equal(99, @integer.value) @@ -28,7 +26,6 @@ def test_access_value end def test_increment - @integer.value = 0 @integer.increment(4) assert_equal(4, @integer.value) @integer.increment @@ -36,6 +33,16 @@ def test_increment @integer.increment(-2) assert_equal(3, @integer.value) end + + def test_reset_on_init + assert_equal(0, @integer.value) + end + + def test_reset + @integer.increment(5) + @integer.reset + assert_equal(0, @integer.value) + end end include IntegerTestCases