rfunk 1.7.0 → 2.1.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
- SHA1:
3
- metadata.gz: b903a5e57ad02cb3ce4aad68527844a54e41c296
4
- data.tar.gz: 52a6223d519be58a35360407524a16391d8a0bae
2
+ SHA256:
3
+ metadata.gz: dc3829e8c2bfd946b7cb83442b4dc14576c7491c559e7cd813b35a02ea0f7624
4
+ data.tar.gz: c30bcb3d0f9c431195fbde08a6d2d505f8328d4ccb129bd4b1b5535b57aad0d5
5
5
  SHA512:
6
- metadata.gz: d3518017a522c77111be0461cb8b13b72e73cafed66628f0187f83d46699bfb41c03a5851a0240bf006c9eb2e21b1bd955df58982946189ff723f880ca571388
7
- data.tar.gz: 7f0a210a7177c8748a99c9d770b6139589712b31c59d34f2592b947e5974d03298a6724b103577ae2c2af147b477c95e52d191edcdd25f5b38a714893dac7760
6
+ metadata.gz: 1f1dd8062fef1b43d246d413a47d653b244e880132d937b4b47e6aab5b5e28c715384d0b6a0a969d5610aebdb51a3e5a3f8ddc70dd35df0e41a7f2fa9d32cad9
7
+ data.tar.gz: a9024ba13ff865215a690f0454df329155219e5e0c7cad44b3546de44778625b67eaedff809d8bb36ce934702dcfcc6777353a49eee38b3885eea2ab41d81b45
@@ -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'
@@ -1,11 +1,7 @@
1
1
  module RFunk
2
2
  module AttributeDefinition
3
3
  def attribute(name, type, options = {})
4
- RFunk::AttributeVariable.new.add(instance: self,
5
- name: name,
6
- type: type,
7
- options: options)
8
-
4
+ RFunk::AttributeVariable.new.add(instance: self, name: name, type: type, options: options)
9
5
  create_method(name, type)
10
6
  end
11
7
 
@@ -15,9 +11,7 @@ module RFunk
15
11
  define_method(name) do |value = nil|
16
12
  if value
17
13
  RFunk::ErrorChecking.new.raise_expected_attribute_type(name, value, type)
18
- RFunk::Immutable.new.create(instance: self,
19
- variable_name: variable_name(name),
20
- value: value)
14
+ RFunk::Immutable.new.create(instance: self, variable_name: variable_name(name), value: value)
21
15
  else
22
16
  RFunk.option(instance_variable_get(variable_name(name)))
23
17
  end
@@ -18,6 +18,7 @@ module RFunk
18
18
 
19
19
  def raise_not_found(key, attributes)
20
20
  return if attributes.key?(key)
21
+
21
22
  message = "Attribute with name '#{key}' does not exist. The only available attributes are '#{attributes.keys}'"
22
23
  raise RFunk::NotFoundError, message
23
24
  end
@@ -54,6 +55,7 @@ module RFunk
54
55
 
55
56
  def raise_type(name, value, type, message)
56
57
  return if value.is_a?(type)
58
+
57
59
  raise TypeError, "Expected a type of '#{type}' for #{message} '#{name}'"
58
60
  end
59
61
  end
@@ -26,6 +26,7 @@ module RFunk
26
26
 
27
27
  def assert(&_)
28
28
  return true if yield
29
+
29
30
  raise RFunk::AssertionError
30
31
  end
31
32
 
@@ -73,17 +74,16 @@ module RFunk
73
74
 
74
75
  def execute_block(block, error)
75
76
  return unless block
77
+
76
78
  instance_eval(&block).tap { |r| error_checking.raise_condition_error(error, r) }
77
79
  end
78
80
 
79
81
  def error_checking
80
- RFunk.lazy(-> { RFunk::ErrorChecking.new }).value
82
+ @error_checking ||= RFunk::ErrorChecking.new
81
83
  end
82
84
 
83
85
  def validate_return_type(return_value)
84
- error_checking.raise_expected_return_type(function_name.value,
85
- return_value,
86
- type_annotation.return)
86
+ error_checking.raise_expected_return_type(function_name.value, return_value, type_annotation.return)
87
87
  end
88
88
 
89
89
  def validate_parameter_types(*args)
@@ -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
@@ -41,7 +41,7 @@ module RFunk
41
41
 
42
42
  def either_with_lambda(lambda)
43
43
  RFunk.success(lambda.call)
44
- rescue => e
44
+ rescue StandardError => e
45
45
  RFunk.failure(e)
46
46
  end
47
47
 
@@ -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
@@ -0,0 +1,6 @@
1
+ module RFunk
2
+ module Match
3
+ class Error < StandardError
4
+ end
5
+ end
6
+ 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
@@ -1,33 +1,25 @@
1
1
  module RFunk
2
2
  class Option
3
3
  include Enumerable
4
+ extend Forwardable
4
5
 
5
- def each(&block)
6
- return enum_for(:enum) if block.nil?
6
+ class << self
7
+ def inherited(subclass)
8
+ @descendants ||= []
9
+ @descendants << subclass
10
+ end
7
11
 
8
- enum.each { |v| yield v }
12
+ attr_reader :descendants
9
13
  end
14
+
15
+ def_delegators :enum, :each
10
16
  end
11
17
 
12
18
  class << self
13
19
  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
