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 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