| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  | module Hbc | 
					
						
							|  |  |  |   class DSL | 
					
						
							|  |  |  |     class 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 method_missing(method, *args) | 
					
						
							|  |  |  |         if method != :to_ary | 
					
						
							|  |  |  |           @resolver.call.send(method, *args) | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           super | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def respond_to?(method, include_private = false) | 
					
						
							| 
									
										
										
										
											2016-10-14 20:17:25 +02:00
										 |  |  |         return true if [:encode_with, :proxy?, :to_s, :type].include?(method) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         return false if method == :to_ary | 
					
						
							|  |  |  |         @resolver.call.respond_to?(method, include_private) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def respond_to_missing?(*) | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-09-20 15:11:33 +02:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |