diff --git a/src/spectator/dsl.cr b/src/spectator/dsl.cr index d254ff4..489f165 100644 --- a/src/spectator/dsl.cr +++ b/src/spectator/dsl.cr @@ -42,7 +42,10 @@ module Spectator include Locals {% unless given_vars.empty? %} - def initialize({{ var_names.map { |v| "@#{v}" }.join(", ").id }}) + def initialize({{ var_names.join(", ").id }}) + {% for var_name in var_names %} + self.{{var_name}} = {{var_name}} + {% end %} end {% end %} @@ -50,10 +53,6 @@ module Spectator Source.new({{source_file}}, {{source_line}}) end - def num - 0 - end - def run {{block.body}} end @@ -113,7 +112,23 @@ module Spectator {% var_name = block.args.empty? ? "value" : block.args.first %} module Locals - getter {{var_name.id}} + @%wrapper : ValueWrapper? + + private def %collection + {{collection}} + end + + private def %collection_first + %collection.first + end + + def {{var_name.id}} + @%wrapper.as(TypedValueWrapper(typeof(%collection_first))).value + end + + private def {{var_name.id}}=(value) + @%wrapper = TypedValueWrapper(typeof(%collection_first)).new(value) + end end {% GIVEN_VARIABLES << {var_name, collection} %}