monad-maybe 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fef7ce0402b5feff827312b8645dbd2eab91f53d
4
- data.tar.gz: 36151eaf207a65bd4381fb5f5cb688fb4583c5f0
3
+ metadata.gz: b4b9973bafaf3d9e728106f0ca22fcd9e1c6cc25
4
+ data.tar.gz: 30d80d184fe6500b0a428a00ebd1766cf59e7824
5
5
  SHA512:
6
- metadata.gz: 1177314d02a6e6fa0a7378c526324fcc98e8108321d651e3b2c45325803f2b8c04cb17328811cfaa39ac430d609028297406bfa2e186e7c42b81ac7518d45164
7
- data.tar.gz: d388ce7399eb3e078406559c891976b63cdcf31e573834c795bf037e6ee4e635fda292aa10422e0b65f3004788a58a4790778a35e36ae19912cd6d0de7e7b419
6
+ metadata.gz: 3a217e29d79862e5a2966c60ff653e12aafee6d6b96ac508b92f7eeec2cb6d617a5843f998f21b45966e9dee70d412ca0616591f7cc5eaf5ec028230e02797b2
7
+ data.tar.gz: 0976f7d7acb1d70d91a98034422d99fd00a6abb5159de54733e2cd1a5a58094c7721cd9f15114a464e7b7f66cbf7e2f92a98317c507d1564071a32b9b397a841
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
- source "http://rubygems.org"
2
-
3
- group :development do
4
- gem 'jeweler'
5
- gem 'yard'
6
- gem 'test-unit'
7
- end
1
+ source "http://rubygems.org"
2
+
3
+ group :development do
4
+ gem 'jeweler'
5
+ gem 'yard'
6
+ gem 'test-unit'
7
+ end
@@ -1,24 +1,24 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- git (1.2.5)
5
- jeweler (1.8.4)
6
- bundler (~> 1.0)
7
- git (>= 1.2.5)
8
- rake
9
- rdoc
10
- json (1.8.0)
11
- rake (10.0.4)
12
- rdoc (4.0.1)
13
- json (~> 1.4)
14
- test-unit (2.5.5)
15
- yard (0.8.6.1)
16
-
17
- PLATFORMS
18
- ruby
19
- x86-mingw32
20
-
21
- DEPENDENCIES
22
- jeweler
23
- test-unit
24
- yard
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ git (1.2.5)
5
+ jeweler (1.8.4)
6
+ bundler (~> 1.0)
7
+ git (>= 1.2.5)
8
+ rake
9
+ rdoc
10
+ json (1.8.0)
11
+ rake (10.0.4)
12
+ rdoc (4.0.1)
13
+ json (~> 1.4)
14
+ test-unit (2.5.5)
15
+ yard (0.8.6.1)
16
+
17
+ PLATFORMS
18
+ ruby
19
+ x86-mingw32
20
+
21
+ DEPENDENCIES
22
+ jeweler
23
+ test-unit
24
+ yard
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
- `monad-maybe`
2
- =============
3
-
4
- An Implementation of Haskell's Maybe Mondad
5
- -------------------------------------------
6
-
7
- This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way with as little monkey patching as possible.
8
-
9
- SEE ALSO
10
- ========
11
- [andand](http://)
12
- [Haskell's Maybe Monad](http://)
1
+ `monad-maybe`
2
+ =============
3
+
4
+ An Implementation of Haskell's Maybe Mondad
5
+ -------------------------------------------
6
+
7
+ This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way with as little monkey patching as possible.
8
+
9
+ SEE ALSO
10
+ ========
11
+ [andand](http://)
12
+ [Haskell's Maybe Monad](http://)
data/Rakefile CHANGED
@@ -1,24 +1,25 @@
1
- require 'rake/testtask'
2
- require 'jeweler'
3
- Jeweler::Tasks.new do |gem|
4
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
5
- gem.name = "monad-maybe"
6
- gem.summary = %Q{A Ruby implementation of Haskell's Maybe Monad}
7
- gem.description = %Q{This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.}
8
- gem.email = "delon.newman@gmail.com"
9
- gem.homepage = "https://github.com/delonnewman/monad-maybe"
10
- gem.authors = ["Delon Newman"]
11
- end
12
- Jeweler::RubygemsDotOrgTasks.new
13
-
14
- desc "Run tests in ./test"
15
- task :test do
16
- Dir['test/*.rb'].each do |test|
17
- sh "ruby #{test}"
18
- end
19
- end
20
-
21
- desc "Setup for development"
22
- task :setup do
23
- sh "bundle"
24
- end
1
+ require 'rake/testtask'
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gem|
4
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
5
+ gem.name = "monad-maybe"
6
+ gem.summary = %Q{A Ruby implementation of Haskell's Maybe Monad}
7
+ gem.description = %Q{This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.}
8
+ gem.email = "delon.newman@gmail.com"
9
+ gem.homepage = "https://github.com/delonnewman/monad-maybe"
10
+ gem.authors = ["Delon Newman"]
11
+ gem.license = 'MIT'
12
+ end
13
+ Jeweler::RubygemsDotOrgTasks.new
14
+
15
+ desc "Run tests in ./test"
16
+ task :test do
17
+ Dir['test/*.rb'].each do |test|
18
+ sh "ruby #{test}"
19
+ end
20
+ end
21
+
22
+ desc "Setup for development"
23
+ task :setup do
24
+ sh "bundle"
25
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.8
1
+ 0.9.9
@@ -1,59 +1,59 @@
1
- require_relative 'maybe/base'
2
- require_relative 'maybe/just'
3
- require_relative 'maybe/nothing'
4
- require_relative 'maybe/list'
5
-
6
- #
7
- # Some monkey patching and constructor methods.
8
- #
9
- module Enumerable
10
- def maybe_map
11
- Monad::Maybe::List.new(map{ |x| yield(x) })
12
- end
13
- end
14
-
15
- class Object
16
- def to_maybe(&blk)
17
- j = Monad::Maybe::Just.new(self)
18
- blk ? j.maybe(&blk) : j
19
- end
20
-
21
- def maybe?
22
- false
23
- end
24
-
25
- def just?
26
- false
27
- end
28
-
29
- def nothing?
30
- false
31
- end
32
- end
33
-
34
- class NilClass
35
- def to_maybe(&blk)
36
- Monad::Maybe::Nothing.instance
37
- end
38
- end
39
-
40
- module Monad
41
- module Maybe
42
- def self.return(obj)
43
- obj.to_maybe
44
- end
45
- end
46
- end
47
-
48
- def maybe(obj, &blk)
49
- m = Monad::Maybe.return(obj)
50
- blk ? m.maybe(&blk) : m
51
- end
52
-
53
- def just(o)
54
- Monad::Maybe::Just.new(o)
55
- end
56
-
57
- def nothing
58
- Monad::Maybe::Nothing.instance
59
- end
1
+ require_relative 'maybe/base'
2
+ require_relative 'maybe/just'
3
+ require_relative 'maybe/nothing'
4
+ require_relative 'maybe/list'
5
+
6
+ #
7
+ # Some monkey patching and constructor methods.
8
+ #
9
+ module Enumerable
10
+ def maybe_map
11
+ Monad::Maybe::List.new(map{ |x| yield(x) })
12
+ end
13
+ end
14
+
15
+ class Object
16
+ def to_maybe(&blk)
17
+ j = Monad::Maybe::Just.new(self)
18
+ blk ? j.maybe(&blk) : j
19
+ end
20
+
21
+ def maybe?
22
+ false
23
+ end
24
+
25
+ def just?
26
+ false
27
+ end
28
+
29
+ def nothing?
30
+ false
31
+ end
32
+ end
33
+
34
+ class NilClass
35
+ def to_maybe(&blk)
36
+ Monad::Maybe::Nothing.instance
37
+ end
38
+ end
39
+
40
+ module Monad
41
+ module Maybe
42
+ def self.return(obj)
43
+ obj.to_maybe
44
+ end
45
+ end
46
+ end
47
+
48
+ def maybe(obj, &blk)
49
+ m = Monad::Maybe.return(obj)
50
+ blk ? m.maybe(&blk) : m
51
+ end
52
+
53
+ def just(o)
54
+ Monad::Maybe::Just.new(o)
55
+ end
56
+
57
+ def nothing
58
+ Monad::Maybe::Nothing.instance
59
+ end
@@ -1,39 +1,39 @@
1
- module Monad
2
- module Maybe
3
- class Base
4
- attr_reader :value
5
-
6
- def <<(obj)
7
- to_list << obj
8
- end
9
-
10
- def maybe?
11
- true
12
- end
13
-
14
- def to_list
15
- List.new(to_a)
16
- end
17
-
18
- def to_maybe
19
- self
20
- end
21
-
22
- def maybe(&blk)
23
- bind(blk)
24
- end
25
-
26
- def then(fn)
27
- bind(->(x){ fn && fn.call })
28
- self
29
- end
30
-
31
- def and(&blk)
32
- self.then(blk)
33
- end
34
-
35
- private
36
- def initialize; end
37
- end
38
- end
39
- end
1
+ module Monad
2
+ module Maybe
3
+ class Base
4
+ attr_reader :value
5
+
6
+ def <<(obj)
7
+ to_list << obj
8
+ end
9
+
10
+ def maybe?
11
+ true
12
+ end
13
+
14
+ def to_list
15
+ List.new(to_a)
16
+ end
17
+
18
+ def to_maybe
19
+ self
20
+ end
21
+
22
+ def maybe(&blk)
23
+ bind(blk)
24
+ end
25
+
26
+ def then(fn)
27
+ bind(->(x){ fn && fn.call })
28
+ self
29
+ end
30
+
31
+ def and(&blk)
32
+ self.then(blk)
33
+ end
34
+
35
+ private
36
+ def initialize; end
37
+ end
38
+ end
39
+ end
@@ -1,26 +1,26 @@
1
- require 'json'
2
-
3
- #
4
- # Adds JSON conversions to Just, Nothing, and List
5
- #
6
- module Monad
7
- module Maybe
8
- class Just
9
- def to_json(*args)
10
- value.to_json(*args)
11
- end
12
- end
13
-
14
- class Nothing
15
- def to_json(*args)
16
- 'null'
17
- end
18
- end
19
-
20
- class List
21
- def to_json(*args)
22
- to_a.to_json(*args)
23
- end
24
- end
25
- end
26
- end
1
+ require 'json'
2
+
3
+ #
4
+ # Adds JSON conversions to Just, Nothing, and List
5
+ #
6
+ module Monad
7
+ module Maybe
8
+ class Just
9
+ def to_json(*args)
10
+ value.to_json(*args)
11
+ end
12
+ end
13
+
14
+ class Nothing
15
+ def to_json(*args)
16
+ 'null'
17
+ end
18
+ end
19
+
20
+ class List
21
+ def to_json(*args)
22
+ to_a.to_json(*args)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,62 +1,62 @@
1
- module Monad
2
- module Maybe
3
- class Just < Base
4
- def initialize(value)
5
- @value = value
6
- end
7
-
8
- def method_missing(method, *args)
9
- value.send(method, *args).to_maybe
10
- end
11
-
12
- def unwrap(val)
13
- value
14
- end
15
-
16
- def nothing?
17
- false
18
- end
19
-
20
- def something?
21
- true
22
- end
23
-
24
- def just?
25
- true
26
- end
27
-
28
- def bind(fn)
29
- fn[@value].to_maybe
30
- end
31
-
32
- def nil?
33
- false
34
- end
35
-
36
- def ==(other)
37
- self === other || self.value == other
38
- end
39
-
40
- def ===(other)
41
- other.just? && self.value == other.value
42
- end
43
-
44
- def equal?(other)
45
- other.__id__ == self.__id__
46
- end
47
-
48
- def inspect
49
- "just(#{value.inspect})"
50
- end
51
-
52
- def to_s
53
- value.to_s
54
- end
55
- alias to_str to_s
56
-
57
- def to_a
58
- [self]
59
- end
60
- end
61
- end
62
- end
1
+ module Monad
2
+ module Maybe
3
+ class Just < Base
4
+ def initialize(value)
5
+ @value = value
6
+ end
7
+
8
+ def method_missing(method, *args)
9
+ value.send(method, *args).to_maybe
10
+ end
11
+
12
+ def unwrap(val)
13
+ value
14
+ end
15
+
16
+ def nothing?
17
+ false
18
+ end
19
+
20
+ def something?
21
+ true
22
+ end
23
+
24
+ def just?
25
+ true
26
+ end
27
+
28
+ def bind(fn)
29
+ fn[@value].to_maybe
30
+ end
31
+
32
+ def nil?
33
+ false
34
+ end
35
+
36
+ def ==(other)
37
+ self === other || self.value == other
38
+ end
39
+
40
+ def ===(other)
41
+ other.just? && self.value == other.value
42
+ end
43
+
44
+ def equal?(other)
45
+ other.__id__ == self.__id__
46
+ end
47
+
48
+ def inspect
49
+ "just(#{value.inspect})"
50
+ end
51
+
52
+ def to_s
53
+ value.to_s
54
+ end
55
+ alias to_str to_s
56
+
57
+ def to_a
58
+ [self]
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,72 +1,72 @@
1
- module Monad
2
- module Maybe
3
- class List
4
- include Enumerable
5
-
6
- def initialize(enum)
7
- @enum = enum.map { |v| v.maybe? ? v : v.to_maybe }
8
- end
9
-
10
- def inspect
11
- "#{to_a}"
12
- end
13
-
14
- def maybe?
15
- true
16
- end
17
-
18
- def <<(obj)
19
- @enum << obj if obj.just?
20
- self
21
- end
22
-
23
- def to_a
24
- @enum.to_a
25
- end
26
-
27
- def to_maybe
28
- first.to_maybe
29
- end
30
-
31
- def each
32
- @enum.each do |x|
33
- yield(x)
34
- end
35
- end
36
-
37
- def map
38
- e = []
39
- each do |x|
40
- e << yield(x)
41
- end
42
- List.new(e)
43
- end
44
- alias maybe_map map
45
-
46
- def select
47
- e = []
48
- each do |x|
49
- is_true = yield(x)
50
- e << x if is_true
51
- end
52
- List.new(e)
53
- end
54
-
55
- def reject
56
- select { |x| !yield(x) }
57
- end
58
-
59
- def select_just
60
- select { |x| x.just? }
61
- end
62
-
63
- def unwrap_map(default, &blk)
64
- to_a.map { |x| blk ? blk.call(x.unwrap(default)) : x.unwrap(default) }
65
- end
66
-
67
- def value_map(&blk)
68
- to_a.map { |x| blk ? blk.call(x.value) : x.value }
69
- end
70
- end
71
- end
72
- end
1
+ module Monad
2
+ module Maybe
3
+ class List
4
+ include Enumerable
5
+
6
+ def initialize(enum)
7
+ @enum = enum.map { |v| v.maybe? ? v : v.to_maybe }
8
+ end
9
+
10
+ def inspect
11
+ "#{to_a}"
12
+ end
13
+
14
+ def maybe?
15
+ true
16
+ end
17
+
18
+ def <<(obj)
19
+ @enum << obj if obj.just?
20
+ self
21
+ end
22
+
23
+ def to_a
24
+ @enum.to_a
25
+ end
26
+
27
+ def to_maybe
28
+ first.to_maybe
29
+ end
30
+
31
+ def each
32
+ @enum.each do |x|
33
+ yield(x)
34
+ end
35
+ end
36
+
37
+ def map
38
+ e = []
39
+ each do |x|
40
+ e << yield(x)
41
+ end
42
+ List.new(e)
43
+ end
44
+ alias maybe_map map
45
+
46
+ def select
47
+ e = []
48
+ each do |x|
49
+ is_true = yield(x)
50
+ e << x if is_true
51
+ end
52
+ List.new(e)
53
+ end
54
+
55
+ def reject
56
+ select { |x| !yield(x) }
57
+ end
58
+
59
+ def select_just
60
+ select { |x| x.just? }
61
+ end
62
+
63
+ def unwrap_map(default, &blk)
64
+ to_a.map { |x| blk ? blk.call(x.unwrap(default)) : x.unwrap(default) }
65
+ end
66
+
67
+ def value_map(&blk)
68
+ to_a.map { |x| blk ? blk.call(x.value) : x.value }
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,58 +1,58 @@
1
- require 'singleton'
2
-
3
- module Monad
4
- module Maybe
5
- class Nothing < Base
6
- include ::Singleton
7
-
8
- def method_missing(method, *args)
9
- self
10
- end
11
-
12
- def clone
13
- self
14
- end
15
-
16
- def inspect
17
- 'nothing'
18
- end
19
-
20
- def nil?
21
- true
22
- end
23
-
24
- def nothing?
25
- true
26
- end
27
-
28
- def bind(fn)
29
- self
30
- end
31
-
32
- def just?
33
- false
34
- end
35
-
36
- def something?
37
- false
38
- end
39
-
40
- def unwrap(val)
41
- val
42
- end
43
-
44
- def value
45
- nil
46
- end
47
-
48
- def to_s
49
- ''
50
- end
51
- alias to_str to_s
52
-
53
- def to_a
54
- []
55
- end
56
- end
57
- end
58
- end
1
+ require 'singleton'
2
+
3
+ module Monad
4
+ module Maybe
5
+ class Nothing < Base
6
+ include ::Singleton
7
+
8
+ def method_missing(method, *args)
9
+ self
10
+ end
11
+
12
+ def clone
13
+ self
14
+ end
15
+
16
+ def inspect
17
+ 'nothing'
18
+ end
19
+
20
+ def nil?
21
+ true
22
+ end
23
+
24
+ def nothing?
25
+ true
26
+ end
27
+
28
+ def bind(fn)
29
+ self
30
+ end
31
+
32
+ def just?
33
+ false
34
+ end
35
+
36
+ def something?
37
+ false
38
+ end
39
+
40
+ def unwrap(val)
41
+ val
42
+ end
43
+
44
+ def value
45
+ nil
46
+ end
47
+
48
+ def to_s
49
+ ''
50
+ end
51
+ alias to_str to_s
52
+
53
+ def to_a
54
+ []
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,56 +1,57 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "monad-maybe"
8
- s.version = "0.9.8"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Delon Newman"]
12
- s.date = "2013-08-16"
13
- s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way."
14
- s.email = "delon.newman@gmail.com"
15
- s.extra_rdoc_files = [
16
- "README.md"
17
- ]
18
- s.files = [
19
- "Gemfile",
20
- "Gemfile.lock",
21
- "README.md",
22
- "Rakefile",
23
- "VERSION",
24
- "lib/monad/maybe.rb",
25
- "lib/monad/maybe/base.rb",
26
- "lib/monad/maybe/json.rb",
27
- "lib/monad/maybe/just.rb",
28
- "lib/monad/maybe/list.rb",
29
- "lib/monad/maybe/nothing.rb",
30
- "monad-maybe.gemspec",
31
- "test/maybe.rb"
32
- ]
33
- s.homepage = "https://github.com/delonnewman/monad-maybe"
34
- s.require_paths = ["lib"]
35
- s.rubygems_version = "2.0.0"
36
- s.summary = "A Ruby implementation of Haskell's Maybe Monad"
37
-
38
- if s.respond_to? :specification_version then
39
- s.specification_version = 4
40
-
41
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
- s.add_development_dependency(%q<jeweler>, [">= 0"])
43
- s.add_development_dependency(%q<yard>, [">= 0"])
44
- s.add_development_dependency(%q<test-unit>, [">= 0"])
45
- else
46
- s.add_dependency(%q<jeweler>, [">= 0"])
47
- s.add_dependency(%q<yard>, [">= 0"])
48
- s.add_dependency(%q<test-unit>, [">= 0"])
49
- end
50
- else
51
- s.add_dependency(%q<jeweler>, [">= 0"])
52
- s.add_dependency(%q<yard>, [">= 0"])
53
- s.add_dependency(%q<test-unit>, [">= 0"])
54
- end
55
- end
56
-
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "monad-maybe"
8
+ s.version = "0.9.9"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Delon Newman"]
12
+ s.date = "2013-08-18"
13
+ s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way."
14
+ s.email = "delon.newman@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "README.md",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "lib/monad/maybe.rb",
25
+ "lib/monad/maybe/base.rb",
26
+ "lib/monad/maybe/json.rb",
27
+ "lib/monad/maybe/just.rb",
28
+ "lib/monad/maybe/list.rb",
29
+ "lib/monad/maybe/nothing.rb",
30
+ "monad-maybe.gemspec",
31
+ "test/maybe.rb"
32
+ ]
33
+ s.homepage = "https://github.com/delonnewman/monad-maybe"
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = "2.0.0.rc.2"
37
+ s.summary = "A Ruby implementation of Haskell's Maybe Monad"
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 4
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
44
+ s.add_development_dependency(%q<yard>, [">= 0"])
45
+ s.add_development_dependency(%q<test-unit>, [">= 0"])
46
+ else
47
+ s.add_dependency(%q<jeweler>, [">= 0"])
48
+ s.add_dependency(%q<yard>, [">= 0"])
49
+ s.add_dependency(%q<test-unit>, [">= 0"])
50
+ end
51
+ else
52
+ s.add_dependency(%q<jeweler>, [">= 0"])
53
+ s.add_dependency(%q<yard>, [">= 0"])
54
+ s.add_dependency(%q<test-unit>, [">= 0"])
55
+ end
56
+ end
57
+
@@ -1,158 +1,158 @@
1
- require 'test/unit'
2
- require_relative '../lib/monad/maybe'
3
- require_relative '../lib/monad/maybe/json'
4
-
5
- class MaybeTest < Test::Unit::TestCase
6
- def test_nothing
7
- assert nil.to_maybe.nothing?
8
- assert nil.to_maybe.value.nil?
9
- assert_equal 'test', nil.to_maybe.unwrap('test')
10
- assert_equal '', nothing.to_s
11
- end
12
-
13
- def test_just
14
- assert maybe(1).just?
15
- assert_equal 1, 1.to_maybe.value
16
- assert_equal 1, 1.to_maybe.unwrap('test')
17
- assert_equal '1', just(1).to_s
18
- end
19
-
20
- def test_json
21
- assert_equal 'null', nothing.to_json
22
- assert_equal '1', just(1).to_json
23
- assert_equal '{}', just({}).to_json
24
- assert_equal '[]', just([]).to_json
25
- assert_equal (0..10).to_a.to_json, (0..10).maybe_map { |n| n }.to_json
26
- end
27
-
28
- def test_to_a
29
- assert_equal [1.to_maybe], 1.to_maybe.to_a
30
- assert_equal [], nil.to_maybe.to_a
31
- end
32
-
33
- def test_false
34
- assert_equal false, false.to_maybe.value
35
- end
36
-
37
- def test_nil_conversions
38
- assert_equal nil.nil?, nil.to_maybe.nil?
39
- end
40
-
41
- def test_class
42
- assert_equal Monad::Maybe::Nothing, maybe(nil).class
43
- assert_equal Monad::Maybe::Just, maybe(1).class
44
- end
45
-
46
- def test_list
47
- xs = true.to_maybe << nil.to_maybe << 1.to_maybe << 3.to_maybe
48
- assert_equal 3, xs.count
49
- xs.each { |x| assert x.just? }
50
- end
51
-
52
- def test_enumerable
53
- assert_nothing_raised do
54
- xs = (0..10).select { |n| n % 2 != 0 }
55
- ys = (0..10).maybe_map { |n| n % 2 == 0 ? nil : n }.select_just.value_map
56
- assert_equal xs.count, ys.count
57
- end
58
- end
59
-
60
- def test_maybe_block
61
- assert_nothing_raised do
62
- nothing.maybe do
63
- raise Exception, "This should not be called"
64
- end
65
- end
66
-
67
- assert_nothing_raised do
68
- maybe(nil) do
69
- raise Exception, "This should not be called"
70
- end
71
- end
72
-
73
- maybe(1) do |n|
74
- assert_equal 1, n
75
- end
76
-
77
- just(1).maybe do |n|
78
- assert_equal 1, n
79
- end
80
- end
81
-
82
- def test_to_maybe_blocks
83
- 1.to_maybe { |v| assert_equal 1, v }
84
-
85
- assert_nothing_raised do
86
- nil.to_maybe { raise Exception, "This should not run" }
87
- end
88
- end
89
-
90
-
91
- def test_maybe_block_return_value_and_type
92
- m = maybe(1).maybe { |n| n + 1 }
93
- assert_equal 2, m.value
94
- assert m.maybe?
95
- assert m.just?
96
-
97
- o = maybe(2).maybe { nil }
98
- assert_equal nil, o.value
99
- assert o.maybe?
100
- assert o.nothing?
101
- end
102
-
103
- def test_to_maybe
104
- assert_equal just(1), 1.to_maybe
105
- assert_equal just(1), just(1).to_maybe
106
- assert_equal nothing, nil.to_maybe
107
- assert_equal nothing, nothing.to_maybe
108
- assert_equal 1.to_maybe, [1].to_maybe
109
- assert_equal 0.to_maybe, (0..10).maybe_map { |n| n }.to_maybe
110
- end
111
-
112
- def test_then_and_and
113
- just(1).and do
114
- assert true
115
- end
116
-
117
- nothing.and do
118
- assert true
119
- end
120
-
121
- just(1).and{ assert true }.and{ assert true }
122
- maybe(1).then(->(){ assert true }).then(->(){ assert true })
123
- end
124
-
125
- #
126
- # Monad laws
127
- #
128
-
129
- #
130
- # Right Unit:
131
- # m >>= return = m
132
- #
133
- def test_right_unit
134
- m = just(1)
135
- assert_equal m, m.bind(->(x){ Monad::Maybe.return(x) })
136
- end
137
-
138
- #
139
- # Left Unit:
140
- # return x >>= f = f x
141
- #
142
- def test_left_unit
143
- x = 2
144
- f = ->(x) { x + 1 }
145
- assert_equal Monad::Maybe.return(x).bind(f), f[x]
146
- end
147
-
148
- #
149
- # Associativity:
150
- # (m >>= f) >>= g = m >>= (\x -> f x >>= g)
151
- #
152
- def test_associativity
153
- m = just(3.1459)
154
- f = ->(x) { x ** 2 }
155
- g = ->(x) { 2 * x }
156
- assert_equal m.bind(f).bind(g), m.bind(->(x) { f[x] }).bind(g)
157
- end
158
- end
1
+ require 'test/unit'
2
+ require_relative '../lib/monad/maybe'
3
+ require_relative '../lib/monad/maybe/json'
4
+
5
+ class MaybeTest < Test::Unit::TestCase
6
+ def test_nothing
7
+ assert nil.to_maybe.nothing?
8
+ assert nil.to_maybe.value.nil?
9
+ assert_equal 'test', nil.to_maybe.unwrap('test')
10
+ assert_equal '', nothing.to_s
11
+ end
12
+
13
+ def test_just
14
+ assert maybe(1).just?
15
+ assert_equal 1, 1.to_maybe.value
16
+ assert_equal 1, 1.to_maybe.unwrap('test')
17
+ assert_equal '1', just(1).to_s
18
+ end
19
+
20
+ def test_json
21
+ assert_equal 'null', nothing.to_json
22
+ assert_equal '1', just(1).to_json
23
+ assert_equal '{}', just({}).to_json
24
+ assert_equal '[]', just([]).to_json
25
+ assert_equal (0..10).to_a.to_json, (0..10).maybe_map { |n| n }.to_json
26
+ end
27
+
28
+ def test_to_a
29
+ assert_equal [1.to_maybe], 1.to_maybe.to_a
30
+ assert_equal [], nil.to_maybe.to_a
31
+ end
32
+
33
+ def test_false
34
+ assert_equal false, false.to_maybe.value
35
+ end
36
+
37
+ def test_nil_conversions
38
+ assert_equal nil.nil?, nil.to_maybe.nil?
39
+ end
40
+
41
+ def test_class
42
+ assert_equal Monad::Maybe::Nothing, maybe(nil).class
43
+ assert_equal Monad::Maybe::Just, maybe(1).class
44
+ end
45
+
46
+ def test_list
47
+ xs = true.to_maybe << nil.to_maybe << 1.to_maybe << 3.to_maybe
48
+ assert_equal 3, xs.count
49
+ xs.each { |x| assert x.just? }
50
+ end
51
+
52
+ def test_enumerable
53
+ assert_nothing_raised do
54
+ xs = (0..10).select { |n| n % 2 != 0 }
55
+ ys = (0..10).maybe_map { |n| n % 2 == 0 ? nil : n }.select_just.value_map
56
+ assert_equal xs.count, ys.count
57
+ end
58
+ end
59
+
60
+ def test_maybe_block
61
+ assert_nothing_raised do
62
+ nothing.maybe do
63
+ raise Exception, "This should not be called"
64
+ end
65
+ end
66
+
67
+ assert_nothing_raised do
68
+ maybe(nil) do
69
+ raise Exception, "This should not be called"
70
+ end
71
+ end
72
+
73
+ maybe(1) do |n|
74
+ assert_equal 1, n
75
+ end
76
+
77
+ just(1).maybe do |n|
78
+ assert_equal 1, n
79
+ end
80
+ end
81
+
82
+ def test_to_maybe_blocks
83
+ 1.to_maybe { |v| assert_equal 1, v }
84
+
85
+ assert_nothing_raised do
86
+ nil.to_maybe { raise Exception, "This should not run" }
87
+ end
88
+ end
89
+
90
+
91
+ def test_maybe_block_return_value_and_type
92
+ m = maybe(1).maybe { |n| n + 1 }
93
+ assert_equal 2, m.value
94
+ assert m.maybe?
95
+ assert m.just?
96
+
97
+ o = maybe(2).maybe { nil }
98
+ assert_equal nil, o.value
99
+ assert o.maybe?
100
+ assert o.nothing?
101
+ end
102
+
103
+ def test_to_maybe
104
+ assert_equal just(1), 1.to_maybe
105
+ assert_equal just(1), just(1).to_maybe
106
+ assert_equal nothing, nil.to_maybe
107
+ assert_equal nothing, nothing.to_maybe
108
+ assert_equal 1.to_maybe, [1].to_maybe
109
+ assert_equal 0.to_maybe, (0..10).maybe_map { |n| n }.to_maybe
110
+ end
111
+
112
+ def test_then_and_and
113
+ just(1).and do
114
+ assert true
115
+ end
116
+
117
+ nothing.and do
118
+ assert true
119
+ end
120
+
121
+ just(1).and{ assert true }.and{ assert true }
122
+ maybe(1).then(->(){ assert true }).then(->(){ assert true })
123
+ end
124
+
125
+ #
126
+ # Monad laws
127
+ #
128
+
129
+ #
130
+ # Right Unit:
131
+ # m >>= return = m
132
+ #
133
+ def test_right_unit
134
+ m = just(1)
135
+ assert_equal m, m.bind(->(x){ Monad::Maybe.return(x) })
136
+ end
137
+
138
+ #
139
+ # Left Unit:
140
+ # return x >>= f = f x
141
+ #
142
+ def test_left_unit
143
+ x = 2
144
+ f = ->(x) { x + 1 }
145
+ assert_equal Monad::Maybe.return(x).bind(f), f[x]
146
+ end
147
+
148
+ #
149
+ # Associativity:
150
+ # (m >>= f) >>= g = m >>= (\x -> f x >>= g)
151
+ #
152
+ def test_associativity
153
+ m = just(3.1459)
154
+ f = ->(x) { x ** 2 }
155
+ g = ->(x) { 2 * x }
156
+ assert_equal m.bind(f).bind(g), m.bind(->(x) { f[x] }).bind(g)
157
+ end
158
+ 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.8
4
+ version: 0.9.9
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-08-16 00:00:00.000000000 Z
11
+ date: 2013-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jeweler
@@ -73,7 +73,8 @@ files:
73
73
  - monad-maybe.gemspec
74
74
  - test/maybe.rb
75
75
  homepage: https://github.com/delonnewman/monad-maybe
76
- licenses: []
76
+ licenses:
77
+ - MIT
77
78
  metadata: {}
78
79
  post_install_message:
79
80
  rdoc_options: []
@@ -91,9 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
92
  version: '0'
92
93
  requirements: []
93
94
  rubyforge_project:
94
- rubygems_version: 2.0.0
95
+ rubygems_version: 2.0.0.rc.2
95
96
  signing_key:
96
97
  specification_version: 4
97
98
  summary: A Ruby implementation of Haskell's Maybe Monad
98
99
  test_files: []
99
- has_rdoc: