pause 0.0.2 → 0.0.3
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.
- data/Gemfile +3 -0
- data/Guardfile +3 -1
- data/lib/pause/action.rb +29 -0
- data/lib/pause/redis/adapter.rb +16 -0
- data/lib/pause/version.rb +1 -1
- data/spec/pause/action_spec.rb +70 -3
- data/spec/support/fakeredis.rb +2 -0
- metadata +1 -1
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -6,8 +6,10 @@
|
|
6
6
|
|
7
7
|
guard 'rspec' do
|
8
8
|
watch(%r{^spanx\.gemspec}) { "spec"}
|
9
|
-
watch(%r{^spec/.+_spec\.rb$})
|
10
9
|
watch(%r{^lib/(.+)\.rb$}) { "spec" }
|
10
|
+
|
11
|
+
watch(%r{^spec/.+_spec\.rb$})
|
11
12
|
watch('spec/spec_helper.rb') { "spec" }
|
13
|
+
watch(%r{spec/support/.*}) { "spec" }
|
12
14
|
end
|
13
15
|
|
data/lib/pause/action.rb
CHANGED
@@ -56,10 +56,12 @@ module Pause
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def ok?
|
59
|
+
return true if self.class.disabled?
|
59
60
|
Pause.analyzer.check(self).nil?
|
60
61
|
end
|
61
62
|
|
62
63
|
def analyze
|
64
|
+
return nil if self.class.disabled?
|
63
65
|
Pause.analyzer.check(self)
|
64
66
|
end
|
65
67
|
|
@@ -79,6 +81,33 @@ module Pause
|
|
79
81
|
"#{self.scope}:#{@identifier}"
|
80
82
|
end
|
81
83
|
|
84
|
+
# Actions can be globally disabled or re-enabled in a persistent
|
85
|
+
# way.
|
86
|
+
#
|
87
|
+
# MyAction.disable
|
88
|
+
# MyAction.enabled? => false
|
89
|
+
# MyAction.disabled? => true
|
90
|
+
#
|
91
|
+
# MyAction.enable
|
92
|
+
# MyAction.enabled? => true
|
93
|
+
# MyAction.disabled? => false
|
94
|
+
#
|
95
|
+
def self.enable
|
96
|
+
Pause.analyzer.adapter.enable(class_scope)
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.disable
|
100
|
+
Pause.analyzer.adapter.disable(class_scope)
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.enabled?
|
104
|
+
Pause.analyzer.adapter.enabled?(class_scope)
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.disabled?
|
108
|
+
! enabled?
|
109
|
+
end
|
110
|
+
|
82
111
|
private
|
83
112
|
|
84
113
|
def self.class_scope
|
data/lib/pause/redis/adapter.rb
CHANGED
@@ -54,6 +54,22 @@ module Pause
|
|
54
54
|
redis.del (increment_keys + blocked_keys)
|
55
55
|
end
|
56
56
|
|
57
|
+
def disable(scope)
|
58
|
+
redis.set("disabled:#{scope}", "1")
|
59
|
+
end
|
60
|
+
|
61
|
+
def enable(scope)
|
62
|
+
redis.del("disabled:#{scope}")
|
63
|
+
end
|
64
|
+
|
65
|
+
def disabled?(scope)
|
66
|
+
! enabled?(scope)
|
67
|
+
end
|
68
|
+
|
69
|
+
def enabled?(scope)
|
70
|
+
redis.keys("disabled:#{scope}").first.nil?
|
71
|
+
end
|
72
|
+
|
57
73
|
private
|
58
74
|
|
59
75
|
def redis
|
data/lib/pause/version.rb
CHANGED
data/spec/pause/action_spec.rb
CHANGED
@@ -47,14 +47,16 @@ describe Pause::Action do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should successfully consider different period checks" do
|
50
|
-
time = Time.now
|
51
|
-
|
50
|
+
time = period_marker(resolution, Time.now.to_i + 1)
|
51
|
+
|
52
|
+
Timecop.freeze Time.at(time - 35) do
|
52
53
|
4.times do
|
53
54
|
action.increment!
|
54
55
|
action.ok?.should be_true
|
55
56
|
end
|
56
57
|
end
|
57
|
-
|
58
|
+
|
59
|
+
Timecop.freeze Time.at(time - 5) do
|
58
60
|
2.times do
|
59
61
|
action.increment!
|
60
62
|
action.ok?.should be_true
|
@@ -63,6 +65,18 @@ describe Pause::Action do
|
|
63
65
|
action.ok?.should be_false
|
64
66
|
end
|
65
67
|
end
|
68
|
+
|
69
|
+
context "action is disabled" do
|
70
|
+
|
71
|
+
it "should be true if action is disabled, even if blocked" do
|
72
|
+
10.times { action.increment! }
|
73
|
+
action.ok?.should be_false
|
74
|
+
|
75
|
+
MyNotification.disable
|
76
|
+
|
77
|
+
action.ok?.should be_true
|
78
|
+
end
|
79
|
+
end
|
66
80
|
end
|
67
81
|
|
68
82
|
describe "#analyze" do
|
@@ -91,6 +105,17 @@ describe Pause::Action do
|
|
91
105
|
blocked_action.timestamp.should == expected_blocked_action.timestamp
|
92
106
|
end
|
93
107
|
end
|
108
|
+
|
109
|
+
context "action is disabled" do
|
110
|
+
it "return nil, even if blocked" do
|
111
|
+
10.times { action.increment! }
|
112
|
+
action.should_not be_ok
|
113
|
+
|
114
|
+
MyNotification.disable
|
115
|
+
|
116
|
+
action.analyze.should be_nil
|
117
|
+
end
|
118
|
+
end
|
94
119
|
end
|
95
120
|
|
96
121
|
describe "#tracked_identifiers" do
|
@@ -183,3 +208,45 @@ describe Pause::Action, ".scope" do
|
|
183
208
|
DefinedScopeAction.new("1.2.3.4").scope.should == "my:scope"
|
184
209
|
end
|
185
210
|
end
|
211
|
+
|
212
|
+
describe Pause::Action, "enabled/disabled states" do
|
213
|
+
class BlockedAction < Pause::Action
|
214
|
+
scope "blocked"
|
215
|
+
check 10, 0, 10
|
216
|
+
end
|
217
|
+
|
218
|
+
before do
|
219
|
+
Pause.configure do |c|
|
220
|
+
c.resolution = 10
|
221
|
+
c.history = 10
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
let(:action) { BlockedAction }
|
226
|
+
|
227
|
+
describe "#disable" do
|
228
|
+
before do
|
229
|
+
action.should be_enabled
|
230
|
+
action.should_not be_disabled
|
231
|
+
action.disable
|
232
|
+
end
|
233
|
+
|
234
|
+
it "disables the action" do
|
235
|
+
action.should be_disabled
|
236
|
+
action.should_not be_enabled
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
describe "#enable" do
|
241
|
+
before do
|
242
|
+
action.disable
|
243
|
+
action.should_not be_enabled
|
244
|
+
action.enable
|
245
|
+
end
|
246
|
+
|
247
|
+
it "enables the action" do
|
248
|
+
action.should be_enabled
|
249
|
+
action.should_not be_disabled
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
data/spec/support/fakeredis.rb
CHANGED