deterministic 0.2.0 → 0.3.0
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 +4 -4
- data/README.md +23 -3
- data/deterministic.gemspec +1 -1
- data/lib/deterministic/maybe.rb +38 -0
- data/lib/deterministic/version.rb +1 -1
- data/spec/lib/deterministic/core_ext/either_spec.rb +1 -1
- data/spec/lib/deterministic/maybe_spec.rb +19 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73c7677d88bfefa44b35f3001d00eec4ae4d57ba
|
4
|
+
data.tar.gz: c7ea57c2f75c73203303428eb241401951b6e974
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54f36f7a7868f74c04335c3e4d989ee1f5df9263df5bd917f947fed073ae18dc2c218716e56b34eb565f2efcedbad1e4fdcb97b7a695bbc24590bab37b0c5a41
|
7
|
+
data.tar.gz: 3f6065134f25fbe1e36e432466d8c7463557674169911aceeefdfc14860ec7903568f08896eb19a3cdeca61fb8eb09170904b54e6974880dc3e787c2c5a9ea53
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Deterministic
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/deterministic)
|
4
|
+
|
3
5
|
This is a spiritual successor of the [Monadic gem](http://github.com/pzol/monadic). The goal of the rewrite is to get away from a bit to forceful aproach I took in Monadic, especially when it comes to coercing monads, but also a more practical but at the same time more strict adherence to monad laws.
|
4
6
|
|
5
7
|
This gem is still __WORK IN PROGRESS__.
|
@@ -153,6 +155,7 @@ class UnderTest
|
|
153
155
|
end
|
154
156
|
|
155
157
|
ut = UnderTest.new
|
158
|
+
ut.test # => Success(1)
|
156
159
|
```
|
157
160
|
|
158
161
|
To add it to all classes
|
@@ -173,6 +176,7 @@ class UnderTest
|
|
173
176
|
end
|
174
177
|
|
175
178
|
ut = UnderTest.new
|
179
|
+
ut.test # => Success(1)
|
176
180
|
```
|
177
181
|
|
178
182
|
or use it on built-in classes
|
@@ -181,14 +185,30 @@ or use it on built-in classes
|
|
181
185
|
require "deterministic/core_ext/object/either"
|
182
186
|
h = {a:1}
|
183
187
|
h.attempt_all do
|
184
|
-
try { |s|
|
185
|
-
end
|
188
|
+
try { |s| s[:a] + 1}
|
189
|
+
end # => Success(2)
|
190
|
+
```
|
191
|
+
|
192
|
+
## Maybe
|
193
|
+
The simplest NullObject wrapper there can be. It adds `#some?` and `#none?` to `Object` though.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
maybe(nil).foo # => None
|
197
|
+
maybe(nil).foo.bar # => None
|
198
|
+
|
199
|
+
maybe({a: 1})[:a] # => 1
|
200
|
+
|
201
|
+
maybe(nil).none? # => true
|
202
|
+
maybe({}).none? # => false
|
203
|
+
|
204
|
+
maybe(nil).some? # => false
|
205
|
+
maybe({}).some? # => true
|
186
206
|
```
|
187
207
|
|
188
208
|
## Inspirations
|
189
209
|
* My [Monadic gem](http://github.com/pzol/monadic) of course
|
190
210
|
* `#attempt_all` was somewhat inspired by [An error monad in Clojure](http://brehaut.net/blog/2011/error_monads)
|
191
|
-
* [Pithyless' rumblings](https://gist.github.com/pithyless/2216519)
|
211
|
+
* [Pithyless' rumblings](https://gist.github.com/pithyless/2216519)
|
192
212
|
* [either by rsslldnphy](https://github.com/rsslldnphy/either)
|
193
213
|
* [Functors, Applicatives, And Monads In Pictures](http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html)
|
194
214
|
|
data/deterministic.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rspec", "~>3.0.0.
|
23
|
+
spec.add_development_dependency "rspec", "~>3.0.0.beta2"
|
24
24
|
spec.add_development_dependency "guard"
|
25
25
|
spec.add_development_dependency "guard-bundler"
|
26
26
|
spec.add_development_dependency "guard-rspec"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# The simplest NullObject there can be
|
2
|
+
class None
|
3
|
+
def self.instance
|
4
|
+
@instance ||= None.new
|
5
|
+
end
|
6
|
+
|
7
|
+
# def respond_to_missing
|
8
|
+
|
9
|
+
def method_missing(*args)
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def none?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def some?
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
def respond_to?(m)
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Object
|
27
|
+
def none?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
def some?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def maybe(obj)
|
37
|
+
obj.nil? ? None.instance : obj
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'deterministic/maybe'
|
3
|
+
|
4
|
+
describe 'maybe' do
|
5
|
+
it "does something" do
|
6
|
+
expect(maybe(nil).foo).to be_none
|
7
|
+
expect(maybe(nil).foo.bar.baz).to be_none
|
8
|
+
expect(maybe(nil).fetch(:a)).to be_none
|
9
|
+
expect(maybe(1)).to be_some
|
10
|
+
expect(maybe({a: 1}).fetch(:a)).to eq 1
|
11
|
+
expect(maybe({a: 1})[:a]).to eq 1
|
12
|
+
expect(maybe("a").upcase).to eq "A"
|
13
|
+
expect(maybe("a")).not_to be_none
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'Nothing#to_s' do
|
17
|
+
expect(None.to_s).to eq 'None'
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deterministic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Zolnierek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.0.0.
|
47
|
+
version: 3.0.0.beta2
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.0.0.
|
54
|
+
version: 3.0.0.beta2
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/deterministic/either/failure.rb
|
133
133
|
- lib/deterministic/either/match.rb
|
134
134
|
- lib/deterministic/either/success.rb
|
135
|
+
- lib/deterministic/maybe.rb
|
135
136
|
- lib/deterministic/monad.rb
|
136
137
|
- lib/deterministic/version.rb
|
137
138
|
- spec/examples/bookings_spec.rb
|
@@ -142,6 +143,7 @@ files:
|
|
142
143
|
- spec/lib/deterministic/either/match_spec.rb
|
143
144
|
- spec/lib/deterministic/either/success_spec.rb
|
144
145
|
- spec/lib/deterministic/either_spec.rb
|
146
|
+
- spec/lib/deterministic/maybe_spec.rb
|
145
147
|
- spec/lib/deterministic/monad_axioms.rb
|
146
148
|
- spec/lib/deterministic/monad_spec.rb
|
147
149
|
- spec/spec_helper.rb
|
@@ -178,6 +180,7 @@ test_files:
|
|
178
180
|
- spec/lib/deterministic/either/match_spec.rb
|
179
181
|
- spec/lib/deterministic/either/success_spec.rb
|
180
182
|
- spec/lib/deterministic/either_spec.rb
|
183
|
+
- spec/lib/deterministic/maybe_spec.rb
|
181
184
|
- spec/lib/deterministic/monad_axioms.rb
|
182
185
|
- spec/lib/deterministic/monad_spec.rb
|
183
186
|
- spec/spec_helper.rb
|