hook_me_up 0.0.1 → 0.0.2

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/.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: []