rfunk 1.7.0 → 1.8.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/lib/rfunk/attribute/immutable.rb +1 -1
- data/lib/rfunk/match/error.rb +6 -0
- data/lib/rfunk/match.rb +4 -4
- data/lib/rfunk/maybe/none.rb +20 -4
- data/lib/rfunk/maybe/option.rb +11 -17
- data/lib/rfunk/maybe/some.rb +13 -5
- data/lib/rfunk/version.rb +1 -1
- data/lib/rfunk.rb +1 -0
- metadata +44 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '019b13193329aab02ae682f74d7c7b8adee21edd'
|
4
|
+
data.tar.gz: e6a1de1d5538b610a21bced73081f9113d29340e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 298044ffbc4d407854f85a12b213869fe7417720e66076ce48bf7a29f521418d834f5b3076471ba1e8357d7e4d0c9ae27f81a3d52c1b1378c75b9c72a7d42a2e
|
7
|
+
data.tar.gz: b5b035e47f6212b87e1d13a086ba7477bb78f1dbc4b1af8f0f4b38a2b542994ab9f49e4bd0e4efb188e7252b53a986783d17cd1bae23fa3e2f240799bb018c92
|
@@ -20,7 +20,7 @@ module RFunk
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def create_instance_variables(instance, object, variable_name)
|
23
|
-
instance.instance_variables.
|
23
|
+
instance.instance_variables.reject { |v| v == variable_name }.each do |v|
|
24
24
|
previous_value = instance.instance_variable_get(v)
|
25
25
|
object.instance_variable_set(v, previous_value)
|
26
26
|
end
|
data/lib/rfunk/match.rb
CHANGED
@@ -4,11 +4,11 @@ module RFunk
|
|
4
4
|
pattern = RFunk::Match::Pattern.new
|
5
5
|
yield(pattern)
|
6
6
|
|
7
|
-
pattern.cases.
|
8
|
-
return t.last.call(option.identity) if t.first == option.key
|
9
|
-
end
|
7
|
+
pattern_case = pattern.cases.find { |t| t.first == option.key || t.first == :_ }
|
10
8
|
|
11
|
-
|
9
|
+
return pattern_case.last.call(option.identity) if pattern_case
|
10
|
+
|
11
|
+
raise RFunk::Match::Error, "Could not match for option '#{option.key}'."
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/rfunk/maybe/none.rb
CHANGED
@@ -2,8 +2,24 @@ module RFunk
|
|
2
2
|
class None < RFunk::Option
|
3
3
|
include Singleton
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
class << self
|
6
|
+
def create(_)
|
7
|
+
instance
|
8
|
+
end
|
9
|
+
|
10
|
+
def satisfies?(value)
|
11
|
+
value.nil? || empty?(value)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def empty?(value)
|
17
|
+
value.respond_to?(:empty?) && value.empty?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def value
|
22
|
+
RFunk::None.instance
|
7
23
|
end
|
8
24
|
|
9
25
|
def or(other)
|
@@ -46,8 +62,8 @@ module RFunk
|
|
46
62
|
end
|
47
63
|
|
48
64
|
class << self
|
49
|
-
def none
|
50
|
-
RFunk.
|
65
|
+
def none
|
66
|
+
RFunk::None.instance
|
51
67
|
end
|
52
68
|
end
|
53
69
|
end
|
data/lib/rfunk/maybe/option.rb
CHANGED
@@ -2,6 +2,15 @@ module RFunk
|
|
2
2
|
class Option
|
3
3
|
include Enumerable
|
4
4
|
|
5
|
+
class << self
|
6
|
+
def inherited(subclass)
|
7
|
+
@descendants ||= []
|
8
|
+
@descendants << subclass
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :descendants
|
12
|
+
end
|
13
|
+
|
5
14
|
def each(&block)
|
6
15
|
return enum_for(:enum) if block.nil?
|
7
16
|
|
@@ -11,23 +20,8 @@ module RFunk
|
|
11
20
|
|
12
21
|
class << self
|
13
22
|
def option(value)
|
14
|
-
if
|
15
|
-
|
16
|
-
elsif nothing?(value)
|
17
|
-
RFunk::None.instance
|
18
|
-
else
|
19
|
-
RFunk::Some.new(value)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def nothing?(value)
|
26
|
-
value.nil? || empty?(value) || value == RFunk::None.instance
|
27
|
-
end
|
28
|
-
|
29
|
-
def empty?(value)
|
30
|
-
value.respond_to?(:empty?) && value.empty?
|
23
|
+
return value if RFunk::Option.descendants.map { |t| value.is_a?(t) }.any?
|
24
|
+
RFunk::Option.descendants.find { |c| c.satisfies?(value) }.create(value)
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
data/lib/rfunk/maybe/some.rb
CHANGED
@@ -2,12 +2,20 @@ module RFunk
|
|
2
2
|
class Some < Option
|
3
3
|
extend Forwardable
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
class << self
|
6
|
+
def create(value)
|
7
|
+
new(value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def satisfies?(value)
|
11
|
+
!value.nil?
|
12
|
+
end
|
7
13
|
end
|
8
14
|
|
9
|
-
|
10
|
-
|
15
|
+
attr_reader :value
|
16
|
+
|
17
|
+
def initialize(value)
|
18
|
+
@value = value
|
11
19
|
end
|
12
20
|
|
13
21
|
alias identity value
|
@@ -38,7 +46,7 @@ module RFunk
|
|
38
46
|
[other, value]
|
39
47
|
end
|
40
48
|
|
41
|
-
[
|
49
|
+
%i[to_str to_ary to_hash].each { |k| define_method(k) { value } }
|
42
50
|
|
43
51
|
def key
|
44
52
|
:some
|
data/lib/rfunk/version.rb
CHANGED
data/lib/rfunk.rb
CHANGED
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Falkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: concurrent-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 1.0.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 1.0.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: concurrent-ruby
|
28
|
+
name: concurrent-ruby-ext
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.0.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.0.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: hamster
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.0'
|
48
48
|
type: :runtime
|
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: '
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: ice_nine
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.11.2
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.11.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec_junit_formatter
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rubocop
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +136,20 @@ dependencies:
|
|
122
136
|
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: simplecov
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
125
153
|
description: See https://github.com/alexfalkowski/rfunk/blob/master/README.md
|
126
154
|
email:
|
127
155
|
- alexrfalkowski@gmail.com
|
@@ -149,6 +177,7 @@ files:
|
|
149
177
|
- lib/rfunk/either/success.rb
|
150
178
|
- lib/rfunk/lazy.rb
|
151
179
|
- lib/rfunk/match.rb
|
180
|
+
- lib/rfunk/match/error.rb
|
152
181
|
- lib/rfunk/match/pattern.rb
|
153
182
|
- lib/rfunk/maybe/none.rb
|
154
183
|
- lib/rfunk/maybe/option.rb
|
@@ -175,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
204
|
version: '0'
|
176
205
|
requirements: []
|
177
206
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.6.
|
207
|
+
rubygems_version: 2.6.11
|
179
208
|
signing_key:
|
180
209
|
specification_version: 4
|
181
210
|
summary: Functional Programming in Ruby
|