wrapped 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +3 -3
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/lib/wrapped/blank.rb +2 -2
- data/lib/wrapped/injection.rb +2 -2
- data/lib/wrapped/present.rb +3 -3
- data/lib/wrapped/version.rb +1 -1
- data/spec/wrapped_spec.rb +14 -7
- data/wrapped.gemspec +1 -2
- metadata +52 -67
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 873be12f072d8e7e8a013579ab7e24abbfca1df4
|
4
|
+
data.tar.gz: 00b05e0b222ebe45887f5ed05ce3d2fa19d17edf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 16409b545b1897b69f748e239f432509aa95a13a927713a7c86d6219b6411afcf96406b973cc38c4e6941a322da01d23a42728ecc3730ee26aafd1536c229d74
|
7
|
+
data.tar.gz: 303cd24a0f03dc9ba83d94c7725a2990c8598b797e3ab1ca9341f45e852a078c2c98f8a3a596459d37407382423f9937187f5033d2caa18ae1cf3c9ca3d4312e
|
data/README.md
CHANGED
@@ -104,9 +104,9 @@ For example:
|
|
104
104
|
irb(main):055:0> nil.wrapped.inject(0) {|_, n| n+1}
|
105
105
|
=> 0
|
106
106
|
|
107
|
-
And then we have `
|
107
|
+
And then we have `flat_map`, which you can use to produce another wrapped object:
|
108
108
|
|
109
|
-
irb> 1.wrapped.
|
109
|
+
irb> 1.wrapped.flat_map {|n| (n + 1).wrapped}.flat_map {|n| (n*2).wrapped}.unwrap
|
110
110
|
=> 4
|
111
111
|
|
112
112
|
Those same people who will exclaim things about functors will, at this point,
|
@@ -166,4 +166,4 @@ functor or the option class for more.
|
|
166
166
|
|
167
167
|
Copyright
|
168
168
|
---------
|
169
|
-
Copyright 2011 Mike Burns
|
169
|
+
Copyright 2011 - 2014 Mike Burns, Joe Ferris
|
data/bin/rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rake' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('rake', 'rake')
|
data/bin/rspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('rspec-core', 'rspec')
|
data/lib/wrapped/blank.rb
CHANGED
data/lib/wrapped/injection.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'wrapped/present'
|
2
2
|
require 'wrapped/blank'
|
3
3
|
|
4
|
-
class
|
4
|
+
class BasicObject
|
5
5
|
# Wrap the object, forcing the user to be aware of the potential for a nil
|
6
6
|
# value by unwrapping it.
|
7
7
|
#
|
8
8
|
# See the Present class for details on how to unwrap it.
|
9
9
|
def wrapped
|
10
|
-
Present.new(self)
|
10
|
+
::Present.new(self)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
data/lib/wrapped/present.rb
CHANGED
@@ -68,13 +68,13 @@ class Present
|
|
68
68
|
|
69
69
|
# Run a block against the unwrapped value, producing the result of the block.
|
70
70
|
#
|
71
|
-
# > w.
|
71
|
+
# > w.flat_map {|n| n+1 }
|
72
72
|
#
|
73
73
|
# Also, you can use this like you would use >>= in Haskell. This and wrapped
|
74
74
|
# make it a monad.
|
75
75
|
#
|
76
|
-
# > w.
|
77
|
-
def
|
76
|
+
# > w.flat_map {|n| (n+1).wrapped }
|
77
|
+
def flat_map
|
78
78
|
yield unwrap
|
79
79
|
end
|
80
80
|
|
data/lib/wrapped/version.rb
CHANGED
data/spec/wrapped_spec.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'delegate'
|
2
3
|
|
3
4
|
describe Wrapped, 'conversion' do
|
4
|
-
let(:value)
|
5
|
-
let(:just)
|
6
|
-
let(:nothing)
|
5
|
+
let(:value) { 1 }
|
6
|
+
let(:just) { 1.wrapped }
|
7
|
+
let(:nothing) { nil.wrapped }
|
8
|
+
let(:delegator) { SimpleDelegator.new(value).wrapped }
|
7
9
|
|
8
10
|
it "converts the value to a Present" do
|
9
11
|
just.should be_instance_of(Present)
|
@@ -12,6 +14,11 @@ describe Wrapped, 'conversion' do
|
|
12
14
|
it "converts the nil to a Blank" do
|
13
15
|
nothing.should be_instance_of(Blank)
|
14
16
|
end
|
17
|
+
|
18
|
+
it "converts a simple delegator to a Present" do
|
19
|
+
delegator.should be_instance_of(Present)
|
20
|
+
delegator.unwrap.should be_instance_of(SimpleDelegator)
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
24
|
describe Wrapped, 'accessing' do
|
@@ -151,12 +158,12 @@ describe Wrapped, 'monadic' do
|
|
151
158
|
let(:just) { 1.wrapped }
|
152
159
|
let(:nothing) { nil.wrapped }
|
153
160
|
|
154
|
-
it 'produces the value from #
|
155
|
-
just.
|
161
|
+
it 'produces the value from #flat_map for a wrapped value' do
|
162
|
+
just.flat_map {|n| (n+1).wrapped }.unwrap.should == value+1
|
156
163
|
end
|
157
164
|
|
158
|
-
it 'produces blank from #
|
159
|
-
nothing.
|
165
|
+
it 'produces blank from #flat_map for a wrapped nil' do
|
166
|
+
nothing.flat_map {|n| (n+1).wrapped}.should be_blank
|
160
167
|
end
|
161
168
|
end
|
162
169
|
|
data/wrapped.gemspec
CHANGED
@@ -14,9 +14,8 @@ Gem::Specification.new do |s|
|
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
17
|
s.require_paths = ["lib"]
|
19
18
|
|
20
|
-
s.add_development_dependency('rspec')
|
19
|
+
s.add_development_dependency('rspec', '~> 2.3')
|
21
20
|
s.add_development_dependency('rake')
|
22
21
|
end
|
metadata
CHANGED
@@ -1,65 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: wrapped
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Mike Burns
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
type: :development
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
hash: 3
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
version: "0"
|
31
|
-
prerelease: false
|
11
|
+
date: 2014-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
32
14
|
name: rspec
|
33
|
-
|
34
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.3'
|
35
20
|
type: :development
|
36
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
hash: 3
|
42
|
-
segments:
|
43
|
-
- 0
|
44
|
-
version: "0"
|
45
21
|
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
46
28
|
name: rake
|
47
|
-
|
48
|
-
|
49
|
-
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: The unchecked nil is a dangerous concept leading to NoMethodErrors at
|
42
|
+
runtime. It would be better if you were forced to explictly unwrap potentially nil
|
43
|
+
values. This library provides mechanisms and convenience methods for making this
|
44
|
+
more possible.
|
45
|
+
email:
|
50
46
|
- mike@mike-burns.com
|
51
47
|
executables: []
|
52
|
-
|
53
48
|
extensions: []
|
54
|
-
|
55
49
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
|
58
|
-
- .gitignore
|
50
|
+
files:
|
51
|
+
- ".gitignore"
|
59
52
|
- Gemfile
|
60
53
|
- LICENSE
|
61
54
|
- README.md
|
62
55
|
- Rakefile
|
56
|
+
- bin/rake
|
57
|
+
- bin/rspec
|
63
58
|
- lib/wrapped.rb
|
64
59
|
- lib/wrapped/blank.rb
|
65
60
|
- lib/wrapped/injection.rb
|
@@ -69,37 +64,27 @@ files:
|
|
69
64
|
- spec/wrapped_spec.rb
|
70
65
|
- wrapped.gemspec
|
71
66
|
homepage: http://github.com/mike-burns/wrapped
|
72
|
-
licenses:
|
67
|
+
licenses:
|
73
68
|
- BSD
|
69
|
+
metadata: {}
|
74
70
|
post_install_message:
|
75
71
|
rdoc_options: []
|
76
|
-
|
77
|
-
require_paths:
|
72
|
+
require_paths:
|
78
73
|
- lib
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
-
|
81
|
-
requirements:
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
82
76
|
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
version: "0"
|
88
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
91
81
|
- - ">="
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
version: "0"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
97
84
|
requirements: []
|
98
|
-
|
99
85
|
rubyforge_project:
|
100
|
-
rubygems_version:
|
86
|
+
rubygems_version: 2.2.2
|
101
87
|
signing_key:
|
102
|
-
specification_version:
|
88
|
+
specification_version: 4
|
103
89
|
summary: The maybe functor for Ruby
|
104
90
|
test_files: []
|
105
|
-
|