maybe-nothing 0.0.1
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.
- data/History.txt +3 -0
- data/README.md +44 -0
- data/lib/maybe-nothing.rb +47 -0
- data/spec/maybe-nothing_spec.rb +49 -0
- metadata +55 -0
data/History.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
Introduction
|
2
|
+
============
|
3
|
+
|
4
|
+
This gem is based in its entirety on code and ideas found in Joe Ferris's post here:
|
5
|
+
|
6
|
+
http://robots.thoughtbot.com/post/8181879506/if-you-gaze-into-nil-nil-gazes-also-into-you
|
7
|
+
|
8
|
+
|
9
|
+
Usage
|
10
|
+
=====
|
11
|
+
|
12
|
+
If an object might be nil, call .maybe to wrap it:
|
13
|
+
|
14
|
+
def get_user(id)
|
15
|
+
Users.find(id).maybe
|
16
|
+
end
|
17
|
+
|
18
|
+
You can unwrap objects like such:
|
19
|
+
|
20
|
+
user_wrapped = get_user
|
21
|
+
if user_wrapped.present?
|
22
|
+
user = user_wrapped.get
|
23
|
+
else
|
24
|
+
user = User.new
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
Methods
|
29
|
+
=======
|
30
|
+
|
31
|
+
To retrieve the object that has been wrapped, use .get. This method will raise an Unwrapped exception if called on nil.maybe.
|
32
|
+
|
33
|
+
object.maybe.get # returns object
|
34
|
+
nil.maybe.get # raises MaybeNothing::None::Unwrapped exception
|
35
|
+
|
36
|
+
|
37
|
+
To check if the wrapped object is nil, use present? or blank?.
|
38
|
+
|
39
|
+
object.maybe.present? # returns true
|
40
|
+
object.maybe.blank? # returns false
|
41
|
+
|
42
|
+
|
43
|
+
nil.maybe.present? # returns false
|
44
|
+
nil.maybe.blank? # returns true
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Object
|
2
|
+
def maybe
|
3
|
+
MaybeNothing::Some.new(self)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class NilClass
|
8
|
+
def maybe
|
9
|
+
MaybeNothing::None.new
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module MaybeNothing
|
14
|
+
class Some
|
15
|
+
def initialize(object)
|
16
|
+
@object = object
|
17
|
+
end
|
18
|
+
|
19
|
+
def get
|
20
|
+
@object
|
21
|
+
end
|
22
|
+
|
23
|
+
def present?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def blank?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class None
|
33
|
+
class Unwrapped < StandardError; end
|
34
|
+
|
35
|
+
def get
|
36
|
+
raise Unwrapped
|
37
|
+
end
|
38
|
+
|
39
|
+
def present?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
def blank?
|
44
|
+
true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../lib/maybe-nothing.rb'
|
2
|
+
|
3
|
+
describe '@non_nil.maybe' do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@non_nil = Object.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.get' do
|
10
|
+
it 'should return @non_nil' do
|
11
|
+
@non_nil.maybe.get.should equal @non_nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '.present?' do
|
16
|
+
it 'should return true' do
|
17
|
+
@non_nil.maybe.present?.should equal true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.blank?' do
|
22
|
+
it 'should return false' do
|
23
|
+
@non_nil.maybe.blank?.should equal false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'nil.maybe' do
|
30
|
+
|
31
|
+
describe '.get' do
|
32
|
+
it 'should raise an exception' do
|
33
|
+
lambda{nil.maybe.get}.should raise_exception('MaybeNothing::None::Unwrapped')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.present?' do
|
38
|
+
it 'should return false' do
|
39
|
+
nil.maybe.present?.should equal false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '.blank?' do
|
44
|
+
it 'should return true' do
|
45
|
+
nil.maybe.blank?.should equal true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: maybe-nothing
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joe Ferris
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-07-29 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description:
|
16
|
+
email:
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files:
|
20
|
+
- History.txt
|
21
|
+
- README.md
|
22
|
+
files:
|
23
|
+
- History.txt
|
24
|
+
- README.md
|
25
|
+
- lib/maybe-nothing.rb
|
26
|
+
- spec/maybe-nothing_spec.rb
|
27
|
+
has_rdoc: true
|
28
|
+
homepage: https://github.com/jpadvo/maybe-nothing
|
29
|
+
licenses: []
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options:
|
32
|
+
- --main
|
33
|
+
- README.md
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.6.2
|
51
|
+
signing_key:
|
52
|
+
specification_version: 3
|
53
|
+
summary: Adds a simple nil wrapping construct to Ruby
|
54
|
+
test_files:
|
55
|
+
- spec/maybe-nothing_spec.rb
|