halunke 0.9.0 → 0.10.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/Gemfile.lock +1 -1
- data/docs/index.md +3 -3
- data/lib/halunke/grammar.y +7 -3
- data/lib/halunke/herror.rb +9 -0
- data/lib/halunke/nodes.rb +75 -31
- data/lib/halunke/parser.rb +64 -64
- data/lib/halunke/runtime/hclass.rb +11 -2
- data/lib/halunke/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc3b88ba0756907b466c614c950ea5d9f623ed95ce536afbf714a25c488e982a
|
4
|
+
data.tar.gz: f5132e70c123842d85892d87152fc37a54819c4eca26035ac16bcbac87ee8e9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15e3f8586f02ccb75af4f3086e9c044d0ff0e56dd1b4c5a9f700e868f8472feaa8a6f043f303652559b3c592d03dc4eeba922a772e9675d2e46732a9440a8b3f
|
7
|
+
data.tar.gz: bdbbb12cd46e08ce6760d64bc163b0da73b52ee6cbc2aa73d3d0c0b30fa5e99b9e1ce929a05f5128a8ed00b203aaa8873108f20abba2ca6d3b42b05e4a495c82
|
data/Gemfile.lock
CHANGED
data/docs/index.md
CHANGED
@@ -70,10 +70,10 @@ the value is `["Ha" "Spe"]`.
|
|
70
70
|
If you want to find out more about the types of objects in Halunke
|
71
71
|
and the messages you can send to them, explore the navigation bar
|
72
72
|
at the top. If you want to learn more about conditionals, check out
|
73
|
-
the section about [True & False](/
|
73
|
+
the section about [True & False](/true-false). If you want
|
74
74
|
to write your own functions, check out
|
75
|
-
[Function](/
|
76
|
-
classes, check out [Class](/
|
75
|
+
[Function](/function) and if you want to define your own
|
76
|
+
classes, check out [Class](/class).
|
77
77
|
|
78
78
|
If you want to store an object in a variable, you can do it like this:
|
79
79
|
|
data/lib/halunke/grammar.y
CHANGED
@@ -27,15 +27,19 @@ rule
|
|
27
27
|
| Expression Expressions { Nodes.new([val[0]].concat(val[1].nodes)) }
|
28
28
|
;
|
29
29
|
|
30
|
+
Arguments:
|
31
|
+
/* empty */ { ArrayNode.new([]) }
|
32
|
+
| BAR Expressions BAR { ArrayNode.new(val[1].nodes, val[0][1], val[2][2]) }
|
33
|
+
;
|
34
|
+
|
30
35
|
Expression:
|
31
36
|
NUMBER { NumberNode.new(*val[0]) }
|
32
37
|
| STRING { StringNode.new(*val[0]) }
|
33
38
|
| BAREWORD { BarewordNode.new(*val[0]) }
|
34
39
|
| UNASSIGNED_BAREWORD { UnassignedNode.new(BarewordNode.new(*val[0]), val[0][1], val[0][2]) }
|
35
40
|
| START_COMMENT Expressions END_COMMENT { Nodes.new([]) }
|
36
|
-
| OPEN_CURLY Expressions CLOSE_CURLY
|
37
|
-
|
|
38
|
-
| OPEN_PAREN Expression Expressions CLOSE_PAREN { MessageSendNode.new(val[1], MessageNode.new(val[2].nodes), val[0][1], val[3][2]) }
|
41
|
+
| OPEN_CURLY Arguments Expressions CLOSE_CURLY { FunctionNode.new(val[1], val[2], val[0][1], val[3][2]) }
|
42
|
+
| OPEN_PAREN Expressions CLOSE_PAREN { MessageSendNode.new(val[1].nodes, val[0][1], val[2][2]) }
|
39
43
|
| OPEN_BRACKET Expressions CLOSE_BRACKET { ArrayNode.new(val[1].nodes, val[0][1], val[2][2]) }
|
40
44
|
| OPEN_DICT_BRACKET Expressions CLOSE_BRACKET { DictionaryNode.new(val[1].nodes, val[0][1], val[2][2]) }
|
41
45
|
;
|
data/lib/halunke/herror.rb
CHANGED
data/lib/halunke/nodes.rb
CHANGED
@@ -11,31 +11,40 @@ module Halunke
|
|
11
11
|
|
12
12
|
NumberNode = Struct.new(:value, :ts, :te) do
|
13
13
|
def eval(context)
|
14
|
-
context["Number"].create_instance(value
|
14
|
+
context["Number"].create_instance(value,
|
15
|
+
source_code_position: source_code_position)
|
15
16
|
end
|
16
17
|
|
17
18
|
def ==(other)
|
18
19
|
other.is_a?(NumberNode) &&
|
19
20
|
value == other.value
|
20
21
|
end
|
22
|
+
|
23
|
+
def source_code_position
|
24
|
+
SourceCodePosition.new(ts, te)
|
25
|
+
end
|
21
26
|
end
|
22
27
|
|
23
28
|
StringNode = Struct.new(:value, :ts, :te) do
|
24
29
|
def eval(context)
|
25
|
-
context["String"].create_instance(value
|
30
|
+
context["String"].create_instance(value,
|
31
|
+
source_code_position: source_code_position)
|
26
32
|
end
|
27
33
|
|
28
34
|
def ==(other)
|
29
35
|
other.is_a?(StringNode) &&
|
30
36
|
value == other.value
|
31
37
|
end
|
38
|
+
|
39
|
+
def source_code_position
|
40
|
+
SourceCodePosition.new(ts, te)
|
41
|
+
end
|
32
42
|
end
|
33
43
|
|
34
44
|
BarewordNode = Struct.new(:value, :ts, :te) do
|
35
45
|
def eval(context)
|
36
46
|
context[value]
|
37
47
|
rescue KeyError
|
38
|
-
source_code_position = SourceCodePosition.new(ts, te)
|
39
48
|
raise HUnassignedBareword.new("Bareword '#{value} is unassigned", source_code_position)
|
40
49
|
end
|
41
50
|
|
@@ -43,22 +52,30 @@ module Halunke
|
|
43
52
|
other.is_a?(BarewordNode) &&
|
44
53
|
value == other.value
|
45
54
|
end
|
55
|
+
|
56
|
+
def source_code_position
|
57
|
+
SourceCodePosition.new(ts, te)
|
58
|
+
end
|
46
59
|
end
|
47
60
|
|
48
61
|
UnassignedNode = Struct.new(:node, :ts, :te) do
|
49
62
|
def eval(context)
|
50
|
-
context["UnassignedBareword"].create_instance(node.value, source_code_position:
|
63
|
+
context["UnassignedBareword"].create_instance(node.value, source_code_position: source_code_position)
|
51
64
|
end
|
52
65
|
|
53
66
|
def ==(other)
|
54
67
|
other.is_a?(UnassignedNode) &&
|
55
68
|
node == other.node
|
56
69
|
end
|
70
|
+
|
71
|
+
def source_code_position
|
72
|
+
SourceCodePosition.new(ts, te)
|
73
|
+
end
|
57
74
|
end
|
58
75
|
|
59
76
|
FunctionNode = Struct.new(:params, :body, :ts, :te) do
|
60
77
|
def eval(context)
|
61
|
-
raise HEmptyFunction.new("This function would not return anything, in Halunke every function needs to return something.",
|
78
|
+
raise HEmptyFunction.new("This function would not return anything, in Halunke every function needs to return something.", source_code_position) if body.empty?
|
62
79
|
signature = params.nodes.map(&:node).map(&:value)
|
63
80
|
|
64
81
|
context["Function"].new(signature, lambda { |call_context|
|
@@ -71,6 +88,10 @@ module Halunke
|
|
71
88
|
params == other.params &&
|
72
89
|
body == other.body
|
73
90
|
end
|
91
|
+
|
92
|
+
def source_code_position
|
93
|
+
SourceCodePosition.new(ts, te)
|
94
|
+
end
|
74
95
|
end
|
75
96
|
|
76
97
|
ArrayNode = Struct.new(:nodes, :ts, :te) do
|
@@ -82,56 +103,79 @@ module Halunke
|
|
82
103
|
other.is_a?(ArrayNode) &&
|
83
104
|
nodes == other.nodes
|
84
105
|
end
|
106
|
+
|
107
|
+
def source_code_position
|
108
|
+
SourceCodePosition.new(ts, te)
|
109
|
+
end
|
85
110
|
end
|
86
111
|
|
87
112
|
DictionaryNode = Struct.new(:nodes, :ts, :te) do
|
88
113
|
def eval(context)
|
89
114
|
hash = {}
|
90
115
|
nodes.each_slice(2) do |key, value|
|
116
|
+
raise HInvalidDictionary.new("This key has no value", key.source_code_position) if value.nil?
|
91
117
|
hash[key.eval(context)] = value.eval(context)
|
92
118
|
end
|
93
|
-
context["Dictionary"].create_instance(hash
|
119
|
+
context["Dictionary"].create_instance(hash,
|
120
|
+
source_code_position: source_code_position)
|
94
121
|
end
|
95
122
|
|
96
123
|
def ==(other)
|
97
124
|
other.is_a?(DictionaryNode) &&
|
98
125
|
nodes == other.nodes
|
99
126
|
end
|
127
|
+
|
128
|
+
def source_code_position
|
129
|
+
SourceCodePosition.new(ts, te)
|
130
|
+
end
|
100
131
|
end
|
101
132
|
|
102
|
-
MessageSendNode = Struct.new(:
|
133
|
+
MessageSendNode = Struct.new(:nodes, :ts, :te) do
|
103
134
|
def eval(context)
|
104
|
-
|
105
|
-
|
135
|
+
message_name, message_value = parse_message(context)
|
136
|
+
receiver.eval(context).receive_message(context, message_name, message_value,
|
137
|
+
source_code_position: source_code_position)
|
106
138
|
end
|
107
139
|
|
108
140
|
def ==(other)
|
109
141
|
other.is_a?(MessageSendNode) &&
|
110
|
-
|
111
|
-
message == other.message
|
142
|
+
nodes == other.nodes
|
112
143
|
end
|
113
|
-
end
|
114
144
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
145
|
+
def source_code_position
|
146
|
+
SourceCodePosition.new(ts, te)
|
147
|
+
end
|
148
|
+
|
149
|
+
private
|
150
|
+
|
151
|
+
def receiver
|
152
|
+
raise HInvalidMessage.new("This message has no receiver", source_code_position) if nodes.length == 0
|
153
|
+
@receiver ||= nodes[0]
|
154
|
+
end
|
155
|
+
|
156
|
+
def parse_message(context)
|
157
|
+
if message_nodes.length == 1
|
158
|
+
# hack to allow expressions like (1+5)
|
159
|
+
return ["+", [message_nodes[0].eval(context)]] if message_nodes[0].is_a? NumberNode
|
160
|
+
return [message_nodes[0].value, []] if message_nodes[0].is_a? BarewordNode
|
161
|
+
|
162
|
+
raise HInvalidMessage.new("This is not a bareword", message_nodes[0].source_code_position)
|
163
|
+
end
|
164
|
+
|
165
|
+
name = []
|
166
|
+
message = []
|
167
|
+
message_nodes.each_slice(2) do |name_part, value|
|
168
|
+
raise HInvalidMessage.new("This is not a bareword", name_part.source_code_position) unless name_part.is_a? BarewordNode
|
169
|
+
raise HInvalidMessage.new("This bareword has no according argument", name_part.source_code_position) if value.nil?
|
170
|
+
name << name_part
|
171
|
+
message << value
|
134
172
|
end
|
173
|
+
[name.map(&:value).join(" "), message.map { |node| node.eval(context) }]
|
174
|
+
end
|
175
|
+
|
176
|
+
def message_nodes
|
177
|
+
raise HInvalidMessage.new("You are sending an empty message", source_code_position) if nodes.length == 1
|
178
|
+
@message_nodes ||= nodes.drop(1)
|
135
179
|
end
|
136
180
|
end
|
137
181
|
end
|
data/lib/halunke/parser.rb
CHANGED
@@ -13,7 +13,7 @@ require "halunke/nodes"
|
|
13
13
|
module Halunke
|
14
14
|
class Parser < Racc::Parser
|
15
15
|
|
16
|
-
module_eval(<<'...end grammar.y/module_eval...', 'grammar.y',
|
16
|
+
module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 54)
|
17
17
|
|
18
18
|
def parse(code)
|
19
19
|
@tokens = Tokenizer.new.tokenize(code)
|
@@ -27,82 +27,75 @@ end
|
|
27
27
|
##### State transition tables begin ###
|
28
28
|
|
29
29
|
racc_action_table = [
|
30
|
-
4, 5, 6, 10, 13, 9,
|
31
|
-
12,
|
32
|
-
7, 11,
|
33
|
-
|
30
|
+
4, 5, 6, 10, 13, 9, 16, 7, 11, 21,
|
31
|
+
12, 22, 8, 4, 5, 6, 10, 25, 9, 26,
|
32
|
+
7, 11, 27, 12, 28, 8, 4, 5, 6, 10,
|
33
|
+
29, 9, nil, 7, 11, nil, 12, nil, 8, 4,
|
34
34
|
5, 6, 10, nil, 9, nil, 7, 11, nil, 12,
|
35
|
-
|
35
|
+
nil, 8, 4, 5, 6, 10, nil, 9, nil, 7,
|
36
36
|
11, nil, 12, nil, 8, 4, 5, 6, 10, nil,
|
37
37
|
9, nil, 7, 11, nil, 12, nil, 8, 4, 5,
|
38
38
|
6, 10, nil, 9, nil, 7, 11, nil, 12, nil,
|
39
39
|
8, 4, 5, 6, 10, nil, 9, nil, 7, 11,
|
40
|
-
nil, 12, nil, 8
|
41
|
-
nil, 7, 11, nil, 12, nil, 8, 4, 5, 6,
|
42
|
-
10, nil, 9, nil, 7, 11, nil, 12, nil, 8 ]
|
40
|
+
nil, 12, nil, 8 ]
|
43
41
|
|
44
42
|
racc_action_check = [
|
45
|
-
0, 0, 0, 0, 1, 0,
|
46
|
-
0,
|
47
|
-
3, 3,
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
nil, 17, nil, 17
|
56
|
-
nil, 18, 18, nil, 18, nil, 18, 28, 28, 28,
|
57
|
-
28, nil, 28, nil, 28, 28, nil, 28, nil, 28 ]
|
43
|
+
0, 0, 0, 0, 1, 0, 9, 0, 0, 13,
|
44
|
+
0, 15, 0, 3, 3, 3, 3, 18, 3, 19,
|
45
|
+
3, 3, 20, 3, 23, 3, 8, 8, 8, 8,
|
46
|
+
24, 8, nil, 8, 8, nil, 8, nil, 8, 10,
|
47
|
+
10, 10, 10, nil, 10, nil, 10, 10, nil, 10,
|
48
|
+
nil, 10, 11, 11, 11, 11, nil, 11, nil, 11,
|
49
|
+
11, nil, 11, nil, 11, 12, 12, 12, 12, nil,
|
50
|
+
12, nil, 12, 12, nil, 12, nil, 12, 16, 16,
|
51
|
+
16, 16, nil, 16, nil, 16, 16, nil, 16, nil,
|
52
|
+
16, 17, 17, 17, 17, nil, 17, nil, 17, 17,
|
53
|
+
nil, 17, nil, 17 ]
|
58
54
|
|
59
55
|
racc_action_pointer = [
|
60
|
-
-2, 4, nil, 11, nil, nil, nil, nil, 24,
|
61
|
-
50, 63,
|
62
|
-
|
63
|
-
22, nil ]
|
56
|
+
-2, 4, nil, 11, nil, nil, nil, nil, 24, -7,
|
57
|
+
37, 50, 63, 9, nil, -4, 76, 89, 11, 8,
|
58
|
+
11, nil, nil, 11, 22, nil, nil, nil, nil, nil ]
|
64
59
|
|
65
60
|
racc_action_default = [
|
66
|
-
-2, -
|
67
|
-
|
68
|
-
-
|
69
|
-
-14, -10 ]
|
61
|
+
-2, -15, -1, -2, -6, -7, -8, -9, -2, -4,
|
62
|
+
-2, -2, -2, -15, -3, -15, -2, -2, -15, -15,
|
63
|
+
-15, 30, -10, -15, -15, -12, -13, -14, -5, -11 ]
|
70
64
|
|
71
65
|
racc_goto_table = [
|
72
|
-
2, 1,
|
73
|
-
|
74
|
-
nil, nil, nil, nil, nil, nil, nil, nil, 30 ]
|
66
|
+
2, 1, 17, 14, nil, nil, nil, nil, 15, nil,
|
67
|
+
18, 19, 20, nil, nil, nil, 23, 24 ]
|
75
68
|
|
76
69
|
racc_goto_check = [
|
77
|
-
2, 1,
|
78
|
-
|
79
|
-
nil, nil, nil, nil, nil, nil, nil, nil, 2 ]
|
70
|
+
2, 1, 4, 2, nil, nil, nil, nil, 2, nil,
|
71
|
+
2, 2, 2, nil, nil, nil, 2, 2 ]
|
80
72
|
|
81
73
|
racc_goto_pointer = [
|
82
|
-
nil, 1, 0, -
|
74
|
+
nil, 1, 0, nil, -7 ]
|
83
75
|
|
84
76
|
racc_goto_default = [
|
85
|
-
nil, nil, nil, 3 ]
|
77
|
+
nil, nil, nil, 3, nil ]
|
86
78
|
|
87
79
|
racc_reduce_table = [
|
88
80
|
0, 0, :racc_error,
|
89
81
|
1, 17, :_reduce_1,
|
90
82
|
0, 18, :_reduce_2,
|
91
83
|
2, 18, :_reduce_3,
|
92
|
-
|
93
|
-
|
84
|
+
0, 20, :_reduce_4,
|
85
|
+
3, 20, :_reduce_5,
|
94
86
|
1, 19, :_reduce_6,
|
95
87
|
1, 19, :_reduce_7,
|
96
|
-
|
97
|
-
|
98
|
-
|
88
|
+
1, 19, :_reduce_8,
|
89
|
+
1, 19, :_reduce_9,
|
90
|
+
3, 19, :_reduce_10,
|
99
91
|
4, 19, :_reduce_11,
|
100
92
|
3, 19, :_reduce_12,
|
101
|
-
3, 19, :_reduce_13
|
93
|
+
3, 19, :_reduce_13,
|
94
|
+
3, 19, :_reduce_14 ]
|
102
95
|
|
103
|
-
racc_reduce_n =
|
96
|
+
racc_reduce_n = 15
|
104
97
|
|
105
|
-
racc_shift_n =
|
98
|
+
racc_shift_n = 30
|
106
99
|
|
107
100
|
racc_token_table = {
|
108
101
|
false => 0,
|
@@ -162,7 +155,8 @@ Racc_token_to_s_table = [
|
|
162
155
|
"$start",
|
163
156
|
"Program",
|
164
157
|
"Expressions",
|
165
|
-
"Expression"
|
158
|
+
"Expression",
|
159
|
+
"Arguments" ]
|
166
160
|
|
167
161
|
Racc_debug_parser = false
|
168
162
|
|
@@ -190,60 +184,66 @@ module_eval(<<'.,.,', 'grammar.y', 26)
|
|
190
184
|
|
191
185
|
module_eval(<<'.,.,', 'grammar.y', 30)
|
192
186
|
def _reduce_4(val, _values)
|
193
|
-
|
187
|
+
ArrayNode.new([])
|
194
188
|
end
|
195
189
|
.,.,
|
196
190
|
|
197
191
|
module_eval(<<'.,.,', 'grammar.y', 31)
|
198
192
|
def _reduce_5(val, _values)
|
199
|
-
|
193
|
+
ArrayNode.new(val[1].nodes, val[0][1], val[2][2])
|
200
194
|
end
|
201
195
|
.,.,
|
202
196
|
|
203
|
-
module_eval(<<'.,.,', 'grammar.y',
|
197
|
+
module_eval(<<'.,.,', 'grammar.y', 35)
|
204
198
|
def _reduce_6(val, _values)
|
205
|
-
|
199
|
+
NumberNode.new(*val[0])
|
206
200
|
end
|
207
201
|
.,.,
|
208
202
|
|
209
|
-
module_eval(<<'.,.,', 'grammar.y',
|
203
|
+
module_eval(<<'.,.,', 'grammar.y', 36)
|
210
204
|
def _reduce_7(val, _values)
|
211
|
-
|
205
|
+
StringNode.new(*val[0])
|
212
206
|
end
|
213
207
|
.,.,
|
214
208
|
|
215
|
-
module_eval(<<'.,.,', 'grammar.y',
|
209
|
+
module_eval(<<'.,.,', 'grammar.y', 37)
|
216
210
|
def _reduce_8(val, _values)
|
217
|
-
|
211
|
+
BarewordNode.new(*val[0])
|
218
212
|
end
|
219
213
|
.,.,
|
220
214
|
|
221
|
-
module_eval(<<'.,.,', 'grammar.y',
|
215
|
+
module_eval(<<'.,.,', 'grammar.y', 38)
|
222
216
|
def _reduce_9(val, _values)
|
223
|
-
|
217
|
+
UnassignedNode.new(BarewordNode.new(*val[0]), val[0][1], val[0][2])
|
224
218
|
end
|
225
219
|
.,.,
|
226
220
|
|
227
|
-
module_eval(<<'.,.,', 'grammar.y',
|
221
|
+
module_eval(<<'.,.,', 'grammar.y', 39)
|
228
222
|
def _reduce_10(val, _values)
|
229
|
-
|
223
|
+
Nodes.new([])
|
230
224
|
end
|
231
225
|
.,.,
|
232
226
|
|
233
|
-
module_eval(<<'.,.,', 'grammar.y',
|
227
|
+
module_eval(<<'.,.,', 'grammar.y', 40)
|
234
228
|
def _reduce_11(val, _values)
|
235
|
-
|
229
|
+
FunctionNode.new(val[1], val[2], val[0][1], val[3][2])
|
236
230
|
end
|
237
231
|
.,.,
|
238
232
|
|
239
|
-
module_eval(<<'.,.,', 'grammar.y',
|
233
|
+
module_eval(<<'.,.,', 'grammar.y', 41)
|
240
234
|
def _reduce_12(val, _values)
|
241
|
-
|
235
|
+
MessageSendNode.new(val[1].nodes, val[0][1], val[2][2])
|
242
236
|
end
|
243
237
|
.,.,
|
244
238
|
|
245
|
-
module_eval(<<'.,.,', 'grammar.y',
|
239
|
+
module_eval(<<'.,.,', 'grammar.y', 42)
|
246
240
|
def _reduce_13(val, _values)
|
241
|
+
ArrayNode.new(val[1].nodes, val[0][1], val[2][2])
|
242
|
+
end
|
243
|
+
.,.,
|
244
|
+
|
245
|
+
module_eval(<<'.,.,', 'grammar.y', 43)
|
246
|
+
def _reduce_14(val, _values)
|
247
247
|
DictionaryNode.new(val[1].nodes, val[0][1], val[2][2])
|
248
248
|
end
|
249
249
|
.,.,
|
@@ -39,12 +39,15 @@ module Halunke
|
|
39
39
|
end
|
40
40
|
|
41
41
|
context[name] = HClass.new(name, allowed_attributes, instance_methods, class_methods, false)
|
42
|
+
rescue FrozenError
|
43
|
+
assigned_value = context[name].inspect(context)
|
44
|
+
raise HBarewordAlreadyAssigned.new("Bareword '#{name} is already assigned to #{assigned_value}. In Halunke, you can only assign once.", message_value[0].source_code_position)
|
42
45
|
end
|
43
46
|
|
44
47
|
private
|
45
48
|
|
46
|
-
def determine_name(
|
47
|
-
|
49
|
+
def determine_name(unassigned_bareword)
|
50
|
+
unassigned_bareword.ruby_value
|
48
51
|
end
|
49
52
|
|
50
53
|
def determine_allowed_attributes(harray)
|
@@ -64,6 +67,12 @@ module Halunke
|
|
64
67
|
})
|
65
68
|
}
|
66
69
|
hdictionary.ruby_value.each_pair do |method_name, fn|
|
70
|
+
raise HInvalidMessageName.new("Message name must be a String", method_name.source_code_position) unless method_name.runtime_class.name == "String"
|
71
|
+
raise HInvalidMessageName.new("An empty String is not a valid message", method_name.source_code_position) if method_name.ruby_value == ""
|
72
|
+
raise HInvalidMessageName.new("A message can't start with a space", method_name.source_code_position) if method_name.ruby_value.start_with? " "
|
73
|
+
raise HInvalidMessageName.new("A message can't stop with a space", method_name.source_code_position) if method_name.ruby_value.end_with? " "
|
74
|
+
raise HInvalidMessageName.new("The parts of the message need to be separated by a single space", method_name.source_code_position) if method_name.ruby_value.match(/ {2,}/)
|
75
|
+
|
67
76
|
instance_methods[method_name.ruby_value] = fn
|
68
77
|
end
|
69
78
|
instance_methods
|
data/lib/halunke/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: halunke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Dohmen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|