rumonade 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +5 -0
- data/lib/rumonade/either.rb +10 -0
- data/lib/rumonade/version.rb +1 -1
- data/test/either_test.rb +5 -0
- metadata +37 -37
data/HISTORY.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# HISTORY
|
2
2
|
|
3
|
+
## v0.2.2 (Apr 26, 2012)
|
4
|
+
|
5
|
+
- added Either#+ to allow combining validations
|
6
|
+
- See full list @ https://github.com/ms-ati/rumonade/compare/v0.2.1...v0.2.2
|
7
|
+
|
3
8
|
## v0.2.1 (Oct 22, 2011)
|
4
9
|
|
5
10
|
- fixed Option#map to disallow becoming None on a nil result
|
data/lib/rumonade/either.rb
CHANGED
@@ -43,6 +43,16 @@ module Rumonade
|
|
43
43
|
def right
|
44
44
|
RightProjection.new(self)
|
45
45
|
end
|
46
|
+
|
47
|
+
# @param [Either] other the either to combine with
|
48
|
+
# @return [Either] Returns a +Left+ with all Left values (if any), otherwise a +Right+ with all Right values
|
49
|
+
def +(other)
|
50
|
+
if [self, other].any?(&:left?)
|
51
|
+
Left([self, other].map { |either| either.left.to_opt }.flatten)
|
52
|
+
else
|
53
|
+
Right([self, other].map { |either| either.right.to_opt }.flatten)
|
54
|
+
end
|
55
|
+
end
|
46
56
|
end
|
47
57
|
|
48
58
|
# The left side of the disjoint union, as opposed to the Right side.
|
data/lib/rumonade/version.rb
CHANGED
data/test/either_test.rb
CHANGED
@@ -159,4 +159,9 @@ class EitherTest < Test::Unit::TestCase
|
|
159
159
|
assert_equal "RightProjection(Left(error))", Left("error").right.to_s
|
160
160
|
assert_equal "LeftProjection(Right(42))", Right(42).left.to_s
|
161
161
|
end
|
162
|
+
|
163
|
+
def test_plus_for_left_and_right
|
164
|
+
assert_equal Left(["bad", "worse"]), Left("bad") + Right(:good) + Left("worse") + Right(:good)
|
165
|
+
assert_equal Right([:good, :better]), Right(:good) + Right(:better)
|
166
|
+
end
|
162
167
|
end
|
metadata
CHANGED
@@ -1,38 +1,40 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rumonade
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Marc Siegel
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: test-unit
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :development
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: A Scala-inspired Monad library for Ruby, aiming to share the most common
|
31
|
+
idioms for folks working in both languages. Includes Option, Array, etc.
|
32
|
+
email:
|
28
33
|
- marc@usainnov.com
|
29
34
|
executables: []
|
30
|
-
|
31
35
|
extensions: []
|
32
|
-
|
33
36
|
extra_rdoc_files: []
|
34
|
-
|
35
|
-
files:
|
37
|
+
files:
|
36
38
|
- .gitignore
|
37
39
|
- Gemfile
|
38
40
|
- HISTORY.md
|
@@ -57,35 +59,33 @@ files:
|
|
57
59
|
- test/test_helper.rb
|
58
60
|
homepage: http://github.com/ms-ati/rumonade
|
59
61
|
licenses: []
|
60
|
-
|
61
62
|
post_install_message:
|
62
63
|
rdoc_options: []
|
63
|
-
|
64
|
-
require_paths:
|
64
|
+
require_paths:
|
65
65
|
- lib
|
66
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
67
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version:
|
72
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
78
|
requirements: []
|
79
|
-
|
80
79
|
rubyforge_project: rumonade
|
81
|
-
rubygems_version: 1.8.
|
80
|
+
rubygems_version: 1.8.21
|
82
81
|
signing_key:
|
83
82
|
specification_version: 3
|
84
83
|
summary: A Scala-inspired Monad library for Ruby
|
85
|
-
test_files:
|
84
|
+
test_files:
|
86
85
|
- test/array_test.rb
|
87
86
|
- test/either_test.rb
|
88
87
|
- test/error_handling_test.rb
|
89
88
|
- test/lazy_identity_test.rb
|
90
89
|
- test/option_test.rb
|
91
90
|
- test/test_helper.rb
|
91
|
+
has_rdoc:
|