divergent 0.1.3 → 0.1.4
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 +7 -0
- data/README.md +7 -10
- data/lib/divergent/try.rb +24 -9
- data/lib/divergent/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a97dcb4c7b94772af15a5cc9ec0d794c163a29cf
|
4
|
+
data.tar.gz: fe5ed5e4799c1f2a78421f68e88ac579ec9fb23d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8494b52fd3c7c7b5d8dc22577ebd6d25059213c3860ea798cf2527cc3c9f8e7b86dfe29c93247ddef227c130976d2ac30cca3e5bf90bc62730d008faac6c00e7
|
7
|
+
data.tar.gz: 5ba285bb235e644015c16f1dc8153f1fa3f4ee8ce6f526006b3d93fb593315ed03d2edc39667ccbbb02eb0c115cb61373ef94dc931098429dc87b33e1d413636
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -64,16 +64,13 @@ parse_url("http://google.com").filter { |url| url.scheme == "http" } #=> Succes
|
|
64
64
|
parse_url("http://google.com").filter { |url| url.scheme == "https" } #=> Failure<Predicate does not hold for http://google.com>
|
65
65
|
|
66
66
|
# recover from error
|
67
|
-
failed_url.recover
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
:others
|
75
|
-
end
|
76
|
-
end #=> Success<standard_error>
|
67
|
+
failed_url.recover(NoMethodError) { |error|
|
68
|
+
:no_method
|
69
|
+
}.recover(StandardError) { |error|
|
70
|
+
:standard_error
|
71
|
+
} #=> Success<standard_error>
|
72
|
+
|
73
|
+
Try { 1 / 0 }.recover(ZeroDivisionError, &:message)
|
77
74
|
```
|
78
75
|
|
79
76
|
|
data/lib/divergent/try.rb
CHANGED
@@ -89,11 +89,17 @@ module Divergent
|
|
89
89
|
raise NotImplementedError
|
90
90
|
end
|
91
91
|
|
92
|
-
#
|
93
|
-
#
|
92
|
+
# Recover the given error classes by applying the block,
|
93
|
+
# and leave other error case unrecoverd.
|
94
|
+
# If no class is given, recover it anyway.
|
95
|
+
# The error instance(if this is a Failure) will be passed into the block.
|
96
|
+
# Otherwise returns this if this is a `Success`.
|
94
97
|
#
|
95
98
|
# This is like `fmap` for the exception.
|
96
|
-
|
99
|
+
# @param [Array] errors
|
100
|
+
# @param [Block] blk
|
101
|
+
# @return [Try]
|
102
|
+
def recover(*errors, &block)
|
97
103
|
raise NotImplementedError
|
98
104
|
end
|
99
105
|
|
@@ -176,7 +182,7 @@ module Divergent
|
|
176
182
|
self
|
177
183
|
end
|
178
184
|
|
179
|
-
def recover(&block)
|
185
|
+
def recover(*_errors, &block)
|
180
186
|
self
|
181
187
|
end
|
182
188
|
|
@@ -250,11 +256,20 @@ module Divergent
|
|
250
256
|
end
|
251
257
|
end
|
252
258
|
|
253
|
-
def recover()
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
259
|
+
def recover(*errors)
|
260
|
+
unless errors.empty? || \
|
261
|
+
errors.any? { |clazz| @error.instance_of?(clazz) }
|
262
|
+
return self
|
263
|
+
end
|
264
|
+
|
265
|
+
raise 'no block given' unless block_given?
|
266
|
+
|
267
|
+
begin
|
268
|
+
t = yield(@error)
|
269
|
+
Success.new(t)
|
270
|
+
rescue => e
|
271
|
+
Failure.new(e)
|
272
|
+
end
|
258
273
|
end
|
259
274
|
|
260
275
|
def failed
|
data/lib/divergent/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: divergent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cao Jiafeng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".travis.yml"
|
78
|
+
- CHANGELOG.md
|
78
79
|
- Gemfile
|
79
80
|
- LICENSE.txt
|
80
81
|
- README.md
|
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.5.1
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
115
|
summary: a collection of monad implemented in ruby inspired by scala
|