Class: Mkxms::Mssql::IndentedStringBuilder::DSL

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/mkxms/mssql/indented_string_builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder, outer_binding) ⇒ DSL

Returns a new instance of DSL.



39
40
41
42
43
44
45
# 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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &blk) ⇒ Object (private)



64
65
66
67
68
69
70
# 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

Class Method Details

.for(builder, block) ⇒ Object



35
36
37
# File 'lib/mkxms/mssql/indented_string_builder.rb', line 35

def self.for(builder, block)
  new(builder, block.binding).instance_eval(&block)
end

Instance Method Details

#puts(*args, &blk) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# 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