possibly 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.
- checksums.yaml +7 -0
- data/lib/possibly.rb +45 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: faca4e0b3b12f2fc14f83b8c58e3018932212630
|
4
|
+
data.tar.gz: 58fa77ff99cd6d0421c6e2366d896953c3c403b3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5fe55dbf369cd712de16b3c26f02f99d0c244e5e96b60b15124f2239afeb75d0607636c508a9b07f675d8562b4bc5ae849e63a754424c9243170a91d8638730e
|
7
|
+
data.tar.gz: f8e8fbb033038790674cd08b4b5b51b33aecb4be5e402839e50e856a21293e5169de7a5aa670f717699828eccf185fbc34b1af12b0948e012d779e421ce8cf62
|
data/lib/possibly.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module Maybe
|
2
|
+
class Maybe
|
3
|
+
([:each] + Enumerable.instance_methods).each do |enumerable_method|
|
4
|
+
define_method(enumerable_method) { |*args, &block|
|
5
|
+
res = __enumerable_value.send(enumerable_method, *args, &block)
|
6
|
+
if res.respond_to?(:each) then Maybe(res.first) else res end
|
7
|
+
}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Some < Maybe
|
12
|
+
def get() @value; end
|
13
|
+
def or_else(els) @value; end
|
14
|
+
def some?() true; end
|
15
|
+
def none?() false; end
|
16
|
+
def initialize(value) @value = value; end
|
17
|
+
def method_missing(method_sym, *args, &block)
|
18
|
+
map { |value| value.send(method_sym, *args, &block) }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def __enumerable_value() [@value]; end
|
23
|
+
end
|
24
|
+
|
25
|
+
class None < Maybe
|
26
|
+
def get() raise "No such element"; end
|
27
|
+
def or_else(els=nil) block_given? ? yield : els; end
|
28
|
+
def some?() false; end
|
29
|
+
def none?() true; end
|
30
|
+
def method_missing(method_sym, *args, &block)
|
31
|
+
None.new
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def __enumerable_value() []; end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def Maybe(value)
|
40
|
+
if value == nil || (value.respond_to?(:length) && value.length == 0)
|
41
|
+
Maybe::None.new()
|
42
|
+
else
|
43
|
+
Maybe::Some.new(value)
|
44
|
+
end
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: possibly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mikko Koski
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email: mikko.koski@iki.fi
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/possibly.rb
|
20
|
+
homepage:
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.2.2
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Maybe monad
|
44
|
+
test_files: []
|