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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff37a292bca66de362a47e9e898729fe25c34a0b
4
- data.tar.gz: aec83bb68755247caad71fcc7115b859df8e9197
3
+ metadata.gz: a97dcb4c7b94772af15a5cc9ec0d794c163a29cf
4
+ data.tar.gz: fe5ed5e4799c1f2a78421f68e88ac579ec9fb23d
5
5
  SHA512:
6
- metadata.gz: 3433a698019d62aed3b4a167f2669833fdd20402020d62937db2cfa2f53436b97babe4dde78b8bbc396a0afec15f5e06bd69f8eb48d4927ce310aa66c86efc44
7
- data.tar.gz: 4d6b5fce2220c9788b7a87ce151cbf7b7cf6550ebf0c387c2f0e27a22e4d351e60a9fcb031d4057139e6e6b87222a49d8c4e87c9f666297fcbbe773735bd47cb
6
+ metadata.gz: 8494b52fd3c7c7b5d8dc22577ebd6d25059213c3860ea798cf2527cc3c9f8e7b86dfe29c93247ddef227c130976d2ac30cca3e5bf90bc62730d008faac6c00e7
7
+ data.tar.gz: 5ba285bb235e644015c16f1dc8153f1fa3f4ee8ce6f526006b3d93fb593315ed03d2edc39667ccbbb02eb0c115cb61373ef94dc931098429dc87b33e1d413636
@@ -0,0 +1,7 @@
1
+ ## Divergent.rb CHANGELOG
2
+
3
+ ## v0.1.4 - 07-27-2016
4
+
5
+ - add feature: recover failures of the given error classes.
6
+
7
+
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 do |error|
68
- case error
69
- when NoMethodError
70
- :no_method
71
- when StandardError
72
- :standard_error
73
- else
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
 
@@ -89,11 +89,17 @@ module Divergent
89
89
  raise NotImplementedError
90
90
  end
91
91
 
92
- # Applies the given block if this is a `Failure`,
93
- # otherwise returns this if this is a `Success`.
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
- def recover(&block)
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
- t = yield(@error)
255
- Success.new(t)
256
- rescue => e
257
- return Failure.new(e)
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
@@ -1,3 +1,3 @@
1
1
  module Divergent
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
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.3
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-06-30 00:00:00.000000000 Z
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.4.5.1
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