maybe-nothing 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ == 0.0.1
2
+
3
+ Initial setup.
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