Sha256: 051c9c0d5542edab3128d44b40df7ac81d3b9fea594c5c289d17f17f164e761b

Contents?: true

Size: 1.18 KB

Versions: 6

Compression:

Stored size: 1.18 KB

Contents

require 'xml/mapping'

## forward declarations
class Client; end
class Address; end
class Item; end
class Signature; end


class Order
  include XML::Mapping

  text_node :reference, "@reference"
  object_node :client, "Client", :class=>Client
  hash_node :items, "Item", "@reference", :class=>Item
  array_node :signatures, "Signed-By", "Signature", :class=>Signature, :default_value=>[]

  def total_price
    items.values.map{|i| i.total_price}.inject(0){|x,y|x+y}
  end
end


class Client
  include XML::Mapping

  text_node :name, "Name"
  object_node :home_address, "Address[@where='home']", :class=>Address
  object_node :work_address, "Address[@where='work']", :class=>Address, :default_value=>nil
end


class Address
  include XML::Mapping

  text_node :city, "City"
  text_node :state, "State"
  numeric_node :zip, "ZIP"
  text_node :street, "Street"
end


class Item
  include XML::Mapping

  text_node :descr, "Description"
  numeric_node :quantity, "Quantity"
  numeric_node :unit_price, "UnitPrice"

  def total_price
    quantity*unit_price
  end
end


class Signature
  include XML::Mapping

  text_node :name, "Name"
  text_node :position, "Position", :default_value=>"Some Employee"
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
xml-mapping-0.10.1 examples/order.rb
xml-mapping-0.10.0 examples/order.rb
xml-mapping-0.9.1 examples/order.rb
pdf-labels-1.0.0 vendor/xml-mapping/examples/order.rb
xml-mapping-0.8 examples/order.rb
xml-mapping-0.8.1 examples/order.rb