rfunk 0.10.0 → 1.0.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/attribute.rb +3 -3
- data/lib/rfunk/attribute/attribute_definition.rb +9 -9
- data/lib/rfunk/attribute/attribute_function.rb +4 -4
- data/lib/rfunk/attribute/attribute_variable.rb +1 -1
- data/lib/rfunk/attribute/error_checking.rb +5 -5
- data/lib/rfunk/attribute/function.rb +8 -8
- data/lib/rfunk/attribute/type_annotation.rb +8 -17
- data/lib/rfunk/either/either.rb +2 -2
- data/lib/rfunk/either/failure.rb +2 -2
- data/lib/rfunk/either/success.rb +1 -1
- data/lib/rfunk/lazy.rb +2 -2
- data/lib/rfunk/maybe/none.rb +4 -4
- data/lib/rfunk/maybe/option.rb +4 -4
- data/lib/rfunk/maybe/some.rb +3 -3
- data/lib/rfunk/tuple.rb +3 -5
- data/lib/rfunk/version.rb +1 -1
- data/lib/rfunk.rb +0 -2
- metadata +27 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d842be09b09aa3bd5fef713471aea24b9072965d
|
4
|
+
data.tar.gz: 53415832787bb21820efb40e8280dd550e0843a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6952bb646f377abcf5731c686385165e4b602ea9af3a7a352757dd343991ea927750022be1379765bfbe9e0d97ff171f48f2b0d5592a0917ee2f0628c2beaaa1
|
7
|
+
data.tar.gz: 40ffc430e2e6710a26fb6f88dcc15b7c3b2a38ae252cdd4862019fd244028a5cd23a5e742705bb7982261ebe4703f3ffdf7273c1118624b6f7cf84aa5b69ad6b
|
@@ -13,7 +13,7 @@ module RFunk
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def attributes
|
16
|
-
AttributeVariable.new.attributes(self.class)
|
16
|
+
RFunk::AttributeVariable.new.attributes(self.class)
|
17
17
|
end
|
18
18
|
|
19
19
|
def with_defaults
|
@@ -25,13 +25,13 @@ module RFunk
|
|
25
25
|
|
26
26
|
def with_attributes(options)
|
27
27
|
options.each { |key, value|
|
28
|
-
ErrorChecking.new.raise_not_found(key, attributes)
|
28
|
+
RFunk::ErrorChecking.new.raise_not_found(key, attributes)
|
29
29
|
set_variable(attributes[key], key, value)
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
33
33
|
def set_variable(attribute, key, value)
|
34
|
-
ErrorChecking.new.raise_expected_attribute_type(key, value, attribute.type)
|
34
|
+
RFunk::ErrorChecking.new.raise_expected_attribute_type(key, value, attribute.type)
|
35
35
|
self.instance_variable_set(variable_name(key), value)
|
36
36
|
end
|
37
37
|
|
@@ -1,19 +1,19 @@
|
|
1
1
|
module RFunk
|
2
2
|
module AttributeDefinition
|
3
3
|
def attribute(name, type, options = {})
|
4
|
-
AttributeVariable.new.add(instance: self,
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
RFunk::AttributeVariable.new.add(instance: self,
|
5
|
+
name: name,
|
6
|
+
type: type,
|
7
|
+
options: options)
|
8
8
|
|
9
9
|
define_method(name) { |value = nil|
|
10
10
|
if value
|
11
|
-
ErrorChecking.new.raise_expected_attribute_type(name, value, type)
|
12
|
-
Immutable.new.create(instance: self,
|
13
|
-
|
14
|
-
|
11
|
+
RFunk::ErrorChecking.new.raise_expected_attribute_type(name, value, type)
|
12
|
+
RFunk::Immutable.new.create(instance: self,
|
13
|
+
variable_name: variable_name(name),
|
14
|
+
value: value)
|
15
15
|
else
|
16
|
-
Option(self.instance_variable_get(variable_name(name)))
|
16
|
+
RFunk::Option(self.instance_variable_get(variable_name(name)))
|
17
17
|
end
|
18
18
|
}
|
19
19
|
end
|
@@ -2,7 +2,7 @@ module RFunk
|
|
2
2
|
module AttributeFunction
|
3
3
|
def fun(definition, &block)
|
4
4
|
function_definition = function_definition(definition)
|
5
|
-
lambda = -> (*args) { Function.new(self, function_definition, &block).execute(*args) }
|
5
|
+
lambda = -> (*args) { RFunk::Function.new(self, function_definition, &block).execute(*args) }
|
6
6
|
|
7
7
|
define_method function_definition.value(0).value, &lambda
|
8
8
|
end
|
@@ -14,10 +14,10 @@ module RFunk
|
|
14
14
|
def function_definition(definition)
|
15
15
|
case definition
|
16
16
|
when Hash
|
17
|
-
return_type = TypeAnnotation.new(definition.values.first.to_s)
|
18
|
-
Tuple(definition.keys.first, return_type)
|
17
|
+
return_type = RFunk::TypeAnnotation.new(definition.values.first.to_s)
|
18
|
+
RFunk::Tuple(definition.keys.first, return_type)
|
19
19
|
else
|
20
|
-
Tuple(definition
|
20
|
+
RFunk::Tuple(definition)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -7,7 +7,7 @@ module RFunk
|
|
7
7
|
name = options.fetch(:name)
|
8
8
|
attributes = attributes(instance)
|
9
9
|
|
10
|
-
attributes[name] = AttributeType.new(name, options.fetch(:type), options.fetch(:options))
|
10
|
+
attributes[name] = RFunk::AttributeType.new(name, options.fetch(:type), options.fetch(:options))
|
11
11
|
attributes(instance, attributes)
|
12
12
|
end
|
13
13
|
|
@@ -26,16 +26,16 @@ module RFunk
|
|
26
26
|
def raise_immutable(options, variable)
|
27
27
|
keys = options.keys.select { |k| variable.has_key?(k) }
|
28
28
|
message = "Could not set variables '#{keys}', because variables are immutable."
|
29
|
-
raise ImmutableError, message if keys.any?
|
29
|
+
raise RFunk::ImmutableError, message if keys.any?
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def raise_return_type_with_message(name, value, type, message)
|
35
35
|
case value
|
36
|
-
when Some
|
36
|
+
when RFunk::Some
|
37
37
|
expected_type?(name, value.value, type, message)
|
38
|
-
when None
|
38
|
+
when RFunk::None
|
39
39
|
else
|
40
40
|
expected_type?(name, value, type, message)
|
41
41
|
end
|
@@ -43,9 +43,9 @@ module RFunk
|
|
43
43
|
|
44
44
|
def expected_type?(name, value, type, message)
|
45
45
|
case type
|
46
|
-
when Some
|
46
|
+
when RFunk::Some
|
47
47
|
raise_type(name, value, type.value, message)
|
48
|
-
when None
|
48
|
+
when RFunk::None
|
49
49
|
else
|
50
50
|
raise_type(name, value, type, message)
|
51
51
|
end
|
@@ -18,7 +18,7 @@ module RFunk
|
|
18
18
|
self.variables = variables.merge(options)
|
19
19
|
end
|
20
20
|
else
|
21
|
-
Some(Some(variables)[options])
|
21
|
+
RFunk::Some(RFunk::Some(variables)[options])
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -26,7 +26,7 @@ module RFunk
|
|
26
26
|
if yield
|
27
27
|
true
|
28
28
|
else
|
29
|
-
raise AssertionError
|
29
|
+
raise RFunk::AssertionError
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -49,14 +49,14 @@ module RFunk
|
|
49
49
|
if body_block
|
50
50
|
if pre_block
|
51
51
|
instance_eval(&pre_block).tap { |r|
|
52
|
-
error_checking.raise_condition_error(PreConditionError, r)
|
52
|
+
error_checking.raise_condition_error(RFunk::PreConditionError, r)
|
53
53
|
}
|
54
54
|
end
|
55
55
|
|
56
|
-
Option(instance_eval(&body_block)).tap { |body|
|
56
|
+
RFunk::Option(instance_eval(&body_block)).tap { |body|
|
57
57
|
if post_block
|
58
58
|
instance_eval(&post_block).tap { |post|
|
59
|
-
error_checking.raise_condition_error(PostConditionError, post)
|
59
|
+
error_checking.raise_condition_error(RFunk::PostConditionError, post)
|
60
60
|
}
|
61
61
|
end
|
62
62
|
|
@@ -64,7 +64,7 @@ module RFunk
|
|
64
64
|
}
|
65
65
|
else
|
66
66
|
validate_return_type(return_value)
|
67
|
-
Option(return_value)
|
67
|
+
RFunk::Option(return_value)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -78,7 +78,7 @@ module RFunk
|
|
78
78
|
attr_accessor :variables
|
79
79
|
|
80
80
|
def error_checking
|
81
|
-
Lazy(-> { ErrorChecking.new }).value
|
81
|
+
RFunk::Lazy(-> { RFunk::ErrorChecking.new }).value
|
82
82
|
end
|
83
83
|
|
84
84
|
def validate_return_type(return_value)
|
@@ -90,7 +90,7 @@ module RFunk
|
|
90
90
|
def validate_parameter_types(*args)
|
91
91
|
values = args.zip(type_annotation.parameters)
|
92
92
|
values.each_with_index { |v, i|
|
93
|
-
tuple = Tuple(*v)
|
93
|
+
tuple = RFunk::Tuple(*v)
|
94
94
|
error_checking.raise_expected_parameter_type(i + 1, tuple.value(0), tuple.value(1))
|
95
95
|
}
|
96
96
|
end
|
@@ -3,23 +3,14 @@ module RFunk
|
|
3
3
|
attr_reader :parameters, :return
|
4
4
|
|
5
5
|
def initialize(annotation)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@return = if @annotation.count == 2
|
15
|
-
Object.const_get(@annotation[1].strip)
|
16
|
-
else
|
17
|
-
Object.const_get(@annotation[0].strip)
|
18
|
-
end
|
19
|
-
else
|
20
|
-
@parameters = []
|
21
|
-
@return = None()
|
22
|
-
end
|
6
|
+
option = RFunk::Option(annotation)
|
7
|
+
split = option.split('->')
|
8
|
+
parameters = split.select { |v| v.count == 2 }
|
9
|
+
|
10
|
+
@parameters = parameters.flat_map { |v| v[0].split(',').map { |p| Object.const_get(p.strip) } }
|
11
|
+
@return = RFunk::Option(split.map { |v|
|
12
|
+
v.count == 2 ? Object.const_get(v[1].strip) : Object.const_get(v[0].strip)
|
13
|
+
}.first).value
|
23
14
|
end
|
24
15
|
end
|
25
16
|
end
|
data/lib/rfunk/either/either.rb
CHANGED
data/lib/rfunk/either/failure.rb
CHANGED
data/lib/rfunk/either/success.rb
CHANGED
data/lib/rfunk/lazy.rb
CHANGED
@@ -8,7 +8,7 @@ module RFunk
|
|
8
8
|
|
9
9
|
def value
|
10
10
|
atomic.update { @value ||= lambda.call.tap { self.created = true } }
|
11
|
-
Option(atomic.value)
|
11
|
+
RFunk::Option(atomic.value)
|
12
12
|
end
|
13
13
|
|
14
14
|
def created?
|
@@ -22,6 +22,6 @@ module RFunk
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def Lazy(lambda)
|
25
|
-
Lazy.new(lambda)
|
25
|
+
RFunk::Lazy.new(lambda)
|
26
26
|
end
|
27
27
|
end
|
data/lib/rfunk/maybe/none.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module RFunk
|
2
|
-
class None < Option
|
2
|
+
class None < RFunk::Option
|
3
3
|
include Singleton
|
4
4
|
|
5
5
|
def value(default = None())
|
6
|
-
Option(default)
|
6
|
+
RFunk::Option(default)
|
7
7
|
end
|
8
8
|
|
9
9
|
def or(other)
|
10
|
-
Option(other)
|
10
|
+
RFunk::Option(other)
|
11
11
|
end
|
12
12
|
|
13
13
|
def method_missing(method, *arguments, &block)
|
@@ -38,6 +38,6 @@ module RFunk
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def None(value = nil)
|
41
|
-
Option(value)
|
41
|
+
RFunk::Option(value)
|
42
42
|
end
|
43
43
|
end
|
data/lib/rfunk/maybe/option.rb
CHANGED
@@ -10,18 +10,18 @@ module RFunk
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def Option(value)
|
13
|
-
if [Some, None].map { |t| value.is_a?(t) }.any?
|
13
|
+
if [RFunk::Some, RFunk::None].map { |t| value.is_a?(t) }.any?
|
14
14
|
value
|
15
15
|
elsif nothing?(value)
|
16
|
-
None.instance
|
16
|
+
RFunk::None.instance
|
17
17
|
else
|
18
|
-
Some.new(value)
|
18
|
+
RFunk::Some.new(value)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
24
|
def nothing?(value)
|
25
|
-
value.nil? || (value.respond_to?(:empty?) && value.empty?) || value == None.instance
|
25
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?) || value == RFunk::None.instance
|
26
26
|
end
|
27
27
|
end
|
data/lib/rfunk/maybe/some.rb
CHANGED
@@ -6,7 +6,7 @@ module RFunk
|
|
6
6
|
@value = value
|
7
7
|
end
|
8
8
|
|
9
|
-
def value(_ = None())
|
9
|
+
def value(_ = RFunk::None())
|
10
10
|
@value
|
11
11
|
end
|
12
12
|
|
@@ -15,7 +15,7 @@ module RFunk
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def method_missing(method, *arguments, &block)
|
18
|
-
Option(value.send(method, *arguments, &block))
|
18
|
+
RFunk::Option(value.send(method, *arguments, &block))
|
19
19
|
end
|
20
20
|
|
21
21
|
def ==(other)
|
@@ -48,6 +48,6 @@ module RFunk
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def Some(value)
|
51
|
-
Option(value)
|
51
|
+
RFunk::Option(value)
|
52
52
|
end
|
53
53
|
end
|
data/lib/rfunk/tuple.rb
CHANGED
@@ -9,11 +9,9 @@ module RFunk
|
|
9
9
|
index = args[0]
|
10
10
|
|
11
11
|
if args.length == 1
|
12
|
-
Option(values[index])
|
12
|
+
RFunk::Option(values[index])
|
13
13
|
else
|
14
|
-
self.class.new(values.dup.tap { |v|
|
15
|
-
v[index] = Option(args[1])
|
16
|
-
})
|
14
|
+
self.class.new(values.dup.tap { |v| v[index] = RFunk::Option(args[1]) })
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
@@ -23,6 +21,6 @@ module RFunk
|
|
23
21
|
end
|
24
22
|
|
25
23
|
def Tuple(*values)
|
26
|
-
Tuple.new(values)
|
24
|
+
RFunk::Tuple.new(values)
|
27
25
|
end
|
28
26
|
end
|
data/lib/rfunk/version.rb
CHANGED
data/lib/rfunk.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.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:
|
11
|
+
date: 2015-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ice_nine
|
@@ -30,70 +30,84 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.8.0
|
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: 0.
|
40
|
+
version: 0.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: concurrent-ruby-ext
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.8.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.8.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: hamster
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
61
|
+
version: 1.0.0
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
68
|
+
version: 1.0.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: 10.
|
75
|
+
version: 10.4.2
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: 10.
|
82
|
+
version: 10.4.2
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: 3.3.0
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 3.3.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rspec-given
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 3.
|
103
|
+
version: 3.7.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 3.
|
110
|
+
version: 3.7.0
|
97
111
|
description: See https://github.com/alexfalkowski/rfunk/blob/master/README.md
|
98
112
|
email:
|
99
113
|
- alexrfalkowski@gmail.com
|
@@ -145,9 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
159
|
version: '0'
|
146
160
|
requirements: []
|
147
161
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.4.6
|
149
163
|
signing_key:
|
150
164
|
specification_version: 4
|
151
165
|
summary: Functional Programming in Ruby
|
152
166
|
test_files: []
|
153
|
-
has_rdoc:
|