Re: [ANN] tagz-4.2.0 - giraffe slayer
by M. Edward Borasky other posts by this author
May 8 2008 7:51PM messages near this date
[ANN] tagz-4.2.0 - giraffe slayer
|
Re: [ANN] tagz-4.2.0 - giraffe slayer
ara howard wrote:
>
> NAME
>
> tagz.rb
>
> SYNOPSIS
>
> require Tagz
>
> include Tagz.globally
>
> a_(:href => "/foo"){ "bar" } #=> <a href="/foo">bar</a>
>
> DESCRIPTION
>
> tagz.rb is generates html, xml, or any sgml variant like a small ninja
> running across the backs of a herd of giraffes swatting of heads like a
> mark-up weedwacker. weighing in at less than 200 lines of code
> tagz.rb adds
> an html syntax to ruby that is both unobtrusive, safe, and available
> globally to objects without the need for any builder or superfluous
> objects.
> tagz.rb is designed for applications that generate html to be able to
> do so
> easily in any context without heavyweight syntax or scoping issues,
> like a
> ninja sword through butter.
>
> INSTALL
>
> gem install tagz
>
> HISTORY
>
> 4.2.0
> - general lib cleanup
> - introduction of dual-mixin technique (Tagz.globally)
> - few small bug fixes
> - ninja tales
> - fixed div_{ false }
>
> SAMPLES
>
> <========< samples/a.rb >========>
>
> ~ > cat samples/a.rb
>
> #
> # in the simplest case tagz generates html using a syntax which
> safely mixes
> # in to any object
> #
>
> require 'tagz'
> include Tagz.globally
>
> class GiraffeModel
> def link
> a_(:href => "/giraffe/neck/42"){ "whack!" }
> end
> end
>
> puts GiraffeModel.new.link
>
> ~ > ruby samples/a.rb
>
> <a href="/giraffe/neck/42">whack!</a>
>
>
> <========< samples/b.rb >========>
>
> ~ > cat samples/b.rb
>
> #
> # tagz.rb mixes quite easily with your favourite templating engine,
> avoiding
> # the need for '<% rows.each do |row| %> ... <% row.each do |cell| %> '
> # madness and other types of logic to be coded in the templating
> language,
> # leaving templating to template engines and logic and looping to
> ruby -
> # unencumbered by extra funky syntax
> #
>
> require 'tagz'
> include Tagz.globally
>
> require 'erb'
>
> rows = %w( a b c ), %w( 1 2 3 )
>
> template = ERB.new <<-ERB
> <html>
> <body>
> <%=
>
> if rows
>
> table_{
> rows.each do |row|
> tr_{
> row.each do |cell|
> td_{ cell }
> end
> }
> end
> }
>
> end
>
> %>
> </body>
> </html>
> ERB
>
> puts template.result(binding)
>
>
> ~ > ruby samples/b.rb
>
> <html>
> <body>
>
> <table><tr><td>a</td><td>b</td><td>c</td></tr><tr><td>1</td><td>2</td><td>3</td></tr></tab
le>
>
> </body>
> </html>
>
>
> <========< samples/c.rb >========>
>
> ~ > cat samples/c.rb
>
> #
> # once you've learned to generate html using tagz you're primed to
> generate
> # xml too
> #
>
> require 'tagz'
> include Tagz.globally
>
> doc =
> xml_{
> giraffe_{ 'large' }
> ninja_{ 'small' }
> }
>
> puts doc
>
> ~ > ruby samples/c.rb
>
> <xml><giraffe>large</giraffe><ninja>small</ninja></xml>
>
>
> <========< samples/d.rb >========>
>
> ~ > cat samples/d.rb
>
> #
> # tagz.rb doesn't cramp your style, allowing even invalid html to be
> # generated. note the use of the 'tagz' method, which can be used
> both to
> # capture output and to append content to the top of the stack.
> #
>
> require 'tagz'
> include Tagz.globally
>
> def header
> tagz{
> html_
> body_(:class => 'ninja-like', :id => 'giraffe-slayer')
>
> tagz << "\n<!-- this is the header -->\n"
> }
> end
>
> def footer
> tagz{
> tagz << "\n<!-- this is the footer -->\n"
>
> body_
> html_
> }
> end
>
> puts header, footer
>
> ~ > ruby samples/d.rb
>
> <html><body class="ninja-like" id="giraffe-slayer">
> <!-- this is the header -->
>
> <!-- this is the footer -->
> <body><html>
>
>
> <========< samples/e.rb >========>
>
> ~ > cat samples/e.rb
>
> #
> # tagz.rb allows a safer method of mixin which requires any tagz
> methods to be
> # inside a tagz block - tagz generating methods outside a tagz block
> will
> # raise an error if tagz is included this way. also notice that the
> error is
> # reported from where it was raised - not from the bowels of the the
> tagz.rb
> # lib.
> #
>
> require 'tagz'
> include Tagz
>
> puts tagz{
> html_{ 'works only in here' }
> }
>
> begin
> html_{ 'not out here' }
> rescue Object => e
> p :backtrace => e.backtrace
> end
>
>
> ~ > ruby samples/e.rb
>
> <html>works only in here</html>
> {:backtrace=>["samples/e.rb:17"]}
>
>
> <========< samples/f.rb >========>
>
> ~ > cat samples/f.rb
>
> #
> # tagz.rb can generate really compact html. this is great to save
> bandwidth
> # but can sometimes make reading the generated html a bit rough. of
> course
> # using tidy or the dom inspector in firebug obviates the issue;
> nevertheless
> # it's sometime nice to break things up a little. you can use 'tagz
> << "\n"'
> # or the special shorthand '__' to accomplish this
> #
>
> require 'tagz'
> include Tagz.globally
>
> p div_{
> span_{ true }
> __
> span_{ false } # hey ryan, i fixed this ;-)
> __
> }
>
> ~ > ruby samples/f.rb
>
> "<div><span>true</span>\n<span>false</span>\n</div>"
>
>
>
> enjoy.
>
>
> a @ http://codeforpeople.com/
> --
> we can deny everything, except that we have the possibility of being
> better. simply reflect on that.
> h.h. the 14th dalai lama
>
>
>
>
>
Well ... if giraffes weren't endangered before, they are now. :)
P.S.: My WindowMaker desktop theme is called "Giraffe".
Thread:
Ara Howard
M. Edward Borasky
Phillip Gawlowski
Tim Pease
Adam Shelly
Matt Neuburg
Ara.T.Howard
Ara.T.Howard
Ara.T.Howard
|