option 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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
- # mutation
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
@@ -57,7 +57,7 @@ class SomeClass < OptionClass
57
57
  end
58
58
 
59
59
  def map(&blk)
60
- Option(blk.call(get))
60
+ self.class.new(blk.call(get))
61
61
  end
62
62
 
63
63
  def flat_map(&blk)
@@ -1,3 +1,3 @@
1
1
  module Option
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -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 "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
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 an Option" do
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
 
@@ -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.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-07 00:00:00.000000000 Z
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: &70193288139160 !ruby/object:Gem::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: *70193288139160
24
+ version_requirements: *70281246888180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &70193288138600 !ruby/object:Gem::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: *70193288138600
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