rfunk 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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