monad-maybe 0.9.1 → 0.9.2
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/monad/maybe.rb +13 -9
- data/lib/monad/maybe/base.rb +4 -1
- data/lib/monad/maybe/just.rb +3 -2
- data/lib/monad/maybe/list.rb +1 -1
- data/monad-maybe.gemspec +3 -3
- data/test/maybe.rb +25 -0
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4ff513fcc26d6a2a1034ca7628d787994f1f4c4
|
4
|
+
data.tar.gz: a44413edb8240cea79f755c6374981424ca97d86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c71be1ce7e5f7e6f487cbaefaac244128215218d83a5375954dab890e378e35836a38483dbd37629f624335d2ac803a13a02b1c75fa06d436ae9cffda302118d
|
7
|
+
data.tar.gz: 6efd96a3d2581d1204c6dc0c0dd8268d305ff460515cf75228ad5c2c110c43b27128368fa93bf9e9481717d235e5cb3bb5729db2d172a2b3dd51c6cfab7f0487
|
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ Jeweler::Tasks.new do |gem|
|
|
3
3
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
4
4
|
gem.name = "monad-maybe"
|
5
5
|
gem.summary = %Q{A Ruby implementation of Haskell's Maybe Monad}
|
6
|
-
gem.description = %Q{This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way
|
6
|
+
gem.description = %Q{This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.}
|
7
7
|
gem.email = "delon.newman@gmail.com"
|
8
8
|
gem.homepage = "https://github.com/delonnewman/monad-maybe"
|
9
9
|
gem.authors = ["Delon Newman"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.2
|
data/lib/monad/maybe.rb
CHANGED
@@ -21,13 +21,17 @@ module Monad
|
|
21
21
|
class ::Range; include Enumerable end
|
22
22
|
|
23
23
|
class ::Object
|
24
|
-
def maybe(&blk)
|
25
|
-
if blk
|
26
|
-
|
24
|
+
def maybe(obj=self, &blk)
|
25
|
+
if obj && blk
|
26
|
+
blk.call(obj).to_maybe
|
27
27
|
else
|
28
|
-
|
28
|
+
obj.to_maybe
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
def to_maybe
|
33
|
+
Just.new(self)
|
34
|
+
end
|
31
35
|
|
32
36
|
def maybe?
|
33
37
|
false
|
@@ -47,19 +51,19 @@ module Monad
|
|
47
51
|
end
|
48
52
|
|
49
53
|
class ::NilClass
|
50
|
-
def
|
54
|
+
def to_maybe
|
51
55
|
Nothing.instance.freeze
|
52
56
|
end
|
53
57
|
|
58
|
+
def maybe(&blk)
|
59
|
+
to_maybe
|
60
|
+
end
|
61
|
+
|
54
62
|
def something?
|
55
63
|
false
|
56
64
|
end
|
57
65
|
end
|
58
66
|
|
59
|
-
def maybe(o, &blk)
|
60
|
-
o.maybe(&blk)
|
61
|
-
end
|
62
|
-
|
63
67
|
def just(o)
|
64
68
|
Just.new(o)
|
65
69
|
end
|
data/lib/monad/maybe/base.rb
CHANGED
data/lib/monad/maybe/just.rb
CHANGED
@@ -11,7 +11,7 @@ module Monad
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def method_missing(method, *args)
|
14
|
-
|
14
|
+
value.send(method, *args).maybe
|
15
15
|
end
|
16
16
|
|
17
17
|
def unwrap(val)
|
@@ -30,9 +30,10 @@ module Monad
|
|
30
30
|
true
|
31
31
|
end
|
32
32
|
|
33
|
+
# NOTE: This being able to return Nothings maybe dangerous
|
33
34
|
def maybe(&blk)
|
34
35
|
if blk
|
35
|
-
|
36
|
+
blk.call(self.value).to_maybe
|
36
37
|
else
|
37
38
|
self
|
38
39
|
end
|
data/lib/monad/maybe/list.rb
CHANGED
data/monad-maybe.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "monad-maybe"
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Delon Newman"]
|
12
|
-
s.date = "2013-06-
|
13
|
-
s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way
|
12
|
+
s.date = "2013-06-18"
|
13
|
+
s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way."
|
14
14
|
s.email = "delon.newman@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.md"
|
data/test/maybe.rb
CHANGED
@@ -52,11 +52,15 @@ class MaybeTest < Test::Unit::TestCase
|
|
52
52
|
nil.maybe do
|
53
53
|
raise Exception, "This should not be called"
|
54
54
|
end
|
55
|
+
end
|
55
56
|
|
57
|
+
assert_nothing_raised do
|
56
58
|
nothing.maybe do
|
57
59
|
raise Exception, "This should not be called"
|
58
60
|
end
|
61
|
+
end
|
59
62
|
|
63
|
+
assert_nothing_raised do
|
60
64
|
maybe(nil) do
|
61
65
|
raise Exception, "This should not be called"
|
62
66
|
end
|
@@ -75,6 +79,18 @@ class MaybeTest < Test::Unit::TestCase
|
|
75
79
|
end
|
76
80
|
end
|
77
81
|
|
82
|
+
def test_maybe_block_return_value_and_type
|
83
|
+
m = 1.maybe { |n| n + 1 }
|
84
|
+
assert_equal 2, m.value
|
85
|
+
assert m.maybe?
|
86
|
+
assert m.just?
|
87
|
+
|
88
|
+
o = 2.maybe { nil }
|
89
|
+
assert_equal nil, o.value
|
90
|
+
assert o.maybe?
|
91
|
+
assert o.nothing?
|
92
|
+
end
|
93
|
+
|
78
94
|
def test_something?
|
79
95
|
assert_equal false, nil.something?
|
80
96
|
assert_equal false, nothing.something?
|
@@ -82,4 +98,13 @@ class MaybeTest < Test::Unit::TestCase
|
|
82
98
|
assert 1.maybe.something?
|
83
99
|
assert (0..10).maybe_map { |n| n }.something?
|
84
100
|
end
|
101
|
+
|
102
|
+
def test_to_maybe
|
103
|
+
assert_equal just(1), 1.to_maybe
|
104
|
+
assert_equal just(1), just(1).to_maybe
|
105
|
+
assert_equal nothing, nil.to_maybe
|
106
|
+
assert_equal nothing, nothing.to_maybe
|
107
|
+
assert_equal 1.to_maybe, [1].to_maybe
|
108
|
+
assert_equal 0.to_maybe, (0..10).maybe_map { |n| n }.to_maybe
|
109
|
+
end
|
85
110
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monad-maybe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delon Newman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jeweler
|
@@ -52,8 +52,7 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
description: This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way
|
56
|
-
with as little monkey patching as possible.
|
55
|
+
description: This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.
|
57
56
|
email: delon.newman@gmail.com
|
58
57
|
executables: []
|
59
58
|
extensions: []
|