/usr/lib/ruby/1.9.1/ramaze/gestalt.rb is in libramaze-ruby1.9.1 2010.06.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.
=begin rdoc
Example:
require 'ramaze'
require 'ramaze/gestalt'
page = Ramaze::Gestalt.build{
title = 'Hello, World!'
html do
head{ title(title) }
body do
h1(title)
p 'I count to 10'
('1'..'10').each do |count|
div(:style => 'width: 25px; height: 25px'){ count }
end
end
end
}
=end
module Ramaze
# Gestalt is the custom HTML/XML builder for Ramaze, based on a very simple
# DSL it will build your markup.
class Gestalt
attr_accessor :out
# The default way to start building your markup.
# Takes a block and returns the markup.
#
# Example:
# html =
# Gestalt.build do
# html do
# head do
# title "Hello, World!"
# end
# body do
# h1 "Hello, World!"
# end
# end
# end
#
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.
def initialize(&block)
@out = []
instance_eval(&block) if block_given?
end
# catching all the tags. passing it to _gestalt_build_tag
def method_missing(meth, *args, &block)
_gestalt_call_tag meth, args, &block
end
# workaround for Kernel#p to make <p /> tags possible.
def p(*args, &block)
_gestalt_call_tag :p, args, &block
end
# workaround for Kernel#select to make <select></select> work
def select(*args, &block)
_gestalt_call_tag(:select, args, &block)
end
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
# build a tag for `name`, using `args` and an optional block that
# will be yielded
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
def _gestalt_escape_entities(s)
s.to_s.gsub(/&/, '&').
gsub(/"/, '"').
gsub(/'/, ''').
gsub(/</, '<').
gsub(/>/, '>')
end
def tag(name, *args, &block)
_gestalt_call_tag(name.to_s, args, &block)
end
def to_s
@out.join
end
alias to_str to_s
end
end
|