Module: Serialize
- Defined in:
- lib/simple_mapper/support/bliss_serializer.rb
Constant Summary collapse
- XML_OPTIONS =
{ :include_key => false, # Can be false, :element, or :attribute :report_nil => true, # Sets an attribute nil="true" on elements that are nil, so that the reader doesn't read as an empty string :key_name => :id, # Default key name :instance_columns => :visible_properties, :class_columns => :visible_properties, :default_root => 'xml', }
Class Method Summary collapse
- .hash_from_xml(xml, options = {}) ⇒ Object
- .object_to_xml(obj, options = {}) ⇒ Object
- .to_xml(attributes = {}, options = {}) ⇒ Object
Class Method Details
.hash_from_xml(xml, options = {}) ⇒ Object
61 62 63 |
# File 'lib/simple_mapper/support/bliss_serializer.rb', line 61 def self.hash_from_xml(xml,={}) xml.formatted(:xml).to_hash end |
.object_to_xml(obj, options = {}) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/simple_mapper/support/bliss_serializer.rb', line 17 def self.object_to_xml(obj, ={}) # Automatically set the key_name for DataMapper objects .merge!(:key_name => obj.class.table.key.name) if obj.class.respond_to?(:table) && obj.class.respond_to?(:persistent?) && obj.class.persistent? # Should do the above also for ActiveRecord... = .reverse_merge!(obj.class.) if obj.class.respond_to?(:xml_options) = .reverse_merge!(obj.) if obj.respond_to?(:xml_options) to_xml(obj.to_hash(), {:root => Inflector.underscore(obj.class.name)}.merge()) end |
.to_xml(attributes = {}, options = {}) ⇒ Object
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 |
# File 'lib/simple_mapper/support/bliss_serializer.rb', line 25 def self.to_xml(attributes={}, ={}) = XML_OPTIONS.merge() root = [:root] [:exclude] = [[:exclude]].flatten.compact.collect {|e| e.to_s} attributes.reject! {|k,v| [:exclude].include?(k)} doc = REXML::Document.new root_element = doc.add_element(root || 'xml') case [:include_key] when :attribute root_element.add_attribute([:key_name].to_s, attributes.delete([:key_name].to_s).to_s).extended do def self.to_string; %Q[#@expanded_name="#{to_s().gsub(/"/, '"')}"] end end when :element root_element.add_element([:key_name].to_s) << REXML::Text.new(attributes.delete([:key_name].to_s).to_s) end attributes.each do |key,value| if value.nil? node = root_element.add_element(key.to_s) node.add_attribute('nil', 'true') if [:report_nil] else if value.respond_to?(:to_xml) = {} = {:exclude => value.association.foreign_key_column.name} if value.respond_to?(:association) root_element.add_element(REXML::Document.new(value.to_xml(.merge(:root => key)).to_s)) else root_element.add_element(key.to_s) << REXML::Text.new(value.to_s.dup) end end end root ? doc.to_s : doc.children[0].children.to_s end |