rfunk 0.6.1 → 0.7.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/assertion_error.rb +4 -0
- data/lib/rfunk/attribute/attribute.rb +1 -21
- data/lib/rfunk/attribute/attribute_definition.rb +21 -0
- data/lib/rfunk/attribute/attribute_function.rb +1 -1
- data/lib/rfunk/attribute/error_checking.rb +4 -0
- data/lib/rfunk/attribute/function.rb +57 -2
- data/lib/rfunk/attribute/post_condition_error.rb +4 -0
- data/lib/rfunk/attribute/pre_condition_error.rb +4 -0
- data/lib/rfunk/version.rb +1 -1
- data/lib/rfunk.rb +4 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 063f99ddc73ca7ec1f670674f3be7e90bdc077d5
|
4
|
+
data.tar.gz: 7a2960caa00efc87d550c78754581f5f96f16909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab8c129b60df6f8650f475afa5b0707cd8ffd8df4d39c67c389efb8c362696eb1df183a6861e3a81a25c0f9aeb567f60732af3dca160d4fc0dba42a6ad3c326e
|
7
|
+
data.tar.gz: c9c7a897333250ea44cf49c6b4968db76141f89943a1b3efd2461d9fb4bc99495efc8d0004a0c546dd277dde92b718acd726a7692c32237bbf26850ae67ebcf2
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RFunk
|
2
2
|
module Attribute
|
3
3
|
def self.included(base)
|
4
|
-
base.extend(
|
4
|
+
base.extend(RFunk::AttributeDefinition)
|
5
5
|
base.extend(RFunk::AttributeFunction)
|
6
6
|
end
|
7
7
|
|
@@ -10,26 +10,6 @@ module RFunk
|
|
10
10
|
with_attributes(options)
|
11
11
|
end
|
12
12
|
|
13
|
-
module ClassMethods
|
14
|
-
def attribute(name, type, options = {})
|
15
|
-
AttributeVariable.new.add(instance: self,
|
16
|
-
name: name,
|
17
|
-
type: type,
|
18
|
-
options: options)
|
19
|
-
|
20
|
-
define_method(name) { |value = nil|
|
21
|
-
if value
|
22
|
-
ErrorChecking.new.raise_expected_type(name, value, type)
|
23
|
-
Immutable.new.create(instance: self,
|
24
|
-
variable_name: variable_name(name),
|
25
|
-
value: value)
|
26
|
-
else
|
27
|
-
Option(self.instance_variable_get(variable_name(name)))
|
28
|
-
end
|
29
|
-
}
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
13
|
private
|
34
14
|
|
35
15
|
def attributes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module RFunk
|
2
|
+
module AttributeDefinition
|
3
|
+
def attribute(name, type, options = {})
|
4
|
+
AttributeVariable.new.add(instance: self,
|
5
|
+
name: name,
|
6
|
+
type: type,
|
7
|
+
options: options)
|
8
|
+
|
9
|
+
define_method(name) { |value = nil|
|
10
|
+
if value
|
11
|
+
ErrorChecking.new.raise_expected_type(name, value, type)
|
12
|
+
Immutable.new.create(instance: self,
|
13
|
+
variable_name: variable_name(name),
|
14
|
+
value: value)
|
15
|
+
else
|
16
|
+
Option(self.instance_variable_get(variable_name(name)))
|
17
|
+
end
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
module RFunk
|
2
2
|
class Function
|
3
|
-
|
3
|
+
attr_reader :this
|
4
|
+
|
5
|
+
def initialize(this, &block)
|
6
|
+
@this = this
|
7
|
+
@block = block
|
4
8
|
@variables = {}
|
5
9
|
end
|
6
10
|
|
@@ -9,7 +13,7 @@ module RFunk
|
|
9
13
|
if variables.empty?
|
10
14
|
self.variables = options
|
11
15
|
else
|
12
|
-
|
16
|
+
error_checking.raise_immutable(options, variables)
|
13
17
|
self.variables = variables.merge(options)
|
14
18
|
end
|
15
19
|
else
|
@@ -17,8 +21,59 @@ module RFunk
|
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
24
|
+
def assert(&_)
|
25
|
+
if yield
|
26
|
+
true
|
27
|
+
else
|
28
|
+
raise AssertionError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def pre(&block)
|
33
|
+
@pre_block = block
|
34
|
+
end
|
35
|
+
|
36
|
+
def post(&block)
|
37
|
+
@post_block = block
|
38
|
+
end
|
39
|
+
|
40
|
+
def body(&block)
|
41
|
+
@body_block = block
|
42
|
+
end
|
43
|
+
|
44
|
+
def execute(*args)
|
45
|
+
result = instance_exec(*args, &block)
|
46
|
+
|
47
|
+
if body_block
|
48
|
+
if pre_block
|
49
|
+
instance_eval(&pre_block).tap { |r|
|
50
|
+
error_checking.raise_condition_error(PreConditionError, r)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
Option(instance_eval(&body_block)).tap {
|
55
|
+
if post_block
|
56
|
+
instance_eval(&post_block).tap { |r|
|
57
|
+
error_checking.raise_condition_error(PostConditionError, r)
|
58
|
+
}
|
59
|
+
end
|
60
|
+
}
|
61
|
+
else
|
62
|
+
Option(result)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def method_missing(method, *arguments, &block)
|
67
|
+
this.send(method, *arguments, &block)
|
68
|
+
end
|
69
|
+
|
20
70
|
private
|
21
71
|
|
72
|
+
attr_reader :block, :pre_block, :post_block, :body_block
|
22
73
|
attr_accessor :variables
|
74
|
+
|
75
|
+
def error_checking
|
76
|
+
@error_checking ||= ErrorChecking.new
|
77
|
+
end
|
23
78
|
end
|
24
79
|
end
|
data/lib/rfunk/version.rb
CHANGED
data/lib/rfunk.rb
CHANGED
@@ -5,11 +5,15 @@ require 'ice_nine/core_ext/object'
|
|
5
5
|
|
6
6
|
require 'rfunk/attribute/immutable'
|
7
7
|
require 'rfunk/attribute/not_found_error'
|
8
|
+
require 'rfunk/attribute/pre_condition_error'
|
9
|
+
require 'rfunk/attribute/post_condition_error'
|
10
|
+
require 'rfunk/attribute/assertion_error'
|
8
11
|
require 'rfunk/attribute/immutable_error'
|
9
12
|
require 'rfunk/attribute/attribute_variable'
|
10
13
|
require 'rfunk/attribute/error_checking'
|
11
14
|
require 'rfunk/attribute/attribute_type'
|
12
15
|
require 'rfunk/attribute/function'
|
16
|
+
require 'rfunk/attribute/attribute_definition'
|
13
17
|
require 'rfunk/attribute/attribute_function'
|
14
18
|
require 'rfunk/attribute/attribute'
|
15
19
|
require 'rfunk/maybe/option'
|
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.7.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-03-
|
11
|
+
date: 2014-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ice_nine
|
@@ -74,7 +74,9 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- lib/rfunk.rb
|
77
|
+
- lib/rfunk/attribute/assertion_error.rb
|
77
78
|
- lib/rfunk/attribute/attribute.rb
|
79
|
+
- lib/rfunk/attribute/attribute_definition.rb
|
78
80
|
- lib/rfunk/attribute/attribute_function.rb
|
79
81
|
- lib/rfunk/attribute/attribute_type.rb
|
80
82
|
- lib/rfunk/attribute/attribute_variable.rb
|
@@ -83,6 +85,8 @@ files:
|
|
83
85
|
- lib/rfunk/attribute/immutable.rb
|
84
86
|
- lib/rfunk/attribute/immutable_error.rb
|
85
87
|
- lib/rfunk/attribute/not_found_error.rb
|
88
|
+
- lib/rfunk/attribute/post_condition_error.rb
|
89
|
+
- lib/rfunk/attribute/pre_condition_error.rb
|
86
90
|
- lib/rfunk/either/either.rb
|
87
91
|
- lib/rfunk/either/failure.rb
|
88
92
|
- lib/rfunk/either/success.rb
|