Gestalt is the custom HTML/XML builder for Ramaze, based on a very simple DSL it will build your markup.
@example
html = Gestalt.build do html do head do title "Hello, World!" end body do h1 "Hello, World!" end end end
The default way to start building your markup. Takes a block and returns the markup.
@param [Block] block
# File lib/ramaze/gestalt.rb, line 31 def self.build(&block) self.new(&block).to_s end
Gestalt.new is like ::build but will return itself. you can either access out or .to_s it, which will return the actual markup.
Useful for distributed building of one page.
@param [Block] block
# File lib/ramaze/gestalt.rb, line 44 def initialize(&block) @out = [] instance_eval(&block) if block_given? end
Build a tag for `name`, using `args` and an optional block that will be yielded.
@param [String] name @param [Hash] attr @param [Hash] text
# File lib/ramaze/gestalt.rb, line 110 def _gestalt_build_tag(name, attr = {}, text = []) @out << "<#{name}" @out << attr.map{|(k,v)| %[ #{k}="#{_gestalt_escape_entities(v)}"] }.join if text != [] or block_given? @out << ">" @out << _gestalt_escape_entities([text].join) if block_given? text = yield @out << text.to_str if text != @out and text.respond_to?(:to_str) end @out << "</#{name}>" else @out << ' />' end end
Calls a particular tag based on the specified parameters.
@param [String] name @param [Hash] args @param [Block] block
# File lib/ramaze/gestalt.rb, line 89 def _gestalt_call_tag(name, args, &block) if args.size == 1 and args[0].kind_of? Hash # args are just attributes, children in block... _gestalt_build_tag name, args[0], &block elsif args[1].kind_of? Hash # args are text and attributes ie. a('mylink', :href => '/mylink') _gestalt_build_tag(name, args[1], args[0], &block) else # no attributes, but text _gestalt_build_tag name, {}, args, &block end end
Replace common HTML characters such as " and < with their entities.
@param [String] s The HTML string that needs to be escaped.
# File lib/ramaze/gestalt.rb, line 131 def _gestalt_escape_entities(s) s.to_s.gsub(/&/, '&'). gsub(/"/, '"'). gsub(/'/, '''). gsub(/</, '<'). gsub(/>/, '>') end
Catching all the tags. passing it to _gestalt_build_tag
@param [String] method The method that was called. @param [Hash] args Additional arguments passed to the called method. @param [Block] block
# File lib/ramaze/gestalt.rb, line 56 def method_missing(meth, *args, &block) _gestalt_call_tag meth, args, &block end
Workaround for Kernel#p to make <p /> tags possible.
@param [Hash] args Extra arguments that should be processed before
creating the paragraph tag.
@param [Block] block
# File lib/ramaze/gestalt.rb, line 67 def p(*args, &block) _gestalt_call_tag :p, args, &block end
Workaround for Kernel#select to make <select></select> work.
@param [Hash] args Extra arguments that should be processed before
creating the select tag.
@param [Block] block
# File lib/ramaze/gestalt.rb, line 78 def select(*args, &block) _gestalt_call_tag(:select, args, &block) end
Shortcut for building tags,
@param [String] name @param [Hash] args @param [Block] block
# File lib/ramaze/gestalt.rb, line 146 def tag(name, *args, &block) _gestalt_call_tag(name.to_s, args, &block) end
Generated with the Darkfish Rdoc Generator 2.