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