method_callbacks 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c458557e297aaf3c9665fbcb7019ea0f33bfce2
4
- data.tar.gz: 59d48ddf065fc2e56169b446a9a37cc5251d455b
3
+ metadata.gz: 19ee03dc720d25d9e1e326ac91e9718dd9e01272
4
+ data.tar.gz: f61c75e0258697e042aece4916c77c1c3de919a9
5
5
  SHA512:
6
- metadata.gz: b309cbec10a4620855225e4c468e86be6691e3f1a233672aa46c9b35665def49d8358d7d670350af72fd922beb603368e6bbc16f8e155d649a735091bb657797
7
- data.tar.gz: 97507375a55e7f4b26ff1524500bb0c75eb773b9662e9e6cab504d85427683b10248e0dd9c572e9a660dfa4aac51cb55a3461c9c911c99ae54a1051f3bd51030
6
+ metadata.gz: 593b6df610d9e64695f9fe55fa185e943217f0b56775d993880398dbc6b320e8963f6fef04b4b1b811a155ea0d977787f63cf07f8fafa32e899e7faa7200c510
7
+ data.tar.gz: 11802ed240eb4727516519fed47f1d10fc70c085ef54462eded418eb1cdbcdbc95df08c98f21c47807ed5f78246d9e4845d838eb81cdb515f64479630fb97b55
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 1.2.0 / 2014-06-12
2
+ * Add proxy_result as a type of callback
3
+ * Add proxy_result examples to the readme
4
+
1
5
  1.1.1 / 2014-06-12
2
6
  * Replace rspec nested format with documentation
3
7
 
data/README.md CHANGED
@@ -91,6 +91,33 @@ Executing farewell after action but before unload!
91
91
  Executing unload after action and farewell!
92
92
  Executing block callback after action and everything else!
93
93
  => "My return value!"
94
+
95
+ class TestProxyResult
96
+ include MethodCallbacks
97
+
98
+ def result
99
+ "hello!"
100
+ end
101
+ proxy_result(:result) { |original_result| "the original result was: #{original_result}" }
102
+
103
+ def result_with_block
104
+ "hello world!"
105
+ end
106
+ proxy_result(:result_with_block) { |original_result, &block| block.call(original_result) }
107
+
108
+ def chain_result_proxy
109
+ "original"
110
+ end
111
+ proxy_result(:chain_result_proxy) { |original_result| "original_result: #{original_result}" }
112
+ proxy_result(:chain_result_proxy) { |chained_result| "chained_result: #{chained_result}" }
113
+ end
114
+
115
+ > TestProxyResult.new.result
116
+ => "the original result was: hello!"
117
+ > TestProxyResult.new.result_with_block
118
+ => "hello world!"
119
+ > TestProxyResult.new.chain_result_proxy
120
+ => "original_result: chained_result: original"
94
121
  ```
95
122
 
96
123
  ## Contributing
@@ -8,10 +8,15 @@ module MethodCallbacks
8
8
  @object = object
9
9
  end
10
10
 
11
- def execute
12
- return execute_callbacks if !block_given?
13
-
14
- callbacks.empty? ? yield : execute_around_callbacks(&Proc.new)
11
+ def execute(&block)
12
+ case type
13
+ when :proxy
14
+ execute_proxy_callbacks(&block)
15
+ when :around
16
+ execute_around_callbacks(&block)
17
+ else
18
+ execute_callbacks
19
+ end
15
20
  end
16
21
 
17
22
  private
@@ -27,5 +32,9 @@ module MethodCallbacks
27
32
  def execute_callbacks
28
33
  callbacks.each { |callback_name| callback_name.is_a?(Proc) ? object.instance_eval(&callback_name) : object.send(callback_name) }
29
34
  end
35
+
36
+ def execute_proxy_callbacks(&block_on_call)
37
+ callbacks.reduce(object) { |result, block| block.call(result, &block_on_call) }
38
+ end
30
39
  end
31
40
  end
@@ -1,3 +1,3 @@
1
1
  module MethodCallbacks
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -16,6 +16,10 @@ module MethodCallbacks
16
16
  define(method_name, :around, callback_names)
17
17
  end
18
18
 
19
+ def proxy_result(method_name, &block)
20
+ define_with_block(method_name, :proxy, &block)
21
+ end
22
+
19
23
  def before_method(method_name, *callback_names)
20
24
  define(method_name, :before, callback_names)
21
25
  define_with_block(method_name, :before, &Proc.new) if block_given?
@@ -57,11 +61,10 @@ module MethodCallbacks
57
61
 
58
62
  method.lock! && alias_method(method.alias, method.name)
59
63
 
60
- define_method(method.name) do
64
+ define_method(method.name) do |&block|
61
65
  method.execute(:before, self)
62
- return_value = method.execute(:around, self) do
63
- send(method.alias)
64
- end
66
+ return_value = method.execute(:around, self) { send(method.alias) }
67
+ return_value = method.execute(:proxy, return_value, &block)
65
68
  method.execute(:after, self)
66
69
  return_value
67
70
  end
@@ -2,6 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe MethodCallbacks do
4
4
  let(:test_callbacks) { TestCallbacks.new }
5
+ let(:test_proxy_result) { TestProxyResult.new }
5
6
 
6
7
  it "should execute all the callbacks on action" do
7
8
  expect(test_callbacks).to receive(:puts).with("Executing block").ordered
@@ -18,6 +19,21 @@ describe MethodCallbacks do
18
19
 
19
20
  expect(test_callbacks.action).to eq("Return value")
20
21
  end
22
+
23
+ it "should proxy the result" do
24
+ expect(test_proxy_result.result).to eq("the original result was: hello!")
25
+ end
26
+
27
+ it "should proxy the result with block" do
28
+ test_string = "the original result was:"
29
+ expect(test_proxy_result.result_with_block do |result|
30
+ "#{test_string} #{result}"
31
+ end).to eq("#{test_string} hello world!")
32
+ end
33
+
34
+ it "should chain proxy results" do
35
+ expect(test_proxy_result.chain_result_proxy).to eq("chained_result: original_result: original")
36
+ end
21
37
  end
22
38
 
23
39
  class TestCallbacks
@@ -70,3 +86,23 @@ class TestCallbacks
70
86
  return_value
71
87
  end
72
88
  end
89
+
90
+ class TestProxyResult
91
+ include MethodCallbacks
92
+
93
+ def result
94
+ "hello!"
95
+ end
96
+ proxy_result(:result) { |original_result| "the original result was: #{original_result}" }
97
+
98
+ def result_with_block
99
+ "hello world!"
100
+ end
101
+ proxy_result(:result_with_block) { |original_result, &block| block.call(original_result) }
102
+
103
+ def chain_result_proxy
104
+ "original"
105
+ end
106
+ proxy_result(:chain_result_proxy) { |original_result| "original_result: #{original_result}" }
107
+ proxy_result(:chain_result_proxy) { |chained_result| "chained_result: #{chained_result}" }
108
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_callbacks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morgan Showman