class Wunderbar::JsonBuilder
Public Class Methods
new(scope)
click to toggle source
# File lib/wunderbar/builder.rb, line 483 def initialize(scope) @_scope = scope @_target = {} end
Public Instance Methods
_!(object)
click to toggle source
# File lib/wunderbar/builder.rb, line 563 def _!(object) @_target = object end
_exception(*args)
click to toggle source
Calls superclass method
# File lib/wunderbar/builder.rb, line 567 def _exception(*args) exception = args.first if exception.respond_to? :backtrace Wunderbar.error exception.inspect super(exception.inspect) @_target['backtrace'] = [] exception.backtrace.each do |frame| next if CALLERS_TO_IGNORE.any? {|re| frame =~ re} Wunderbar.warn " #{frame}" @_target['backtrace'] << frame end else super end end
encode(&block)
click to toggle source
# File lib/wunderbar/builder.rb, line 488 def encode(&block) set_variables_from_params before = @_target.dup result = self.instance_eval(&block) _! result if before.empty? and result and @_target == before @_target end
method_missing(method, *args, &block)
click to toggle source
forward to Wunderbar
, @_target, or @_scope
Calls superclass method
# File lib/wunderbar/builder.rb, line 497 def method_missing(method, *args, &block) if method.to_s =~ /^_(\w*)$/ name = $1 elsif Wunderbar.respond_to? method return Wunderbar.send method, *args, &block elsif @_target.respond_to? method return @_target.send method, *args, &block elsif @_scope and @_scope.respond_to? method return @_scope.send method, *args, &block else super end if args.length == 0 return self unless block result = JsonBuilder.new(@_scope).encode(&block) elsif args.length == 1 result = args.first if block if Symbol === result or String === result result = {result.to_s => JsonBuilder.new(@_scope).encode(&block)} else result = result.map {|n| @_target = {}; block.call(n); @_target} end end elsif block ::Kernel::raise ::ArgumentError, "can't mix multiple arguments with a block" else object = args.shift if not Enumerable === object or String === object or Struct === object result = {} args.each {|arg| result[arg.to_s] = object.send arg} else result = [] result = @_target if name.empty? and @_target.respond_to? :<< object.each do |item| result << Hash[args.map {|arg| [arg.to_s, item.send(arg)]}] end end end if name != '' unless Hash === @_target or @_target.empty? ::Kernel::raise ::ArgumentError, "mixed array and hash calls" end @_target[name.to_s] = result elsif args.length == 0 or (args.length == 1 and not block) @_target = [] if @_target == {} if Hash === @_target ::Kernel::raise ::ArgumentError, "mixed hash and array calls" end @_target << result else @_target = result end self end
system(*args)
click to toggle source
execute a system command, echoing stdin, stdout, and stderr
Calls superclass method
Wunderbar::BuilderClass#system
# File lib/wunderbar/builder.rb, line 584 def system(*args) opts = {} opts = args.pop if Hash === args.last transcript = opts[:transcript] || 'transcript' output_prefix = opts[:prefix] || {} output_prefix[:stdin] ||= '$ ' if @_target[transcript] @_target[transcript] << '' else @_target[transcript] = [] end if Hash === args.last # support original code which needed two hashes super do |kind, line| @_target[transcript] << "#{output_prefix[kind]}#{line}" end else super(*args, opts) do |kind, line| @_target[transcript] << "#{output_prefix[kind]}#{line}" end end end
system!(*args)
click to toggle source
execute a system command, ensuring the result is a success
# File lib/wunderbar/builder.rb, line 610 def system!(*args) rc = system(args) raise RuntimeError.new("exit code: #{rc}") if rc != 0 rc end
target!()
click to toggle source
# File lib/wunderbar/builder.rb, line 618 def target! begin JSON.pretty_generate(@_target)+ "\n" rescue @_target.to_json + "\n" end end
target?(type=nil)
click to toggle source
# File lib/wunderbar/builder.rb, line 626 def target?(type=nil) if Class === type type === @_target else @_target end end