direct 1.1.1 → 1.2.0
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/CHANGELOG.md +4 -0
- data/lib/direct.rb +27 -6
- data/lib/direct/executable.rb +1 -1
- data/lib/direct/strict_executable.rb +91 -0
- data/lib/direct/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b177e702ac1b7caafa4430f8e552336d07997d7ecdb0cc7eb21eda814c5b10a1
|
|
4
|
+
data.tar.gz: 8236f43a4a784720af82eab4b5cbaea76182373cf329a2162001086fa3c8fc64
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a065bf3c181084b8fe3418af13dd9b7ea096bd7cb8e6b717e3264457271021591d4bff17eae4e9bb3bb69a4acc4f2304c262a670b77cf69b08d16834ba458e39
|
|
7
|
+
data.tar.gz: 4fe6b632e7c6d6b7204af70efd1cd5e00b53d86a19d5e0cc03f59023bbb9b1c52205693ade062cd3e5a51d2a1eb28c0776d5bb20f77da2d9115f58d74201c63d
|
data/CHANGELOG.md
CHANGED
data/lib/direct.rb
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
require "direct/version"
|
|
2
|
-
require "direct/executable"
|
|
3
|
-
require "direct/group"
|
|
4
|
-
|
|
5
2
|
# Include this module in your classes to provide a way for
|
|
6
3
|
# your objects to handle named scenarios with blocks of code.
|
|
7
4
|
module Direct
|
|
@@ -32,20 +29,44 @@ module Direct
|
|
|
32
29
|
def self.allow_missing_directions
|
|
33
30
|
AllowMissing
|
|
34
31
|
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
require "direct/executable"
|
|
35
|
+
require "direct/strict_executable"
|
|
36
|
+
require "direct/group"
|
|
35
37
|
|
|
38
|
+
module Direct
|
|
36
39
|
# Wrap a block of code to return an object for handling
|
|
37
|
-
# success or failure.
|
|
40
|
+
# success or failure. Raises exceptions when directions
|
|
41
|
+
# are not provided
|
|
38
42
|
#
|
|
39
43
|
# Example:
|
|
40
44
|
#
|
|
41
45
|
# def do_it
|
|
42
|
-
# Direct.
|
|
46
|
+
# Direct.strict_defer{
|
|
43
47
|
# [true, false].sample
|
|
44
48
|
# }
|
|
45
49
|
# end
|
|
46
50
|
# do_it.
|
|
47
51
|
# success{|result| puts "it worked!" }.
|
|
48
|
-
# failure{|result| puts "it failed!" }
|
|
52
|
+
# failure{|result| puts "it failed!" }.
|
|
53
|
+
# value
|
|
54
|
+
#
|
|
55
|
+
def self.strict_defer(&block)
|
|
56
|
+
StrictExecutable.new(&block)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Wrap a block of code to return an object for handling
|
|
60
|
+
# success or failure.
|
|
61
|
+
#
|
|
62
|
+
# Example:
|
|
63
|
+
#
|
|
64
|
+
# def do_it
|
|
65
|
+
# Direct.defer{
|
|
66
|
+
# [true, false].sample
|
|
67
|
+
# }
|
|
68
|
+
# end
|
|
69
|
+
# do_it.value
|
|
49
70
|
#
|
|
50
71
|
def self.defer(&block)
|
|
51
72
|
Executable.new(&block)
|
data/lib/direct/executable.rb
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module Direct
|
|
2
|
+
class StrictExecutable
|
|
3
|
+
include Direct
|
|
4
|
+
|
|
5
|
+
# It is intended that you initialize objects via Direct.strict_defer
|
|
6
|
+
# and not directly initializing this class.
|
|
7
|
+
#
|
|
8
|
+
# You may initialize this class and provide an object which
|
|
9
|
+
# responds to "call" or a block to execute.
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
#
|
|
13
|
+
# Direct.strict_defer do
|
|
14
|
+
# puts "see ya later!"
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# Direct.strict_defer(->{ "call me, maybe" })
|
|
18
|
+
#
|
|
19
|
+
def initialize(callable=nil, &block)
|
|
20
|
+
@execution = callable || block
|
|
21
|
+
@exception_classes = [StandardError]
|
|
22
|
+
end
|
|
23
|
+
attr_reader :execution, :exception_classes
|
|
24
|
+
|
|
25
|
+
# Tell the object what to do for a success path
|
|
26
|
+
#
|
|
27
|
+
# Returns itself
|
|
28
|
+
#
|
|
29
|
+
def success(callable=nil, &block)
|
|
30
|
+
direct(:success, (callable || block))
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Tell the object what to do for a failure path
|
|
35
|
+
#
|
|
36
|
+
# Returns itself
|
|
37
|
+
#
|
|
38
|
+
def failure(callable=nil, &block)
|
|
39
|
+
direct(:failure, (callable || block))
|
|
40
|
+
self
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Tell the object what to do for an exception path.
|
|
44
|
+
#
|
|
45
|
+
# You may optionally provide a list of modules rescued by
|
|
46
|
+
# the value method in the case of an exception.
|
|
47
|
+
#
|
|
48
|
+
# Returns itself
|
|
49
|
+
#
|
|
50
|
+
# Example:
|
|
51
|
+
#
|
|
52
|
+
# Direct.strict_defer {
|
|
53
|
+
# # something...
|
|
54
|
+
# }.exception(NoMethodError) { |deferred, exception|
|
|
55
|
+
# ExceptionNotifier.notify(exception)
|
|
56
|
+
# }
|
|
57
|
+
#
|
|
58
|
+
def exception(*classes, &block)
|
|
59
|
+
unless classes.empty?
|
|
60
|
+
@exception_classes = classes
|
|
61
|
+
end
|
|
62
|
+
direct(:exception, block)
|
|
63
|
+
self
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def run_exception_block(exception)
|
|
67
|
+
if __directions.key?(:exception)
|
|
68
|
+
as_directed(:exception, exception)
|
|
69
|
+
else
|
|
70
|
+
as_directed(:failure, exception)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
private :run_exception_block
|
|
74
|
+
|
|
75
|
+
# Return the value of the success or failure path
|
|
76
|
+
# and rescue from StandardError or from the modules
|
|
77
|
+
# provided to the exception path.
|
|
78
|
+
#
|
|
79
|
+
def value
|
|
80
|
+
result = execution.()
|
|
81
|
+
if result
|
|
82
|
+
as_directed(:success, result)
|
|
83
|
+
else
|
|
84
|
+
as_directed(:failure, result)
|
|
85
|
+
end
|
|
86
|
+
rescue *exception_classes => exception
|
|
87
|
+
run_exception_block(exception)
|
|
88
|
+
end
|
|
89
|
+
alias execute value
|
|
90
|
+
end
|
|
91
|
+
end
|
data/lib/direct/version.rb
CHANGED
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.
|
|
4
|
+
version: 1.2.0
|
|
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-
|
|
11
|
+
date: 2019-03-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -73,6 +73,7 @@ files:
|
|
|
73
73
|
- lib/direct.rb
|
|
74
74
|
- lib/direct/executable.rb
|
|
75
75
|
- lib/direct/group.rb
|
|
76
|
+
- lib/direct/strict_executable.rb
|
|
76
77
|
- lib/direct/version.rb
|
|
77
78
|
homepage: https://github.com/saturnflyer/direct
|
|
78
79
|
licenses:
|