possibly 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/possibly.rb +96 -44
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cf0c28ff9108d13c195b75d9ab640c4fbb89e5d
4
- data.tar.gz: ade9b40c9f900829763e26ee74da33f0cc85e03a
3
+ metadata.gz: 88d90724eacd2027f146e147fe9b3b44d70e11d9
4
+ data.tar.gz: 69d10e194d938c8c27ec131a69296d7dca8d597a
5
5
  SHA512:
6
- metadata.gz: 6ff9000f7a0e4af7135f6ba6a2b32c40a61f145a72b1ea2438ec7b198456b421dc94b2a4962d1a9fddb85ad466e66966897ded0c66f4e2417d9878f2fb29d38a
7
- data.tar.gz: 845273cadfecadc3dd953aa181e36fc5b92fcb944072c9dc86dcddba62b4d3695cda648b5abd0a8411c04a092789d342721ab8df72621a7213d5a4be8cf6f106
6
+ metadata.gz: a8e95af1c6849dc749e809df67539585abacb495d74f3100a7ad08dd825dc4a645615bffa98c40f0ab7e3561368c268c84262e683bb44df9242ee23dd7c9202d
7
+ data.tar.gz: 638e0c13f133d4d1f03d655e2efa24da79a623fb798e0ea6cb0b2f5323bfc8768ff2b16a3377082399b0a9e9941e3f3af02c94e3aef11900c6540328e9ab494a
data/lib/possibly.rb CHANGED
@@ -1,59 +1,111 @@
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
- }
1
+ class Maybe
2
+ ([:each] + Enumerable.instance_methods).each do |enumerable_method|
3
+ define_method(enumerable_method) do |*args, &block|
4
+ res = __enumerable_value.send(enumerable_method, *args, &block)
5
+ res.respond_to?(:each) ? Maybe(res.first) : res
8
6
  end
7
+ end
9
8
 
10
- def to_ary
11
- __enumerable_value
12
- end
13
- alias_method :to_a, :to_ary
9
+ def to_ary
10
+ __enumerable_value
11
+ end
12
+ alias_method :to_a, :to_ary
14
13
 
15
- def ==(o)
16
- o.class == self.class
17
- end
18
- alias_method :eql?, :==
14
+ def ==(other)
15
+ other.class == self.class
19
16
  end
17
+ alias_method :eql?, :==
18
+ end
20
19
 
21
- class Some < Maybe
22
- def get() @value; end
23
- def or_else(els=nil) @value; end
24
- def is_some?() true; end
25
- def is_none?() false; end
26
- def initialize(value) @value = value; end
27
- def ==(o)
28
- super && get == o.get
29
- end
30
- alias_method :eql?, :==
31
- def method_missing(method_sym, *args, &block)
32
- map { |value| value.send(method_sym, *args, &block) }
33
- end
20
+ # Represents a non-empty value
21
+ class Some < Maybe
22
+ def initialize(value)
23
+ @value = value
24
+ end
34
25
 
35
- private
36
- def __enumerable_value() [@value]; end
26
+ def get
27
+ @value
37
28
  end
38
29
 
39
- class None < Maybe
40
- def get() raise "No such element"; end
41
- def or_else(els=nil) block_given? ? yield : els; end
42
- def is_some?() false; end
43
- def is_none?() true; end
44
- def method_missing(method_sym, *args, &block)
45
- None.new
46
- end
30
+ def or_else(*)
31
+ @value
32
+ end
33
+
34
+ # rubocop:disable PredicateName
35
+ def is_some?
36
+ true
37
+ end
38
+
39
+ def is_none?
40
+ false
41
+ end
42
+ # rubocop:enable PredicateName
43
+
44
+ def ==(other)
45
+ super && get == other.get
46
+ end
47
+ alias_method :eql?, :==
48
+
49
+ def ===(other)
50
+ other && other.class == self.class && @value === other.get
51
+ end
52
+
53
+ def method_missing(method_sym, *args, &block)
54
+ map { |value| value.send(method_sym, *args, &block) }
55
+ end
47
56
 
48
- private
49
- def __enumerable_value() []; end
57
+ private
58
+
59
+ def __enumerable_value
60
+ [@value]
61
+ end
62
+ end
63
+
64
+ # Represents an empty value
65
+ class None < Maybe
66
+ def get
67
+ fail 'No such element'
68
+ end
69
+
70
+ def or_else(els = nil)
71
+ block_given? ? yield : els
72
+ end
73
+
74
+ # rubocop:disable PredicateName
75
+ def is_some?
76
+ false
77
+ end
78
+
79
+ def is_none?
80
+ true
81
+ end
82
+ # rubocop:enable PredicateName
83
+
84
+ def method_missing(*)
85
+ self
86
+ end
87
+
88
+ private
89
+
90
+ def __enumerable_value
91
+ []
50
92
  end
51
93
  end
52
94
 
95
+ # rubocop:disable MethodName
53
96
  def Maybe(value)
54
- if value == nil || (value.respond_to?(:length) && value.length == 0)
55
- Maybe::None.new()
97
+ if value.nil? || (value.respond_to?(:length) && value.length == 0)
98
+ None()
56
99
  else
57
- Maybe::Some.new(value)
100
+ Some(value)
58
101
  end
59
- end
102
+ end
103
+
104
+ def Some(value)
105
+ Some.new(value)
106
+ end
107
+
108
+ def None
109
+ None.new
110
+ end
111
+ # rubocop:enable MethodName
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: possibly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikko Koski