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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26cfa05b2043925d0cb51bc6d2095a1cdbd42b89
4
- data.tar.gz: 805b6ac9de954b84d2d16ae8573dae3888c0c8ec
3
+ metadata.gz: 6579f662e130f4cdabcc91e46617cedb9a497ec6
4
+ data.tar.gz: 21584e48ad127ceb7f776f36da1a2d9b88cd3176
5
5
  SHA512:
6
- metadata.gz: b0bb62f992b78353e8fe43420c6daa413770d7db7c93efce0b1ed39636d8c42127cbb0ef928b5aaa32906fcd7e8f08d093c5770641066ee55270c5099dc0e87a
7
- data.tar.gz: fce111b77077fa444634fbb097f5b905216ce6f981c4e4b5b9e63875796d42fc9924101dba4bbdb34953d7ccffa968ad7da0a9f241930c81d39d1ff1c5b373a7
6
+ metadata.gz: 253bb8ffe3a96eedad4d3006323e0d8a6d2d57a5c07510e60a751f9d4d79c853ebb9229fb5652580cdc95037e08f57539c8614c5d1958fd1434ca68019e7f937
7
+ data.tar.gz: 433b260802c1c656791119b5812e91d191b7d34578abc4728de7b6a8dff3628cf543f274e5fb3d9e4c10e5fa162f050d89a418679be99c5f56af1c241e06391b
@@ -1,13 +1,26 @@
1
1
  module RFunk
2
2
  module AttributeFunction
3
- def fun(method_name, &block)
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 method_name, &lambda
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
- case value
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 expected_type?(name, value, type)
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
- message = "Expected a type of '#{type}' for attribute '#{name}'"
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 { |r|
57
- error_checking.raise_condition_error(PostConditionError, r)
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
@@ -1,3 +1,3 @@
1
1
  module RFunk
2
- VERSION = '0.8.0'
2
+ VERSION = '0.9.0'
3
3
  end
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.8.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-16 00:00:00.000000000 Z
11
+ date: 2014-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ice_nine