maybe-chain 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ script: "bundle exec rake spec build"
3
+ rvm:
4
+ - 1.9.3
5
+ - 1.9.2
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # maybe-chain
2
-
2
+ [![Build Status](https://secure.travis-ci.org/joker1007/maybe-chain.png?branch=master)](https://travis-ci.org/joker1007/maybe-chain)
3
3
  ## Installation
4
4
 
5
5
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,2 +1,5 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+ require "rspec/core/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
@@ -13,17 +13,21 @@ module MaybeChain
13
13
  @rescuables = rescuables
14
14
  end
15
15
 
16
- if obj.nil?
17
- @obj = Nothing.instance
18
- else
19
- @obj = obj
20
- end
16
+ @obj = obj.nil? ? Nothing.instance : obj
21
17
  end
22
18
 
23
19
  def __getobj__
24
20
  @obj
25
21
  end
26
22
 
23
+ def inspect
24
+ "<Maybe: #{@obj.inspect}>"
25
+ end
26
+
27
+ def to_s
28
+ @obj.to_s
29
+ end
30
+
27
31
  def method_missing(m, *args, &block)
28
32
  if nothing?
29
33
  self.__getobj__.__send__(m, @rescuables, &block)
@@ -31,7 +35,7 @@ module MaybeChain
31
35
  MaybeWrapper.new(super, @rescuables)
32
36
  end
33
37
  rescue *@rescuables
34
- MaybeWrapper.new(Nothing.instance, @rescuables)
38
+ build_nothing
35
39
  end
36
40
 
37
41
  def nothing?
@@ -43,17 +47,36 @@ module MaybeChain
43
47
  end
44
48
 
45
49
  def value
46
- if nothing?
47
- nil
48
- else
49
- @obj
50
- end
50
+ nothing? ? nil : @obj
51
+ end
52
+
53
+ def lift(method_name, *args, &block)
54
+ return build_nothing if nothing?
55
+ return build_nothing if args.any?(&:nothing?)
56
+
57
+ extracts = args.map {|arg| arg.is_a?(MaybeChain::MaybeWrapper) ? arg.value : arg}
58
+ MaybeWrapper.new(value.__send__(method_name, *extracts, &block), @rescuables)
59
+ rescue *@rescuables
60
+ build_nothing
61
+ end
62
+
63
+ private
64
+ def build_nothing
65
+ self.class.new(Nothing.instance, @rescuables)
51
66
  end
52
67
  end
53
68
 
54
69
  class Nothing
55
70
  include Singleton
56
71
 
72
+ def inspect
73
+ "Nothing"
74
+ end
75
+
76
+ def to_s
77
+ "Nothing"
78
+ end
79
+
57
80
  def method_missing(method, *args, &block)
58
81
  rescuables = args.first || []
59
82
  MaybeWrapper.new(self, rescuables)
@@ -67,22 +90,17 @@ module MaybeChain
67
90
  end
68
91
 
69
92
  module KernelExtend
70
- def maybe(maybe_wrapper, default = nil, &block)
71
- if maybe_wrapper.just?
72
- block.call(maybe_wrapper.value)
73
- elsif default
74
- block.call(default)
75
- end
76
- end
77
93
  end
78
94
  end
79
95
 
80
96
  Object.__send__ :include, MaybeChain::ObjectExtend
81
97
 
82
98
  module Kernel
83
- include MaybeChain::KernelExtend
84
- end
85
-
86
- class << self
87
- include MaybeChain::KernelExtend
99
+ def maybe(maybe_wrapper, default = nil, &block)
100
+ if maybe_wrapper.just?
101
+ block.call(maybe_wrapper.value)
102
+ elsif default
103
+ block.call(default)
104
+ end
105
+ end
88
106
  end
@@ -1,3 +1,3 @@
1
1
  module MaybeChain
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -16,5 +16,6 @@ Gem::Specification.new do |gem|
16
16
  gem.version = MaybeChain::VERSION
17
17
 
18
18
  gem.add_development_dependency('rspec', '~>2.11.0')
19
+ gem.add_development_dependency('rspec-formatter-git_auto_commit')
19
20
  gem.add_development_dependency('rake')
20
21
  end
@@ -62,11 +62,7 @@ describe MaybeChain do
62
62
  end
63
63
  end
64
64
 
65
- describe
66
-
67
65
  describe "maybe extraction" do
68
- include Kernel
69
-
70
66
  context "maybe is just" do
71
67
  let(:maybe_obj) { "a".to_maybe.upcase }
72
68
  it "execute block" do
@@ -92,6 +88,32 @@ describe MaybeChain do
92
88
  end
93
89
  end
94
90
 
91
+ describe "#lift" do
92
+ subject { 1.to_maybe.lift(:+, 2.to_maybe) }
93
+
94
+ it { should be_a(MaybeChain::MaybeWrapper) }
95
+
96
+ its(:value) { should eq 3 }
97
+
98
+ context "given block" do
99
+ subject { [1, 2, 3].to_maybe.lift(:inject, 0.to_maybe) do |acc, i|
100
+ acc += i
101
+ end }
102
+
103
+ it { should be_a(MaybeChain::MaybeWrapper) }
104
+
105
+ its(:value) { should eq 6 }
106
+ end
107
+
108
+ context "arguments have nothing" do
109
+ subject { 1.to_maybe.lift(:+, nil.to_maybe) }
110
+
111
+ it { should be_a(MaybeChain::MaybeWrapper) }
112
+
113
+ its(:value) { should eq nil }
114
+ end
115
+ end
116
+
95
117
  module MaybeChain::TestMethod
96
118
  def return_nil
97
119
  nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maybe-chain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-08 00:00:00.000000000 Z
12
+ date: 2012-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.11.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec-formatter-git_auto_commit
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: rake
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +67,7 @@ extensions: []
51
67
  extra_rdoc_files: []
52
68
  files:
53
69
  - .gitignore
70
+ - .travis.yml
54
71
  - Gemfile
55
72
  - LICENSE
56
73
  - README.md
@@ -73,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
90
  version: '0'
74
91
  segments:
75
92
  - 0
76
- hash: 3746417588349921974
93
+ hash: -173041830012916601
77
94
  required_rubygems_version: !ruby/object:Gem::Requirement
78
95
  none: false
79
96
  requirements:
@@ -82,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
99
  version: '0'
83
100
  segments:
84
101
  - 0
85
- hash: 3746417588349921974
102
+ hash: -173041830012916601
86
103
  requirements: []
87
104
  rubyforge_project:
88
105
  rubygems_version: 1.8.23