1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
# frozen_string_literal: true
module Unparser
class Emitter
# Emitter for key value pairs in hash literals or kwargs
class Pair < self
BAREWORD = /\A[A-Za-z_][A-Za-z_0-9]*[?!]?\z/.freeze
private_constant(*constants(false))
handle :pair
children :key, :value
private
def dispatch
if colon?(key)
write(key.children.first.to_s, ': ')
else
visit(key)
write(' => ')
end
visit(value)
end
def colon?(key)
n_sym?(key) && BAREWORD.match?(key.children.first)
end
end
end
end
|