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 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