####read access o=Order.load_from_file("order.xml") => ##, "RF-0034"=>#, "RF-0001"=>#}, @signatures=[#, #, #], @client=#, @name="Jean Smith", @home_address=#>, @reference="12343-AHSHE-314159"> o.reference => "12343-AHSHE-314159" o.client => #, @name="Jean Smith", @home_address=#> o.items.keys => ["RF-3341", "RF-0034", "RF-0001"] o.items["RF-0034"].descr => "Chocolate" o.items["RF-0034"].total_price => 142.5 o.signatures => [#, #, #] o.signatures[2].name => "Miles O'Brien" o.signatures[2].position => "Some Employee" ## default value was set o.total_price => 257.5 ####write access o.client.name="James T. Kirk" o.items['RF-4711'] = Item.new o.items['RF-4711'].descr = 'power transfer grid' o.items['RF-4711'].quantity = 2 o.items['RF-4711'].unit_price = 29.95 s=Signature.new s.name='Harry Smith' s.position='general manager' o.signatures << s xml=o.save_to_xml #convert to REXML node; there's also o.save_to_file(name) => ... xml.write($stdout,2) James T. Kirk
San Mateo CA 94403 2000, Alameda de las Pulgas
San Francisco CA 94102 98765, Fulton Street
Cookie 30 0.85 Chocolate 5 28.5 Stuffed Penguin 10 8.95 power transfer grid 2 29.95 John Doe product manager Jill Smith clerk Miles O'Brien Harry Smith general manager
####Starting a new order from scratch o = Order.new => # ## attributes with default values (here: signatures) are set ## automatically xml=o.save_to_xml XML::MappingError: no value, and no default value, for attribute: reference from ../lib/xml/../xml/mapping/base.rb:381:in `obj_to_xml' from ../lib/xml/../xml/mapping/base.rb:157:in `fill_into_xml' from ../lib/xml/../xml/mapping/base.rb:156:in `each' from ../lib/xml/../xml/mapping/base.rb:156:in `fill_into_xml' from ../lib/xml/../xml/mapping/base.rb:168:in `save_to_xml' ## can't save as long as there are still unset attributes without ## default values o.reference = "FOOBAR-1234" o.client = Client.new o.client.name = 'Ford Prefect' o.client.home_address = Address.new o.client.home_address.street = '42 Park Av.' o.client.home_address.city = 'small planet' o.client.home_address.zip = 17263 o.client.home_address.state = 'Betelgeuse system' o.items={'XY-42' => Item.new} o.items['XY-42'].descr = 'improbability drive' o.items['XY-42'].quantity = 3 o.items['XY-42'].unit_price = 299.95 o.save_to_xml.write($stdout,2) Ford Prefect
small planet Betelgeuse system 17263 42 Park Av.
improbability drive 3 299.95
## the root element name when saving an object to XML will by default ## be derived from the class name (in this example, "Order" became ## "order"). This can be overridden on a per-class basis; see ## XML::Mapping::ClassMethods#root_element_namefor details. => nil