--zn4k3Q+N5puqXur4
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Hi all,
=20
Is there something out there that would let me create DOM objects in a mo= re=20
Rubyesque manner? For example, say I want to create a 'select' object in= a=20
web page. I'd like an API something along these lines:
=20
select =3D Select.new
select.options =3D ["joe", "bob", "moe"] # or {1=3D>"joe", 2=3D>"bob", 3= =3D>"moe"}
select.selected_index =3D 2
select.title =3D "Three guys"
select.access_key =3D "A"
=20
p select.html # Show html that would be generated using above options
=20
You get the picture. Is there anything like this out on the RAA? Nothin= g=20
immediately jumped out at me.
REXML has a DOM-like API, and it comes pre-installed with Ruby:
# load REXML=20
require 'rexml/document'
#
# Create an HTML select element.
#=20
class HTMLSelect
attr_accessor

ptions, :attrs, :index
def initialize(options =3D [], select_attrs =3D {}, selected_index =3D =
nil)
@options, @attrs,
@index =3D options, select_attrs, selected_index
end
def to_s
# create return select element and append requested attributes
ret =3D REXML::Element.new('select')
@attrs.each { |key, val| ret.attributes[key] =3D val }
=20
# iterate over, create, and append each option
@options.each_with_index do |opt, i|
# create and append element
opt_elem =3D ret << REXML::Element.new('option')
# add option text, and option attributes
opt_elem << REXML::Text.new(opt)
opt_elem.attributes['value'] =3D i.to_s
opt_elem.attributes['selected'] =3D 'Y' if i =3D=3D
@index
end
# convert select element to string and return
ret.to_s
end
end
# define attributes, option items, and initial selected index
select_attrs =3D {
'name' =3D> 'which_guy',
'title' =3D> 'Three Guys',
'access_key' =3D> 'A',
}
selected_index, options =3D 2, %w{joe bob moe}
=20
# build select box and print out result
puts HTMLSelect.new(options, select_attrs, selected_index).to_s
Hope this helps...
--=20
Paul Duncan <
[email protected]> pabs in #ruby-lang (OPN IRC)
http://www.pablotron.org/ OpenPGP Key ID: 0x82C29562
--zn4k3Q+N5puqXur4
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFDyARRzdlT34LClWIRAlb8AKDauzyZODM7m7DTz/lJbbeneKRirwCdHOTR
wm+STZ2qSe+aSgh9/pmohmI=
=CY2J
-----END PGP SIGNATURE-----
--zn4k3Q+N5puqXur4--