lib/code/object/dictionnary.rb in template-ruby-0.2.4 vs lib/code/object/dictionnary.rb in template-ruby-0.3.0

- old
+ new

@@ -8,13 +8,17 @@ end def call(**args) operator = args.fetch(:operator, nil) arguments = args.fetch(:arguments, []) + context = args.fetch(:context) + io = args.fetch(:io) if operator == "values" values(arguments) + elsif operator == "each" + each(arguments, context: context, io: io) elsif key?(operator) fetch(operator) else super end @@ -34,10 +38,14 @@ def key?(key) raw.key?(key) end + def deep_dup + ::Code::Object::Dictionnary.new(raw.deep_dup) + end + def to_s "{#{raw.map { |key, value| "#{key.inspect} => #{value.inspect}" }.join(", ")}}" end def inspect @@ -47,9 +55,25 @@ private def values(arguments) sig(arguments) ::Code::Object::List.new(raw.values) + end + + def each(arguments, context:, io:) + sig(arguments, ::Code::Object::Function) + argument = arguments.first.value + raw.each do |key, value| + argument.call( + arguments: [ + ::Code::Object::Argument.new(key), + ::Code::Object::Argument.new(value) + ], + context: context, + io: io, + ) + end + self end end end end