wrapped 0.0.2 → 0.0.3
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 +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
|
-
|