Class: Wunderbar::JsonBuilder
- Inherits:
-
BuilderClass
- Object
- BuilderBase
- BuilderClass
- Wunderbar::JsonBuilder
- Defined in:
- lib/wunderbar/builder.rb
Instance Method Summary collapse
- #_!(object) ⇒ Object
- #_exception(*args) ⇒ Object
- #encode(&block) ⇒ Object
-
#initialize(scope) ⇒ JsonBuilder
constructor
A new instance of JsonBuilder.
-
#method_missing(method, *args, &block) ⇒ Object
forward to Wunderbar, @_target, or @_scope.
-
#system(command, opts = {}) ⇒ Object
execute a system command, echoing stdin, stdout, and stderr.
- #target! ⇒ Object
- #target?(type = nil) ⇒ Boolean
Methods inherited from BuilderClass
Methods inherited from BuilderBase
#get_binding, #set_variables_from_params
Constructor Details
#initialize(scope) ⇒ JsonBuilder
Returns a new instance of JsonBuilder.
453 454 455 456 |
# File 'lib/wunderbar/builder.rb', line 453 def initialize(scope) @_scope = scope @_target = {} end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
forward to Wunderbar, @_target, or @_scope
467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/wunderbar/builder.rb', line 467 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 |
Instance Method Details
#_!(object) ⇒ Object
533 534 535 |
# File 'lib/wunderbar/builder.rb', line 533 def _!(object) @_target = object end |
#_exception(*args) ⇒ Object
537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 |
# File 'lib/wunderbar/builder.rb', line 537 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) ⇒ Object
458 459 460 461 462 463 464 |
# File 'lib/wunderbar/builder.rb', line 458 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 |
#system(command, opts = {}) ⇒ Object
execute a system command, echoing stdin, stdout, and stderr
554 555 556 557 558 559 560 561 562 563 |
# File 'lib/wunderbar/builder.rb', line 554 def system(command, opts={}) transcript = opts[:transcript] || 'transcript' output_prefix = opts[:prefix] || {} output_prefix[:stdin] ||= '$ ' @_target[transcript] ||= [] super do |kind, line| @_target[transcript] << "#{output_prefix[kind]}#{line}" end end |
#target! ⇒ Object
565 566 567 568 569 570 571 |
# File 'lib/wunderbar/builder.rb', line 565 def target! begin JSON.pretty_generate(@_target)+ "\n" rescue @_target.to_json + "\n" end end |
#target?(type = nil) ⇒ Boolean
573 574 575 576 577 578 579 |
# File 'lib/wunderbar/builder.rb', line 573 def target?(type=nil) if Class === type type === @_target else @_target end end |