bubot 0.0.7 → 0.0.8
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 +4 -4
- data/README.md +49 -9
- data/Rakefile +4 -0
- data/bubot.gemspec +2 -0
- data/lib/bubot.rb +33 -30
- data/lib/bubot/version.rb +1 -1
- data/spec/bubot_spec.rb +13 -13
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8764e8dfff1268e2c54d7248d67d3ef8d6ad96ff
|
4
|
+
data.tar.gz: a928121e7306a845b1cc17b3ea3f676163047f94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6fde114e83d818bfe1d267fbae30dc55cfebf60b21b1833f722015aa4c76a775c48089d8c7d0def03ea94ce4646b8f9b9494a786c2876ccdfc73683d505a38b
|
7
|
+
data.tar.gz: 62d5d55a37d2653d7ea238e6a418bf6c2421a817c4f56d466b46e4541fc2190fad3763302e86aec833c94b7b1ec6357f0dbf88ad0e07b0da20b75542dc9878b6
|
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# Bubot
|
2
2
|
|
3
|
-
|
3
|
+
Watch a method. If it takes longer than a specified amount of time,
|
4
|
+
execute a block. It's a callback that only happens after a threshold.
|
5
|
+
|
6
|
+
## Requirements
|
7
|
+
|
8
|
+
ruby > 2.0.0
|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
@@ -20,18 +25,53 @@ Or install it yourself as:
|
|
20
25
|
|
21
26
|
Extend Bubot in your class.
|
22
27
|
|
23
|
-
This gives you the class method `.watch(:method_name,
|
28
|
+
This gives you the class method `.watch(:method_name, options)`.
|
29
|
+
|
30
|
+
If a watched method takes longer than options[:timeout], the block will execute.
|
31
|
+
Remember, the timeout is 0 by default so if you don't pass it a timeout, the
|
32
|
+
block will always execute (like a callback)
|
33
|
+
|
34
|
+
### Example
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
class WebAPI
|
38
|
+
include Bubot
|
39
|
+
|
40
|
+
watch(:response, timeout: 2) do |web_api_object, time_it_took, method_response|
|
41
|
+
puts web_api_object # => web_api_object instance
|
42
|
+
puts time_it_took # => 3.5 (seconds)
|
43
|
+
puts method_response # => "body"
|
44
|
+
end
|
24
45
|
|
25
|
-
|
46
|
+
def response
|
47
|
+
sleep 3
|
48
|
+
"body"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
You can also pass any object that responds to `call` by using the `:with`
|
54
|
+
option.
|
26
55
|
|
27
56
|
```ruby
|
28
|
-
class
|
29
|
-
|
57
|
+
class LoggingStrategy
|
58
|
+
|
59
|
+
def self.call(web_api_object, time_it_took, method_response)
|
60
|
+
puts web_api_object # => web_api_object instance
|
61
|
+
puts time_it_took # => 5.2 (seconds)
|
62
|
+
puts method_response # => "body"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
class WebAPI
|
68
|
+
include Bubot
|
30
69
|
|
31
|
-
|
70
|
+
watch :response, timeout: 3, with: LoggingStrategy
|
32
71
|
|
33
|
-
|
34
|
-
|
35
|
-
|
72
|
+
def response
|
73
|
+
sleep 5
|
74
|
+
"body"
|
75
|
+
end
|
36
76
|
end
|
37
77
|
```
|
data/Rakefile
CHANGED
data/bubot.gemspec
CHANGED
data/lib/bubot.rb
CHANGED
@@ -1,48 +1,51 @@
|
|
1
1
|
require "bubot/version"
|
2
|
+
require "active_support/concern"
|
3
|
+
require "active_support/callbacks"
|
4
|
+
require "active_support/core_ext/module/aliasing"
|
2
5
|
|
3
6
|
module Bubot
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include ActiveSupport::Callbacks
|
4
9
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
define_method("#{method_name}_with_feature") do |*args, &block|
|
9
|
-
start_time = Time.now
|
10
|
+
module ClassMethods
|
11
|
+
def watch(method_name, timeout: 0, with: nil, &block)
|
12
|
+
define_callbacks method_name
|
10
13
|
|
11
|
-
|
14
|
+
past_time_block = with || (block if block_given?)
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
yield(self, total_time, method_return_value)
|
16
|
+
define_method("#{method_name}_with_bubot") do |*args, &block|
|
17
|
+
run_callbacks method_name do
|
18
|
+
send("#{method_name}_without_bubot".to_sym, *args, &block)
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
-
end
|
22
|
+
alias_method_chain_or_register_for_chaining method_name
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
set_callback method_name, :around, ->(r, &block) do
|
25
|
+
start_time = Time.now
|
26
26
|
|
27
|
-
|
27
|
+
method_return_value = block.call
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
(@method_names ||= []).push(method_name)
|
29
|
+
if (total_time = Time.now - start_time) >= timeout
|
30
|
+
past_time_block.call(self, total_time, method_return_value)
|
31
|
+
end
|
32
|
+
end
|
34
33
|
end
|
35
|
-
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
private
|
36
|
+
|
37
|
+
def alias_method_chain_or_register_for_chaining(method_name)
|
38
|
+
if method_defined?(method_name)
|
39
|
+
alias_method_chain(method_name, :bubot)
|
40
|
+
else
|
41
|
+
(@method_names ||= []).push(method_name)
|
42
|
+
end
|
40
43
|
end
|
41
|
-
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
45
|
+
def method_added(method_name)
|
46
|
+
if (@method_names ||= []).delete(method_name)
|
47
|
+
alias_method_chain(method_name, :bubot)
|
48
|
+
end
|
49
|
+
end
|
46
50
|
end
|
47
|
-
|
48
51
|
end
|
data/lib/bubot/version.rb
CHANGED
data/spec/bubot_spec.rb
CHANGED
@@ -12,7 +12,7 @@ end
|
|
12
12
|
|
13
13
|
class Qux
|
14
14
|
include Foo
|
15
|
-
|
15
|
+
include Bubot
|
16
16
|
|
17
17
|
watch :not_too_slow, timeout: 0.005 do
|
18
18
|
Baz.buz
|
@@ -39,7 +39,7 @@ describe Bubot do
|
|
39
39
|
|
40
40
|
it "watch is before the method" do
|
41
41
|
class Before
|
42
|
-
|
42
|
+
include Bubot
|
43
43
|
watch(:next_method, timeout: 0.001) { Baz.buz }
|
44
44
|
def next_method; sleep 0.002; end
|
45
45
|
end
|
@@ -50,7 +50,7 @@ describe Bubot do
|
|
50
50
|
|
51
51
|
it "watch is after the method" do
|
52
52
|
class After
|
53
|
-
|
53
|
+
include Bubot
|
54
54
|
def previous_method; sleep 0.002; end
|
55
55
|
watch(:previous_method, timeout: 0.001) { Baz.buz }
|
56
56
|
end
|
@@ -63,7 +63,7 @@ describe Bubot do
|
|
63
63
|
context "timeout is optional" do
|
64
64
|
it "timeout is not passed" do
|
65
65
|
class NoTimeout
|
66
|
-
|
66
|
+
include Bubot
|
67
67
|
watch(:without_timeout) { Baz.buz }
|
68
68
|
def without_timeout() end
|
69
69
|
end
|
@@ -77,7 +77,7 @@ describe Bubot do
|
|
77
77
|
it "does nothing and does not break" do
|
78
78
|
expect do
|
79
79
|
class MethodDoesNotExist
|
80
|
-
|
80
|
+
include Bubot
|
81
81
|
watch(:dont_exist, timeout: 0.001) { Baz.buz }
|
82
82
|
end
|
83
83
|
end.not_to raise_error
|
@@ -93,7 +93,7 @@ describe Bubot do
|
|
93
93
|
end
|
94
94
|
|
95
95
|
class PassesSelf
|
96
|
-
|
96
|
+
include Bubot
|
97
97
|
watch(:pass_self, timeout: 0.001) do |instance|
|
98
98
|
ReceivesSelfStrategy.execute(instance)
|
99
99
|
end
|
@@ -114,7 +114,7 @@ describe Bubot do
|
|
114
114
|
end
|
115
115
|
|
116
116
|
class PassesTime
|
117
|
-
|
117
|
+
include Bubot
|
118
118
|
watch(:pass_time, timeout: 0.001) do |instance, time|
|
119
119
|
ReceivesTimeStrategy.execute(instance, time)
|
120
120
|
end
|
@@ -138,7 +138,7 @@ describe Bubot do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
class PassesReturnValue
|
141
|
-
|
141
|
+
include Bubot
|
142
142
|
watch(:pass_return_value, timeout: 0.001) do |instance, time, return_value|
|
143
143
|
ReceivesReturnValueStrategy.execute(instance, time, return_value)
|
144
144
|
end
|
@@ -169,7 +169,7 @@ describe Bubot do
|
|
169
169
|
end
|
170
170
|
|
171
171
|
class UsingWith
|
172
|
-
|
172
|
+
include Bubot
|
173
173
|
|
174
174
|
watch :original, with: RespondingStrategy
|
175
175
|
|
@@ -191,7 +191,7 @@ describe Bubot do
|
|
191
191
|
describe "the original method" do
|
192
192
|
it "redefines the method to return the original value" do
|
193
193
|
class OriginalMethod
|
194
|
-
|
194
|
+
include Bubot
|
195
195
|
|
196
196
|
watch :original do
|
197
197
|
#something
|
@@ -209,7 +209,7 @@ describe Bubot do
|
|
209
209
|
|
210
210
|
it "accepts the original methods arguments" do
|
211
211
|
class OriginalArguments
|
212
|
-
|
212
|
+
include Bubot
|
213
213
|
|
214
214
|
watch :arguments do
|
215
215
|
#something
|
@@ -221,14 +221,14 @@ describe Bubot do
|
|
221
221
|
end
|
222
222
|
|
223
223
|
original_class = OriginalArguments.new
|
224
|
-
expect(original_class).to receive(:
|
224
|
+
expect(original_class).to receive(:arguments_without_bubot).with("foo", "bar")
|
225
225
|
original_class.arguments('foo', 'bar')
|
226
226
|
|
227
227
|
end
|
228
228
|
|
229
229
|
it "accepts the original methods block" do
|
230
230
|
class OriginalBlock
|
231
|
-
|
231
|
+
include Bubot
|
232
232
|
|
233
233
|
watch :with_block do
|
234
234
|
#something
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bubot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Micah Cooper
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: activesupport
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
70
84
|
description: Take action when methods take too long
|
71
85
|
email:
|
72
86
|
- mrmicahcooper@gmail.com
|
@@ -107,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
121
|
version: '0'
|
108
122
|
requirements: []
|
109
123
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.1.11
|
111
125
|
signing_key:
|
112
126
|
specification_version: 4
|
113
127
|
summary: Take action when methods take too long
|