[STABLE] WORKS!!!
parent
3de3e4f7ee
commit
3b9b64323d
|
@ -1,10 +1,11 @@
|
|||
module CeleryScript
|
||||
class AstLeaf
|
||||
attr_reader :value, :parent
|
||||
def initialize(parent, value)
|
||||
@parent, @value = parent, value
|
||||
attr_reader :kind, :value, :parent
|
||||
def initialize(parent, value, kind)
|
||||
@parent, @value, @kind = parent, value, kind
|
||||
end
|
||||
end
|
||||
|
||||
class AstNode
|
||||
attr_reader :args, :body, :comments, :kind, :parent
|
||||
|
||||
|
@ -12,7 +13,7 @@ module CeleryScript
|
|||
@comment, @kind, @parent = comment, kind, parent
|
||||
|
||||
@args = args.map do |key, value|
|
||||
[key, maybe_initialize(self, value)]
|
||||
[key, maybe_initialize(self, value, key)]
|
||||
end.to_h if args
|
||||
|
||||
@body = body.map do |e|
|
||||
|
@ -20,9 +21,12 @@ module CeleryScript
|
|||
end if body
|
||||
end
|
||||
|
||||
def maybe_initialize(parent, leaf_or_node)
|
||||
klass = is_node?(leaf_or_node) ? AstNode : AstLeaf
|
||||
klass.new(parent, leaf_or_node)
|
||||
def maybe_initialize(parent, leaf_or_node, key = "__NEVER__")
|
||||
if is_node?(leaf_or_node)
|
||||
AstNode.new(parent, leaf_or_node)
|
||||
else
|
||||
AstLeaf.new(parent, leaf_or_node, key)
|
||||
end
|
||||
end
|
||||
|
||||
def is_node?(hash)
|
||||
|
|
|
@ -53,21 +53,35 @@ module CeleryScript
|
|||
|
||||
def check_arg_validity(should_be, node)
|
||||
# 2. DONT check validity of body? write test to verify...
|
||||
|
||||
case node
|
||||
when AstNode
|
||||
corpus
|
||||
.fetchNode(node.kind)
|
||||
.allowed_args
|
||||
.map { |aa| corpus.fetchArg(aa) }
|
||||
.map do |argSpec|
|
||||
binding.pry
|
||||
end
|
||||
when AstLeaf
|
||||
puts "Skipping (for now?)"
|
||||
allowed = corpus
|
||||
.fetchArg(node.kind)
|
||||
.allowed_values
|
||||
.select { |d| d.is_a?(Class) }
|
||||
actual = node.value.class
|
||||
unless allowed.include?(actual)
|
||||
raise TypeCheckError, "Expected leaf '#{ node.kind }' within "\
|
||||
"'#{ node.parent.kind }' to be one of: "\
|
||||
"#{ allowed.inspect } but got #{ actual.inspect }"
|
||||
end
|
||||
puts "VALID LEAF!"
|
||||
else
|
||||
raise TypeCheckError, "What was that?"
|
||||
end
|
||||
end
|
||||
|
||||
def validate_agaist_spec(argSpec, node)
|
||||
argSpec.allowed_values.map do |value|
|
||||
case value
|
||||
when Class
|
||||
# binding.pry
|
||||
when Symbol, String
|
||||
# binding.pry
|
||||
else; raise TypeCheckError, "What was that?"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,7 +12,13 @@ describe CeleryScript::Checker do
|
|||
.new
|
||||
.defineArg(:data_label, [String])
|
||||
.defineArg(:data_type, [String])
|
||||
.defineArg(:data_value, [Fixnum, :var_get])
|
||||
.defineArg(:data_value, [
|
||||
# If it's a leaf.
|
||||
# Check that node.value.is_a?(Fixnum)
|
||||
Fixnum,
|
||||
# If it's a legit node,
|
||||
# just check node.kind == "var_get"
|
||||
:var_get])
|
||||
.defineArg(:x, [:blah]) do |param, problem|
|
||||
problem("Param can't be -1") if param < 0
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue