possibly 0.1.1 → 0.2.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.
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