option 0.4.0 → 0.5.0
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 +6 -1
- data/lib/option.rb +1 -1
- data/lib/option/version.rb +1 -1
- data/spec/acceptance_spec.rb +33 -0
- data/spec/option_spec.rb +2 -24
- data/spec/spec_helper.rb +23 -0
- metadata +10 -6
data/README.md
CHANGED
@@ -57,8 +57,13 @@ None.fold(-> { "missing" }) { |v| v.upcase } #=> missing
|
|
57
57
|
# filter values returning an option
|
58
58
|
foo.filter { |v| v == "baz" } #=> None
|
59
59
|
|
60
|
-
#
|
60
|
+
# Side-effects
|
61
61
|
foo.inside { |v| v.upcase! } #=> Some("BAR")
|
62
|
+
|
63
|
+
# use in a for loop
|
64
|
+
for value in foo
|
65
|
+
puts value #=> bar
|
66
|
+
end
|
62
67
|
```
|
63
68
|
|
64
69
|
## Build Status
|
data/lib/option.rb
CHANGED
data/lib/option/version.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
some = Some("test")
|
4
|
+
upcase = lambda { |v| Some(v.upcase) }
|
5
|
+
empty = lambda { |v| None }
|
6
|
+
|
7
|
+
describe "Option" do
|
8
|
+
|
9
|
+
describe "when applying the 3 monadic axioms" do
|
10
|
+
|
11
|
+
describe "left identity" do
|
12
|
+
|
13
|
+
it "obeys (return x) >>= f == f x" do
|
14
|
+
some.flat_map(&upcase).must_equal(upcase.call(some.get))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "right identity" do
|
19
|
+
|
20
|
+
it "obeys m >>= return == m" do
|
21
|
+
some.flat_map { |v| Some(v) }.must_equal(some)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "composition" do
|
26
|
+
|
27
|
+
it "obeys (m >>= f) >>= g == m >>= (\\x -> f x >>= g)" do
|
28
|
+
some.flat_map(&upcase).flat_map(&empty).
|
29
|
+
must_equal(some.flat_map(&empty).flat_map(&upcase))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/option_spec.rb
CHANGED
@@ -1,26 +1,4 @@
|
|
1
|
-
require "
|
2
|
-
require "minitest/pride"
|
3
|
-
require "minitest/spec"
|
4
|
-
|
5
|
-
require "option"
|
6
|
-
|
7
|
-
module MiniTest::Assertions
|
8
|
-
|
9
|
-
def assert_some(value, option, msg = nil)
|
10
|
-
assert (option.is_a?(Some) && option.or_nil == value), "Expected Some(#{value})"
|
11
|
-
end
|
12
|
-
|
13
|
-
def assert_none(value, option, msg = nil)
|
14
|
-
assert option == None, "Expected None"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
OptionClass.infect_an_assertion :assert_some, :must_be_some
|
19
|
-
OptionClass.infect_an_assertion :assert_none, :must_be_none
|
20
|
-
|
21
|
-
def value
|
22
|
-
12
|
23
|
-
end
|
1
|
+
require "spec_helper"
|
24
2
|
|
25
3
|
describe NoneClass do
|
26
4
|
|
@@ -138,7 +116,7 @@ describe SomeClass do
|
|
138
116
|
Some(value).empty?.must_equal(false)
|
139
117
|
end
|
140
118
|
|
141
|
-
it "#map should return the result of the proc over the value in
|
119
|
+
it "#map should return the result of the proc over the value in a Some" do
|
142
120
|
Some(value).map { |v| v * 2 }.must_be_some(24)
|
143
121
|
end
|
144
122
|
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "minitest/pride"
|
3
|
+
require "minitest/spec"
|
4
|
+
|
5
|
+
require "option"
|
6
|
+
|
7
|
+
module MiniTest::Assertions
|
8
|
+
|
9
|
+
def assert_some(value, option, msg = nil)
|
10
|
+
assert (option.is_a?(Some) && option.or_nil == value), "Expected Some(#{value})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def assert_none(value, option, msg = nil)
|
14
|
+
assert option == None, "Expected None"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
OptionClass.infect_an_assertion :assert_some, :must_be_some
|
19
|
+
OptionClass.infect_an_assertion :assert_none, :must_be_none
|
20
|
+
|
21
|
+
def value
|
22
|
+
12
|
23
|
+
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.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70281246888180 !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: *70281246888180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &70281246887640 !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: *70281246887640
|
36
36
|
description: Ruby port of Scala's Option Monad
|
37
37
|
email:
|
38
38
|
- rob.ares@gmail.com
|
@@ -49,7 +49,9 @@ files:
|
|
49
49
|
- lib/option.rb
|
50
50
|
- lib/option/version.rb
|
51
51
|
- option.gemspec
|
52
|
+
- spec/acceptance_spec.rb
|
52
53
|
- spec/option_spec.rb
|
54
|
+
- spec/spec_helper.rb
|
53
55
|
homepage: http://www.github.com/rares/option
|
54
56
|
licenses: []
|
55
57
|
post_install_message:
|
@@ -76,4 +78,6 @@ specification_version: 3
|
|
76
78
|
summary: Option attempts to be faithful to the useful parts of the scala api. We lose
|
77
79
|
the type safety but still is quite useful when dealing with optional values.
|
78
80
|
test_files:
|
81
|
+
- spec/acceptance_spec.rb
|
79
82
|
- spec/option_spec.rb
|
83
|
+
- spec/spec_helper.rb
|