class Mkxms::Mssql::IndentedStringBuilder::DSL

Public Class Methods

for(builder, block) click to toggle source
# File lib/mkxms/mssql/indented_string_builder.rb, line 35
def self.for(builder, block)
  new(builder, block.binding).instance_eval(&block)
end
new(builder, outer_binding) click to toggle source
# File lib/mkxms/mssql/indented_string_builder.rb, line 39
def initialize(builder, outer_binding)
  @builder = builder
  while sb = surrounding_binding(outer_binding)
    outer_binding = sb
  end
  @outer_binding = outer_binding
end

Public Instance Methods

puts(*args, &blk) click to toggle source
# File lib/mkxms/mssql/indented_string_builder.rb, line 49
def puts(*args, &blk)
  if blk
    if args[0].kind_of? Range
      @builder.puts(args[0].begin, *args[1..-1])
      indented(&blk)
      @builder.puts(args[0].end, *args[1..-1])
    else
      @builder.puts(*args) {IndentedStringBuilder.new.tap {|i| i.dsl(&blk)}}
    end
  else
    @builder.puts(*args)
  end
end

Private Instance Methods

method_missing(sym, *args, &blk) click to toggle source
# File lib/mkxms/mssql/indented_string_builder.rb, line 64
def method_missing(sym, *args, &blk)
  if args.empty? and blk.nil?
    @outer_binding.eval sym.to_s
  else
    @outer_binding.eval("method(:#{sym})").call(*args, &blk)
  end
end
surrounding_binding(b) click to toggle source
# File lib/mkxms/mssql/indented_string_builder.rb, line 72
def surrounding_binding(b)
  if (b_self = b.eval("self")).kind_of? DSL
    b_self.instance_variable_get(:@outer_binding)
  end
end