Method: Exchanger::Field#to_xml_updates

Defined in:
lib/exchanger/field.rb

#to_xml_updates(value) ⇒ Object

See Element#to_xml_updates. Yields blocks with FieldURI and Item/Folder/etc changes.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/exchanger/field.rb', line 57

def to_xml_updates(value)
  return if options[:readonly]
  doc = Nokogiri::XML::Document.new
  if value.is_a?(Array)
    value.each do |sub_value|
      sub_field.to_xml_updates(sub_value) do |field_uri_xml, element_xml|
        element_wrapper = doc.create_element(sub_field.tag_name)
        element_wrapper << element_xml
        yield [
          field_uri_xml,
          element_wrapper
        ]
      end
    end
  elsif value.is_a?(Exchanger::Element)
    value.tag_name = tag_name
    if value.class.elements.keys.include?(:text)
      field = value.class.elements[:text]
      yield [
        field.to_xml_field_uri(value),
        field.to_xml(value)
      ]
    else
      # PhysicalAddress ?
      value.class.elements.each do |name, field|
        yield [
          field.to_xml_field_uri(value),
          field.to_xml(value, :only => [name])
        ]
      end
    end
  else # String, Integer, Boolean, ...
    yield [
      self.to_xml_field_uri(value),
      self.to_xml(value)
    ]
  end
end