rfunk 0.8.0 → 0.9.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_function.rb +17 -4
- data/lib/rfunk/attribute/error_checking.rb +27 -10
- data/lib/rfunk/attribute/function.rb +15 -5
- data/lib/rfunk/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6579f662e130f4cdabcc91e46617cedb9a497ec6
|
4
|
+
data.tar.gz: 21584e48ad127ceb7f776f36da1a2d9b88cd3176
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 253bb8ffe3a96eedad4d3006323e0d8a6d2d57a5c07510e60a751f9d4d79c853ebb9229fb5652580cdc95037e08f57539c8614c5d1958fd1434ca68019e7f937
|
7
|
+
data.tar.gz: 433b260802c1c656791119b5812e91d191b7d34578abc4728de7b6a8dff3628cf543f274e5fb3d9e4c10e5fa162f050d89a418679be99c5f56af1c241e06391b
|
@@ -1,13 +1,26 @@
|
|
1
1
|
module RFunk
|
2
2
|
module AttributeFunction
|
3
|
-
def fun(
|
3
|
+
def fun(definition, &block)
|
4
|
+
method_definition = method_definition(definition)
|
5
|
+
|
4
6
|
lambda = lambda { |*args|
|
5
|
-
Function.new(self, &block).execute(*args)
|
7
|
+
Function.new(self, method_definition, &block).execute(*args)
|
6
8
|
}
|
7
9
|
|
8
|
-
define_method
|
10
|
+
define_method method_definition.value(0).value, &lambda
|
9
11
|
end
|
10
12
|
|
11
|
-
[:func, :defn].each { |m| alias_method m, :fun }
|
13
|
+
[:fn, :func, :defn].each { |m| alias_method m, :fun }
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def method_definition(definition)
|
18
|
+
case definition
|
19
|
+
when Hash
|
20
|
+
Tuple(definition.keys.first, definition.values.first)
|
21
|
+
else
|
22
|
+
Tuple(definition, None())
|
23
|
+
end
|
24
|
+
end
|
12
25
|
end
|
13
26
|
end
|
@@ -4,14 +4,12 @@ module RFunk
|
|
4
4
|
raise type, 'The condition was not met!' unless value
|
5
5
|
end
|
6
6
|
|
7
|
+
def raise_expected_return_type(name, value, type)
|
8
|
+
raise_return_type_with_message name, value, type, 'return'
|
9
|
+
end
|
10
|
+
|
7
11
|
def raise_expected_type(name, value, type)
|
8
|
-
|
9
|
-
when Some
|
10
|
-
expected_type?(name, value.value, type)
|
11
|
-
when None
|
12
|
-
else
|
13
|
-
expected_type?(name, value, type)
|
14
|
-
end
|
12
|
+
raise_return_type_with_message name, value, type, 'attribute'
|
15
13
|
end
|
16
14
|
|
17
15
|
def raise_not_found(key, attributes)
|
@@ -29,10 +27,29 @@ module RFunk
|
|
29
27
|
|
30
28
|
private
|
31
29
|
|
32
|
-
def
|
30
|
+
def raise_return_type_with_message(name, value, type, message)
|
31
|
+
case value
|
32
|
+
when Some
|
33
|
+
expected_type?(name, value.value, type, message)
|
34
|
+
when None
|
35
|
+
else
|
36
|
+
expected_type?(name, value, type, message)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def expected_type?(name, value, type, message)
|
41
|
+
case type
|
42
|
+
when Some
|
43
|
+
raise_type(name, value, type.value, message)
|
44
|
+
when None
|
45
|
+
else
|
46
|
+
raise_type(name, value, type, message)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def raise_type(name, value, type, message)
|
33
51
|
unless value.is_a?(type)
|
34
|
-
|
35
|
-
raise TypeError, message
|
52
|
+
raise TypeError, "Expected a type of '#{type}' for #{message} '#{name}'"
|
36
53
|
end
|
37
54
|
end
|
38
55
|
end
|
@@ -2,8 +2,9 @@ module RFunk
|
|
2
2
|
class Function
|
3
3
|
attr_reader :this
|
4
4
|
|
5
|
-
def initialize(this, &block)
|
5
|
+
def initialize(this, method_definition, &block)
|
6
6
|
@this = this
|
7
|
+
@method_definition = method_definition
|
7
8
|
@block = block
|
8
9
|
@variables = {}
|
9
10
|
end
|
@@ -51,14 +52,17 @@ module RFunk
|
|
51
52
|
}
|
52
53
|
end
|
53
54
|
|
54
|
-
Option(instance_eval(&body_block)).tap {
|
55
|
+
Option(instance_eval(&body_block)).tap { |body|
|
55
56
|
if post_block
|
56
|
-
instance_eval(&post_block).tap { |
|
57
|
-
error_checking.raise_condition_error(PostConditionError,
|
57
|
+
instance_eval(&post_block).tap { |post|
|
58
|
+
error_checking.raise_condition_error(PostConditionError, post)
|
58
59
|
}
|
59
60
|
end
|
61
|
+
|
62
|
+
validate_return_type(body)
|
60
63
|
}
|
61
64
|
else
|
65
|
+
validate_return_type(result)
|
62
66
|
Option(result)
|
63
67
|
end
|
64
68
|
end
|
@@ -69,11 +73,17 @@ module RFunk
|
|
69
73
|
|
70
74
|
private
|
71
75
|
|
72
|
-
attr_reader :block, :pre_block, :post_block, :body_block
|
76
|
+
attr_reader :block, :pre_block, :post_block, :body_block, :method_definition
|
73
77
|
attr_accessor :variables
|
74
78
|
|
75
79
|
def error_checking
|
76
80
|
@error_checking ||= ErrorChecking.new
|
77
81
|
end
|
82
|
+
|
83
|
+
def validate_return_type(result)
|
84
|
+
error_checking.raise_expected_return_type method_definition.value(0).value,
|
85
|
+
result,
|
86
|
+
method_definition.value(1)
|
87
|
+
end
|
78
88
|
end
|
79
89
|
end
|
data/lib/rfunk/version.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: 0.9.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: 2014-08-
|
11
|
+
date: 2014-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ice_nine
|