option 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Option
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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.0
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: &70245506984360 !ruby/object:Gem::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: *70245506984360
24
+ version_requirements: *70313911617980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70245506983860 !ruby/object:Gem::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: *70245506983860
35
+ version_requirements: *70313911617480
36
36
  description: Ruby port of Scala's Option Monad
37
37
  email:
38
38
  - rob.ares@gmail.com