deterministic 0.15.0 → 0.15.1
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/README.md +33 -0
- data/lib/deterministic/result.rb +13 -1
- data/lib/deterministic/version.rb +1 -1
- data/spec/examples/controller_spec.rb +1 -1
- data/spec/lib/deterministic/currify_spec.rb +0 -3
- data/spec/lib/deterministic/result_spec.rb +6 -0
- data/spec/readme_spec.rb +47 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d83f1708bbf0ddcf6cf2278121003fdcce3a5fcb
|
|
4
|
+
data.tar.gz: 3c58bb6bf5fa3bf36216c66a8e34e254bf1984f7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 82670f74e7a792e4d2fb45616d8d475f972cee51227290390d4425b712f038e08c3795104dc1f15dae75840d0785a6b26c8fb26c32e98a412fd61ebf6b0ffda7
|
|
7
|
+
data.tar.gz: 85142539d1a67926483429d55139f586415a5c0de5ffa67626877929cecaa7f223041e70f78a51e1bc8a3907df65d261e2ab382cadc50b13f4ac19f1a99efc6b
|
data/README.md
CHANGED
|
@@ -106,6 +106,15 @@ Failure(1).or_else { |n| Success(n)} # => Success(1)
|
|
|
106
106
|
|
|
107
107
|
Executes the block passed, but completely ignores its result. If an error is raised within the block it will **NOT** be catched.
|
|
108
108
|
|
|
109
|
+
Try failable operations to return `Success` or `Failure`
|
|
110
|
+
|
|
111
|
+
```ruby
|
|
112
|
+
include Deterministic::Prelude::Result
|
|
113
|
+
|
|
114
|
+
try! { 1 } # => Success(1)
|
|
115
|
+
try! { raise "hell" } # => Failure(#<RuntimeError: hell>)
|
|
116
|
+
```
|
|
117
|
+
|
|
109
118
|
### Result Chaining
|
|
110
119
|
|
|
111
120
|
You can easily chain the execution of several operations. Here we got some nice function composition.
|
|
@@ -390,6 +399,30 @@ Threenum::Unary(5).match {
|
|
|
390
399
|
} # => 5
|
|
391
400
|
```
|
|
392
401
|
|
|
402
|
+
Implementing methods for enums
|
|
403
|
+
|
|
404
|
+
```ruby
|
|
405
|
+
Deterministic::impl(Threenum) {
|
|
406
|
+
def sum
|
|
407
|
+
match {
|
|
408
|
+
Nullary() { 0 }
|
|
409
|
+
Unary(u) { u }
|
|
410
|
+
Binary(a, b) { a + b }
|
|
411
|
+
}
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
def +(other)
|
|
415
|
+
match {
|
|
416
|
+
Nullary() { other.sum }
|
|
417
|
+
Unary(a) { |this| this.sum + other.sum }
|
|
418
|
+
Binary(a, b) { |this| this.sum + other.sum }
|
|
419
|
+
}
|
|
420
|
+
end
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
Threenum.Nullary + Threenum.Unary(1) # => Unary(1)
|
|
424
|
+
```
|
|
425
|
+
|
|
393
426
|
All matches must be exhaustive, i.e. cover all variants
|
|
394
427
|
|
|
395
428
|
## Maybe
|
data/lib/deterministic/result.rb
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
|
|
2
1
|
module Deterministic
|
|
3
2
|
Result = Deterministic::enum {
|
|
4
3
|
Success(:s)
|
|
5
4
|
Failure(:f)
|
|
6
5
|
}
|
|
7
6
|
|
|
7
|
+
class Result
|
|
8
|
+
class << self
|
|
9
|
+
def try!
|
|
10
|
+
begin
|
|
11
|
+
Success.new(yield)
|
|
12
|
+
rescue => err
|
|
13
|
+
Failure.new(err)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
8
19
|
Deterministic::impl(Result) {
|
|
9
20
|
def map(proc=nil, &block)
|
|
10
21
|
match {
|
|
@@ -71,6 +82,7 @@ end
|
|
|
71
82
|
module Deterministic
|
|
72
83
|
module Prelude
|
|
73
84
|
module Result
|
|
85
|
+
def try!(&block); Deterministic::Result.try!(&block); end
|
|
74
86
|
def Success(s); Deterministic::Result::Success.new(s); end
|
|
75
87
|
def Failure(f); Deterministic::Result::Failure.new(f); end
|
|
76
88
|
end
|
|
@@ -53,12 +53,10 @@ class Booking
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def validate(id)
|
|
56
|
-
p [:validate, id]
|
|
57
56
|
Success(id)
|
|
58
57
|
end
|
|
59
58
|
|
|
60
59
|
def req(a, id)
|
|
61
|
-
p [:req, a, id]
|
|
62
60
|
Success(id: id + a)
|
|
63
61
|
end
|
|
64
62
|
|
|
@@ -81,7 +79,6 @@ describe "Pref" do
|
|
|
81
79
|
b = Booking.new(1)
|
|
82
80
|
actual = b.validate(1) >> b.req(2) >> b.find >> b.render(:html)
|
|
83
81
|
|
|
84
|
-
p [:actual, actual]
|
|
85
82
|
expected = Deterministic::Result::Success.new("rendered in html: {:id=>3}")
|
|
86
83
|
expect(actual).to eq expected
|
|
87
84
|
end
|
|
@@ -49,4 +49,10 @@ describe Deterministic::Result do
|
|
|
49
49
|
specify { expect(subject.and(Failure(2))).to eq Failure(2)}
|
|
50
50
|
specify { expect(subject.and_then { Success(2) }).to eq Success(2)}
|
|
51
51
|
specify { expect(subject.and_then { Failure(2) }).to eq Failure(2)}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
it "try!" do
|
|
55
|
+
expect(described_class.try! { 1 }).to eq Success(1)
|
|
56
|
+
expect(described_class.try! { raise "error" }.inspect).to eq Failure(RuntimeError.new("error")).inspect
|
|
57
|
+
end
|
|
52
58
|
end
|
data/spec/readme_spec.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
include Deterministic::Prelude::Result
|
|
4
|
+
|
|
5
|
+
Success(1).to_s # => "1"
|
|
6
|
+
Success(Success(1)) # => Success(1)
|
|
7
|
+
|
|
8
|
+
Failure(1).to_s # => "1"
|
|
9
|
+
Failure(Failure(1)) # => Failure(1)
|
|
10
|
+
|
|
11
|
+
Success(1).fmap { |v| v + 1} # => Success(2)
|
|
12
|
+
Failure(1).fmap { |v| v - 1} # => Failure(0)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Threenum = Deterministic::enum {
|
|
16
|
+
Nullary()
|
|
17
|
+
Unary(:a)
|
|
18
|
+
Binary(:a, :b)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Deterministic::impl(Threenum) {
|
|
22
|
+
def sum
|
|
23
|
+
|
|
24
|
+
match {
|
|
25
|
+
Nullary() { 0 }
|
|
26
|
+
Unary(u) { u }
|
|
27
|
+
Binary(a, b) { a + b }
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def +(other)
|
|
32
|
+
match {
|
|
33
|
+
Nullary() { other.sum }
|
|
34
|
+
Unary(a) { |this| this.sum + other.sum }
|
|
35
|
+
Binary(a, b) { |this| this.sum + other.sum }
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
describe Threenum do
|
|
41
|
+
it "works" do
|
|
42
|
+
expect(Threenum.Nullary + Threenum.Unary(1)).to eq 1
|
|
43
|
+
expect(Threenum.Nullary + Threenum.Binary(2, 3)).to eq 5
|
|
44
|
+
expect(Threenum.Unary(1) + Threenum.Binary(2, 3)).to eq 6
|
|
45
|
+
expect(Threenum.Binary(2, 3) + Threenum.Binary(2, 3)).to eq 10
|
|
46
|
+
end
|
|
47
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: deterministic
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.15.
|
|
4
|
+
version: 0.15.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Piotr Zolnierek
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-
|
|
11
|
+
date: 2014-12-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -160,6 +160,7 @@ files:
|
|
|
160
160
|
- spec/lib/deterministic/result/success_spec.rb
|
|
161
161
|
- spec/lib/deterministic/result_spec.rb
|
|
162
162
|
- spec/lib/enum_spec.rb
|
|
163
|
+
- spec/readme_spec.rb
|
|
163
164
|
- spec/spec_helper.rb
|
|
164
165
|
homepage: http://github.com/pzol/deterministic
|
|
165
166
|
licenses:
|
|
@@ -210,4 +211,5 @@ test_files:
|
|
|
210
211
|
- spec/lib/deterministic/result/success_spec.rb
|
|
211
212
|
- spec/lib/deterministic/result_spec.rb
|
|
212
213
|
- spec/lib/enum_spec.rb
|
|
214
|
+
- spec/readme_spec.rb
|
|
213
215
|
- spec/spec_helper.rb
|