direct 1.2.0 → 1.2.1

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
  SHA256:
3
- metadata.gz: b177e702ac1b7caafa4430f8e552336d07997d7ecdb0cc7eb21eda814c5b10a1
4
- data.tar.gz: 8236f43a4a784720af82eab4b5cbaea76182373cf329a2162001086fa3c8fc64
3
+ metadata.gz: 20440d5b3580056507598e8506d9a6e8e26623601dc07ed6cfc443ee2e4dee04
4
+ data.tar.gz: 981844bd5ede5b4b889ed19ee5ca16cc2c6cdcaa898f166bc3e3132d8034e962
5
5
  SHA512:
6
- metadata.gz: a065bf3c181084b8fe3418af13dd9b7ea096bd7cb8e6b717e3264457271021591d4bff17eae4e9bb3bb69a4acc4f2304c262a670b77cf69b08d16834ba458e39
7
- data.tar.gz: 4fe6b632e7c6d6b7204af70efd1cd5e00b53d86a19d5e0cc03f59023bbb9b1c52205693ade062cd3e5a51d2a1eb28c0776d5bb20f77da2d9115f58d74201c63d
6
+ metadata.gz: d7207fd5bd4c1447f4686deff93bddd8d9802722accaa37118979afd0fc46afe75f616a73ffa24628ccfb111c3121ff92319346484c914931f753cce4102059f
7
+ data.tar.gz: 628cd5d0416be38cdfe79a7a50473c0b59944af35d3b6c01264562dfc0d7f11287d13908ef1c63d9ddc30f870aefdf1a8327c38765c3e246aea7db9d8c28aa8c
@@ -1,3 +1,7 @@
1
+ ## Version 1.2.1
2
+
3
+ Provide an 'object:' to a Direct.defer or Direct.strict_defer to be sent as the third parameter in the executed blocks.
4
+
1
5
  ## Version 1.2.0
2
6
 
3
7
  Provide a Direct.defer and Direct.strict_defer to allow deferring blocks without success and failure procedures.
@@ -68,8 +68,8 @@ module Direct
68
68
  # end
69
69
  # do_it.value
70
70
  #
71
- def self.defer(&block)
72
- Executable.new(&block)
71
+ def self.defer(*args, object: nil, &block)
72
+ Executable.new(*args, object: object, &block)
73
73
  end
74
74
 
75
75
  # Tell the object what to do in a given scenario.
@@ -16,11 +16,36 @@ module Direct
16
16
  #
17
17
  # Direct.defer(->{ "call me, maybe" })
18
18
  #
19
- def initialize(callable=nil, &block)
19
+ # You may also provide an 'object:' parameter which will be
20
+ # passed to the provided blocks when they are ultimately executed
21
+ #
22
+ # Example:
23
+ #
24
+ # Direct.defer(object: self) do
25
+ # # do work here
26
+ # end.success {|deferred, deferred_block_result, object|
27
+ # # you have access to the provided object here
28
+ # }
29
+ #
30
+ # The object is a useful reference because the Executable instance
31
+ # is the deferred object, instead of the object using Direct.defer
32
+ #
33
+ # class Thing
34
+ # def do_something
35
+ # Direct.defer(object: self){ do_the_work }
36
+ # end
37
+ # end
38
+ #
39
+ # Thing.new.do_something.success {|deferred, result, thing|
40
+ # puts "The #{thing} did something!"
41
+ # }.execute
42
+ #
43
+ def initialize(callable=nil, object: nil, &block)
44
+ @object = object
20
45
  @execution = callable || block
21
46
  @exception_classes = [StandardError]
22
47
  end
23
- attr_reader :execution, :exception_classes
48
+ attr_reader :execution, :exception_classes, :object
24
49
 
25
50
  # Tell the object what to do for a success path
26
51
  #
@@ -51,7 +76,7 @@ module Direct
51
76
  #
52
77
  # Direct.defer {
53
78
  # # something...
54
- # }.exception(NoMethodError) { |deferred, exception|
79
+ # }.exception(NoMethodError) { |deferred, exception, object|
55
80
  # ExceptionNotifier.notify(exception)
56
81
  # }
57
82
  #
@@ -65,9 +90,9 @@ module Direct
65
90
 
66
91
  def run_exception_block(exception)
67
92
  if __directions.key?(:exception)
68
- as_directed(:exception, exception)
93
+ as_directed(:exception, exception, object)
69
94
  else
70
- as_directed(:failure, exception)
95
+ as_directed(:failure, exception, object)
71
96
  end
72
97
  end
73
98
  private :run_exception_block
@@ -79,9 +104,9 @@ module Direct
79
104
  def value
80
105
  result = execution.()
81
106
  if result
82
- as_directed(:success, result)
107
+ as_directed(:success, result, object)
83
108
  else
84
- as_directed(:failure, result)
109
+ as_directed(:failure, result, object)
85
110
  end
86
111
  rescue *exception_classes => exception
87
112
  run_exception_block(exception)
@@ -16,11 +16,38 @@ module Direct
16
16
  #
17
17
  # Direct.strict_defer(->{ "call me, maybe" })
18
18
  #
19
- def initialize(callable=nil, &block)
19
+ # You may also provide an 'object:' parameter which will be
20
+ # passed to the provided blocks when they are ultimately executed
21
+ #
22
+ # Example:
23
+ #
24
+ # Direct.strict_defer(object: self) do
25
+ # # do work here
26
+ # end.success {|deferred, deferred_block_result, object|
27
+ # # you have access to the provided object here
28
+ # }
29
+ #
30
+ # The object is a useful reference because the Executable instance
31
+ # is the deferred object, instead of the object using Direct.strict_defer
32
+ #
33
+ # class Thing
34
+ # def do_something
35
+ # Direct.strict_defer(object: self){ do_the_work }
36
+ # end
37
+ # end
38
+ #
39
+ # Thing.new.do_something.success {|deferred, result, thing|
40
+ # puts "The #{thing} did something!"
41
+ # }.failure{|_,_,thing|
42
+ # puts "#{thing} failed!"
43
+ # }.execute
44
+ #
45
+ def initialize(callable=nil, object: nil, &block)
46
+ @object = object
20
47
  @execution = callable || block
21
48
  @exception_classes = [StandardError]
22
49
  end
23
- attr_reader :execution, :exception_classes
50
+ attr_reader :execution, :exception_classes, :object
24
51
 
25
52
  # Tell the object what to do for a success path
26
53
  #
@@ -51,7 +78,7 @@ module Direct
51
78
  #
52
79
  # Direct.strict_defer {
53
80
  # # something...
54
- # }.exception(NoMethodError) { |deferred, exception|
81
+ # }.exception(NoMethodError) { |deferred, exception, object|
55
82
  # ExceptionNotifier.notify(exception)
56
83
  # }
57
84
  #
@@ -65,9 +92,9 @@ module Direct
65
92
 
66
93
  def run_exception_block(exception)
67
94
  if __directions.key?(:exception)
68
- as_directed(:exception, exception)
95
+ as_directed(:exception, exception, object)
69
96
  else
70
- as_directed(:failure, exception)
97
+ as_directed(:failure, exception, object)
71
98
  end
72
99
  end
73
100
  private :run_exception_block
@@ -1,3 +1,3 @@
1
1
  module Direct
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: direct
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Gay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-05 00:00:00.000000000 Z
11
+ date: 2019-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby