38 lines
		
	
	
		
			721 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			721 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Hbc::DSL::StanzaProxy
 | |
|   attr_reader :type
 | |
| 
 | |
|   def self.once(type)
 | |
|     resolved = nil
 | |
|     new(type) { resolved ||= yield }
 | |
|   end
 | |
| 
 | |
|   def initialize(type, &resolver)
 | |
|     @type = type
 | |
|     @resolver = resolver
 | |
|   end
 | |
| 
 | |
|   def proxy?
 | |
|     true
 | |
|   end
 | |
| 
 | |
|   def to_s
 | |
|     @resolver.call.to_s
 | |
|   end
 | |
| 
 | |
|   # Serialization for dumpcask
 | |
|   def encode_with(coder)
 | |
|     coder["type"] = type
 | |
|     coder["resolved"] = @resolver.call
 | |
|   end
 | |
| 
 | |
|   def respond_to?(symbol, include_private = false)
 | |
|     return true if %i{encode_with proxy? to_s type}.include?(symbol)
 | |
|     return false if symbol == :to_ary
 | |
|     @resolver.call.respond_to?(symbol, include_private)
 | |
|   end
 | |
| 
 | |
|   def method_missing(symbol, *args)
 | |
|     @resolver.call.send(symbol, *args)
 | |
|   end
 | |
| end
 | 
