hook_me_up 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1 +1,2 @@
1
1
  --color
2
+ --format nested
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.0.2
2
+
3
+ * Added options for disabling all or some of the hooks:
4
+ * :no_hook
5
+ * :no_before_hook
6
+ * :no_after_hook
7
+
1
8
  ## v0.0.1
2
9
 
3
10
  * initial release
data/README.md CHANGED
@@ -25,27 +25,40 @@ Or install it yourself as:
25
25
 
26
26
  NOTE: `hook_me_up` call **must** come after your method definitions
27
27
 
28
+ ```ruby
29
+ class SomeClass
30
+ include HookMeUp
28
31
 
29
- class SomeClass
30
- include HookMeUp
32
+ def some_method
33
+ end
31
34
 
32
- def some_method
33
- end
35
+ def some_other_method
36
+ end
34
37
 
35
- def some_other_method
36
- end
38
+ def before_hook
39
+ end
37
40
 
38
- def before_hook
39
- end
41
+ def after_hook
42
+ end
40
43
 
41
- def after_hook
42
- end
44
+ hook_me_up [:some_method, :some_other_method], :before => :before_hook, :after => :after_hook
45
+ end
46
+ ```
43
47
 
44
- hook_me_up [:some_method, :some_other_method], :before => :before_hook, :after => :after_hook
45
- end
48
+ ### Disabling hooks for a specific call
49
+ You can disable a hooks on specific calls with the following options:
50
+
51
+ * :no_hook
52
+ * :no_before_hook
53
+ * :no_after_hook
46
54
 
55
+ ```ruby
56
+ some_method(args, no_hook: true) # No hooks will be called
57
+ some_method(args, no_before_hook: true) # The before hook will be skipped
58
+ some_method(args, no_after_hook: true) # The After hook will be skipped
59
+ ```
47
60
 
48
- ###You can pass lambda to the hooks instead of methods
61
+ ### You can pass lambda to the hooks instead of methods
49
62
 
50
63
  hook_me_up :some_method, :before => lambda{ |sender, *args| sender.do_something(args) },
51
64
  :after => lambda{ |sender, *args, result| sender.do_something_else(result) }
data/hook_me_up.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.version = HookMeUp::VERSION
9
9
  gem.authors = ["Chen Fisher"]
10
10
  gem.email = ["chen.fisher@gmail.com"]
11
- gem.description = %q{Lets you hook any method class with :before and :after hooks}
11
+ gem.description = %q{Lets you hook any method with :before and :after hooks}
12
12
  gem.summary = %q{This gem lets you hook and method in any class with a before and after hooks}
13
13
  gem.homepage = ""
14
14
 
data/lib/hook_me_up.rb CHANGED
@@ -9,22 +9,45 @@ module HookMeUp
9
9
  original_method = self.instance_method(method)
10
10
 
11
11
  self.send(:define_method, method) do |*a|
12
- if hooks[:before]
13
- if hooks[:before].is_a? Proc
14
- hooks[:before].call(self, *a)
15
- else
16
- self.send(hooks[:before], *a)
12
+ options = a.last
13
+ if options.is_a?(::Hash) && options[:no_hook] == true && a.pop
14
+ result = original_method.bind(self).call(*a)
15
+ elsif options.is_a?(::Hash) && options[:no_before_hook] == true && a.pop
16
+ result = original_method.bind(self).call(*a)
17
+ if hooks[:after]
18
+ if hooks[:after].is_a? Proc
19
+ hooks[:after].call(self, *a, result)
20
+ else
21
+ self.send(hooks[:after], *a, result)
22
+ end
23
+ end
24
+ elsif options.is_a?(::Hash) && options[:no_after_hook] == true && a.pop
25
+ if hooks[:before]
26
+ if hooks[:before].is_a? Proc
27
+ hooks[:before].call(self, *a)
28
+ else
29
+ self.send(hooks[:before], *a)
30
+ end
31
+ end
32
+
33
+ result = original_method.bind(self).call(*a)
34
+ else
35
+ if hooks[:before]
36
+ if hooks[:before].is_a? Proc
37
+ hooks[:before].call(self, *a)
38
+ else
39
+ self.send(hooks[:before], *a)
40
+ end
17
41
  end
18
- end
19
-
20
- result = original_method.bind(self).call(*a)
21
42
 
43
+ result = original_method.bind(self).call(*a)
22
44
 
23
- if hooks[:after]
24
- if hooks[:after].is_a? Proc
25
- hooks[:after].call(self, *a, result)
26
- else
27
- self.send(hooks[:after], *a, result)
45
+ if hooks[:after]
46
+ if hooks[:after].is_a? Proc
47
+ hooks[:after].call(self, *a, result)
48
+ else
49
+ self.send(hooks[:after], *a, result)
50
+ end
28
51
  end
29
52
  end
30
53
 
@@ -33,7 +56,7 @@ module HookMeUp
33
56
  end
34
57
  end
35
58
  end
36
-
59
+
37
60
  module InstanceMethods
38
61
 
39
62
  end
@@ -1,3 +1,3 @@
1
1
  module HookMeUp
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,12 +2,10 @@ require 'spec_helper'
2
2
  require 'hook_me_up/sample_class'
