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 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