20
+ return value if RFunk::Option.descendants.map { |t| value.is_a?(t) }.any?
28
21
 
29
- def empty?(value)
30
- value.respond_to?(:empty?) && value.empty?
22
+ RFunk::Option.descendants.find { |c| c.satisfies?(value) }.create(value)
31
23
  end
32
24
  end
33
25
  end
@@ -1,15 +1,21 @@
1
1
  module RFunk
2
2
  class Some < Option
3
- extend Forwardable
3
+ class << self
4
+ def create(value)
5
+ new(value)
6
+ end
7
+
8
+ def satisfies?(value)
9
+ !value.nil?
10
+ end
11
+ end
12
+
13
+ attr_reader :value
4
14
 
5
15
  def initialize(value)
6
16
  @value = value
7
17
  end
8
18
 
9
- def value(_ = RFunk.none)
10
- @value
11
- end
12
-
13
19
  alias identity value
14
20
 
15
21
  def or(_)
@@ -18,6 +24,7 @@ module RFunk
18
24
 
19
25
  def pipe(&block)
20
26
  return self if block.nil?
27
+
21
28
  RFunk.option(yield value)
22
29
  end
23
30
 
@@ -26,8 +33,7 @@ module RFunk
26
33
  end
27
34
 
28
35
  def ==(other)
29
- return false unless self.class == other.class
30
- value == RFunk.option(other).value
36
+ value == other.value
31
37
  end
32
38
 
33
39
  def <=>(other)
@@ -38,7 +44,7 @@ module RFunk
38
44
  [other, value]
39
45
  end
40
46
 
41
- [:to_str, :to_ary, :to_hash].each { |k| define_method(k) { value } }
47
+ %i[to_str to_ary to_hash].each { |k| define_method(k) { value } }
42
48
 
43
49
  def key
44
50
  :some
@@ -1,3 +1,3 @@
1
1
  module RFunk
2
- VERSION = '1.7.0'.freeze
2
+ VERSION = '2.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,73 +1,79 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfunk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Falkowski
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-10 00:00:00.000000000 Z
11
+ date: 2020-10-31 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.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.7
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 0.11.2
29
+ version: '1.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.7
27
33
  - !ruby/object:Gem::Dependency
28
- name: concurrent-ruby
34
+ name: hamster
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '1.0'
39
+ version: '3.0'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '1.0'
46
+ version: '3.0'
41
47
  - !ruby/object:Gem::Dependency
42
- name: concurrent-ruby-ext
48
+ name: ice_nine
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '1.0'
53
+ version: 0.11.2
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '1.0'
60
+ version: 0.11.2
55
61
  - !ruby/object:Gem::Dependency
56
- name: hamster
62
+ name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - "~>"
65
+ - - ">="
60
66
  - !ruby/object:Gem::Version
61
- version: '3.0'
62
- type: :runtime
67
+ version: '0'
68
+ type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - "~>"
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
- version: '3.0'
74
+ version: '0'
69
75
  - !ruby/object:Gem::Dependency
70
- name: rake
76
+ name: rspec
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - ">="
@@ -81,7 +87,7 @@ dependencies:
81
87
  - !ruby/object:Gem::Version
82
88
  version: '0'
83
89
  - !ruby/object:Gem::Dependency
84
- name: rspec
90
+ name: rspec-given
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - ">="
@@ -95,7 +101,7 @@ dependencies:
95
101
  - !ruby/object:Gem::Version
96
102
  version: '0'
97
103
  - !ruby/object:Gem::Dependency
98
- name: rspec-given
104
+ name: rspec_junit_formatter
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
107
  - - ">="
@@ -122,6 +128,20 @@ dependencies:
122
128
  - - ">="
123
129
  - !ruby/object:Gem::Version
124
130
  version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: simplecov
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
125
145
  description: See https://github.com/alexfalkowski/rfunk/blob/master/README.md
126
146
  email:
127
147
  - alexrfalkowski@gmail.com
@@ -149,6 +169,7 @@ files:
149
169
  - lib/rfunk/either/success.rb
150
170
  - lib/rfunk/lazy.rb
151
171
  - lib/rfunk/match.rb
172
+ - lib/rfunk/match/error.rb
152
173
  - lib/rfunk/match/pattern.rb
153
174
  - lib/rfunk/maybe/none.rb
154
175
  - lib/rfunk/maybe/option.rb
@@ -159,7 +180,7 @@ homepage: https://github.com/alexfalkowski/rfunk
159
180
  licenses:
160
181
  - MIT
161
182
  metadata: {}
162
- post_install_message:
183
+ post_install_message:
163
184
  rdoc_options: []
164
185
  require_paths:
165
186
  - lib
@@ -167,16 +188,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
188
  requirements:
168
189
  - - ">="
169
190
  - !ruby/object:Gem::Version
170
- version: '0'
191
+ version: 2.7.0
192
+ - - "<"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.8.0
171
195
  required_rubygems_version: !ruby/object:Gem::Requirement
172
196
  requirements:
173
197
  - - ">="
174
198
  - !ruby/object:Gem::Version
175
199
  version: '0'
176
200
  requirements: []
177
- rubyforge_project:
178
- rubygems_version: 2.6.10
179
- signing_key:
201
+ rubygems_version: 3.1.4
202
+ signing_key:
180
203
  specification_version: 4
181
204
  summary: Functional Programming in Ruby
182
205
  test_files: []