3
3
 
4
4
  describe HookMeUp do
5
- before(:each) do
6
- @sample = SampleClass.new
7
- end
5
+ let(:sample) { SampleClass.new }
8
6
 
9
7
  it "hooks a before and after methods" do
10
- class << @sample
8
+ class << sample
11
9
  include HookMeUp
12
10
 
13
11
  hook_me_up :method_one, :before => :before_hook,
@@ -20,14 +18,14 @@ describe HookMeUp do
20
18
  end
21
19
  end
22
20
 
23
- @sample.should_receive(:before_hook).with('args')
24
- @sample.should_receive(:after_hook).with('args', 'args')
21
+ sample.should_receive(:before_hook).with('args')
22
+ sample.should_receive(:after_hook).with('args', 'args')
25
23
 
26
- @sample.method_one('args').should eq 'args'
24
+ sample.method_one('args').should eq 'args'
27
25
  end
28
26
 
29
27
  it "can receive a block as a before or after hooks" do
30
- class << @sample
28
+ class << sample
31
29
  include HookMeUp
32
30
 
33
31
  attr_accessor :before, :after
@@ -36,15 +34,15 @@ describe HookMeUp do
36
34
  :after => lambda{ |sender, *args, result| sender.after = true }
37
35
  end
38
36
 
39
- @sample.method_one('args').should eq 'args'
37
+ sample.method_one('args').should eq 'args'
40
38
 
41
- @sample.before.should eq true
42
- @sample.after.should eq true
39
+ sample.before.should eq true
40
+ sample.after.should eq true
43
41
  end
44
42
 
45
43
 
46
44
  it "can receive multiple methods to hook" do
47
- class << @sample
45
+ class << sample
48
46
  include HookMeUp
49
47
 
50
48
  attr_accessor :before, :after
@@ -54,19 +52,19 @@ describe HookMeUp do
54
52
  def before_hook(*args)
55
53
  end
56
54
 
57
- def after_hook(*args, result)
55
+ def after_hook(*args)
58
56
  end
59
57
  end
60
58
 
61
- @sample.should_receive(:before_hook).exactly(2)
62
- @sample.should_receive(:after_hook).exactly(2)
59
+ sample.should_receive(:before_hook).exactly(2)
60
+ sample.should_receive(:after_hook).exactly(2)
63
61
 
64
- @sample.method_one('args').should eq 'args'
65
- @sample.method_two.should eq 'method_two'
62
+ sample.method_one('args').should eq 'args'
63
+ sample.method_two.should eq 'method_two'
66
64
  end
67
65
 
68
66
  it "should not call before or after if not defined" do
69
- class << @sample
67
+ class << sample
70
68
  include HookMeUp
71
69
 
72
70
  hook_me_up :method_one, :before => :before_hook
@@ -78,9 +76,62 @@ describe HookMeUp do
78
76
  end
79
77
  end
80
78
 
81
- @sample.should_receive(:before_hook).with('args')
82
- @sample.should_not_receive(:after_hook)
79
+ sample.should_receive(:before_hook).with('args')
80
+ sample.should_not_receive(:after_hook)
81
+
82
+ sample.method_one('args').should eq 'args'
83
+ end
84
+
85
+ context "when disabled" do
86
+ before do
87
+ class << sample
88
+ include HookMeUp
89
+
90
+ hook_me_up :method_one, :before => :before_hook, :after => :after_hook
91
+
92
+ def before_hook(*args)
93
+ end
94
+
95
+ def after_hook(*args)
96
+ end
97
+ end
98
+ end
99
+
100
+ describe "no_hook" do
101
+ it "doesn't call before hook" do
102
+ sample.should_not_receive(:after_hook)
103
+ sample.method_one('args', no_hook: true).should eq 'args'
104
+ end
105
+
106
+ it "doesn't call after hook" do
107
+ sample.should_not_receive(:after_hook)
108
+ sample.method_one('args', no_hook: true).should eq 'args'
109
+ end
110
+ end
111
+
112
+ describe "no_before_hook" do
113
+ it "doesn't call before hook" do
114
+ sample.should_not_receive(:before_hook)
115
+ sample.method_one('args', no_before_hook: true).should eq 'args'
116
+ end
117
+
118
+ it "calls the after hook" do
119
+ sample.should_receive(:after_hook)
120
+ sample.method_one('args')
121
+ end
122
+ end
123
+
124
+ describe "no_after_hook" do
125
+ it "doesn't call after hook" do
126
+ sample.should_not_receive(:after_hook).with('args', 'args')
127
+ sample.method_one('args', no_after_hook: true).should eq 'args'
128
+ end
129
+
130
+ it "calls the before hook" do
131
+ sample.should_receive(:before_hook)
132
+ sample.method_one('args')
133
+ end
134
+ end
83
135
 
84
- @sample.method_one('args').should eq 'args'
85
136
  end
86
137
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hook_me_up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-19 00:00:00.000000000 Z
12
+ date: 2012-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,7 +27,7 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- description: Lets you hook any method class with :before and :after hooks
30
+ description: Lets you hook any method with :before and :after hooks
31
31
  email:
32
32
  - chen.fisher@gmail.com
33
33
  executables: []