rfunk 1.7.0 → 2.1.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
- 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: []