~singpolyma/dhall-ruby

ref: 084d1f5c4d91ae14d289c0abe9b5f84268b514b1 dhall-ruby/lib/dhall/visitor.rb -rw-r--r-- 386 bytes
084d1f5cStephen Paul Weber Try on generic visitor 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# frozen_string_literal: true

module Dhall
	class Visitor
		def initialize(callbacks)
			@callbacks = callbacks
		end

		def visit(expr)
			expr.to_h.each_with_object({}) do |(attr, value), h|
				if (callback = callback_for(value))
					h[attr] = callback.call(value)
				end
			end
		end

		protected

		def callback_for(x)
			@callbacks.find { |k, _| k === x }&.last
		end
	end
end