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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b903a5e57ad02cb3ce4aad68527844a54e41c296
4
- data.tar.gz: 52a6223d519be58a35360407524a16391d8a0bae
3
+ metadata.gz: '019b13193329aab02ae682f74d7c7b8adee21edd'
4
+ data.tar.gz: e6a1de1d5538b610a21bced73081f9113d29340e
5
5
  SHA512:
6
- metadata.gz: d3518017a522c77111be0461cb8b13b72e73cafed66628f0187f83d46699bfb41c03a5851a0240bf006c9eb2e21b1bd955df58982946189ff723f880ca571388
7
- data.tar.gz: 7f0a210a7177c8748a99c9d770b6139589712b31c59d34f2592b947e5974d03298a6724b103577ae2c2af147b477c95e52d191edcdd25f5b38a714893dac7760
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.select { |v| v != variable_name }.each do |v|
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
@@ -0,0 +1,6 @@
1
+ module RFunk
2
+ module Match
3
+ class Error < StandardError
4
+ end
5
+ end
6
+ 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.each do |t|
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
- RFunk.none
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
@@ -2,8 +2,24 @@ module RFunk
2
2
  class None < RFunk::Option
3
3
  include Singleton
4
4
 
5
- def value(default = RFunk.none)
6
- RFunk.option(default)
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(value = nil)
50
- RFunk.option(value)
65
+ def none
66
+ RFunk::None.instance
51
67
  end
52
68
  end
53
69
  end
@@ -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 [RFunk::Some, RFunk::None].map { |t| value.is_a?(t) }.any?
15
- value
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
@@ -2,12 +2,20 @@ module RFunk
2
2
  class Some < Option
3
3
  extend Forwardable
4
4
 
5
- def initialize(value)
6
- @value = value
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
- def value(_ = RFunk.none)
10
- @value
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
- [:to_str, :to_ary, :to_hash].each { |k| define_method(k) { value } }
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
@@ -1,3 +1,3 @@
1
1
  module RFunk
2
- VERSION = '1.7.0'.freeze
2
+ VERSION = '1.8.0'.freeze
3
3
  end
data/lib/rfunk.rb CHANGED
@@ -28,3 +28,4 @@ require 'rfunk/either/success'
28
28
  require 'rfunk/tuple'
29
29
  require 'rfunk/match'
30
30
  require 'rfunk/match/pattern'
31
+ require 'rfunk/match/error'
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.7.0
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-02-10 00:00:00.000000000 Z
11
+ date: 2017-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ice_nine
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.11.2
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.11.2
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: '1.0'
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: '1.0'
40
+ version: 1.0.5
41
41
  - !ruby/object:Gem::Dependency
42
- name: concurrent-ruby-ext
42
+ name: hamster
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
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: '1.0'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: hamster
56
+ name: ice_nine
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
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: '3.0'
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.10
207
+ rubygems_version: 2.6.11
179
208
  signing_key:
180
209
  specification_version: 4
181
210
  summary: Functional Programming in Ruby