option 0.1.0 → 0.1.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.
- data/README.md +3 -0
- data/lib/option.rb +9 -1
- data/lib/option/version.rb +1 -1
- data/spec/option_spec.rb +12 -0
- metadata +5 -5
data/README.md
CHANGED
@@ -51,6 +51,9 @@ foo.map { |v| v * 2 }.map { |v| v.upcase }.get_or_else { "missing" } #=> BARBAR
|
|
51
51
|
|
52
52
|
# attempt to extract a value but default if None
|
53
53
|
None.fold(-> { "missing" }) { |v| v.upcase } #=> missing
|
54
|
+
|
55
|
+
# filter values returning an option
|
56
|
+
foo.filter { |v| v == "baz" } #=> None
|
54
57
|
```
|
55
58
|
|
56
59
|
## Build Status
|
data/lib/option.rb
CHANGED
@@ -52,7 +52,7 @@ class SomeClass < OptionClass
|
|
52
52
|
result = blk.call(get)
|
53
53
|
case result
|
54
54
|
when OptionClass then return result
|
55
|
-
else raise TypeError, "Must be Option"
|
55
|
+
else raise TypeError, "Must be an Option"
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -63,6 +63,10 @@ class SomeClass < OptionClass
|
|
63
63
|
def exists?(&blk)
|
64
64
|
!! blk.call(get)
|
65
65
|
end
|
66
|
+
|
67
|
+
def filter(&blk)
|
68
|
+
exists?(&blk) ? self : None
|
69
|
+
end
|
66
70
|
end
|
67
71
|
|
68
72
|
class NoneClass < OptionClass
|
@@ -110,6 +114,10 @@ class NoneClass < OptionClass
|
|
110
114
|
def exists?(&blk)
|
111
115
|
false
|
112
116
|
end
|
117
|
+
|
118
|
+
def filter(&blk)
|
119
|
+
self
|
120
|
+
end
|
113
121
|
end
|
114
122
|
|
115
123
|
None = NoneClass.new
|
data/lib/option/version.rb
CHANGED
data/spec/option_spec.rb
CHANGED
@@ -56,6 +56,14 @@ describe NoneClass do
|
|
56
56
|
None.fold(proc { value }) { |v| v.to_f }.must_equal(value)
|
57
57
|
end
|
58
58
|
|
59
|
+
it "#filter with a true predicate returns itself" do
|
60
|
+
Option(value).filter { |i| i == 12 }.must_equal(Option(value))
|
61
|
+
end
|
62
|
+
|
63
|
+
it "#filter with a false predicate returns None" do
|
64
|
+
Option(value).filter { |i| i == 1 }.must_equal(None)
|
65
|
+
end
|
66
|
+
|
59
67
|
it "should be aliased to None" do
|
60
68
|
None.must_be_instance_of(NoneClass)
|
61
69
|
end
|
@@ -129,6 +137,10 @@ describe SomeClass do
|
|
129
137
|
Some(value).fold(proc { value * 2 }) { |v| v * 3 }.must_equal(36)
|
130
138
|
end
|
131
139
|
|
140
|
+
it "#filter should return itself" do
|
141
|
+
None.filter { |i| i == 0 }.must_equal(None)
|
142
|
+
end
|
143
|
+
|
132
144
|
it "should wrap the creation of a Some" do
|
133
145
|
Some(value).must_be_instance_of(SomeClass)
|
134
146
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: option
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-09-15 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70313911617980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70313911617980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &70313911617480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 3.4.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70313911617480
|
36
36
|
description: Ruby port of Scala's Option Monad
|
37
37
|
email:
|
38
38
|
- rob.ares@gmail.com
|