Class | ActiveLdap::Xml::Serializer |
In: |
lib/active_ldap/xml.rb
|
Parent: | Object |
PRINTABLE_STRING | = | /[\x20-\x7e\w\s]*/ |
# File lib/active_ldap/xml.rb, line 11 11: def initialize(dn, attributes, schema, options={}) 12: @dn = dn 13: @attributes = attributes 14: @schema = schema 15: @options = options 16: end
# File lib/active_ldap/xml.rb, line 18 18: def to_s 19: root = @options[:root] 20: indent = @options[:indent] || 2 21: xml = @options[:builder] || Builder::XmlMarkup.new(:indent => indent) 22: xml.tag!(root) do 23: target_attributes.each do |key, values| 24: values = normalize_values(values).sort_by {|value, _| value} 25: if @schema.attribute(key).single_value? 26: serialize_attribute_value(xml, key, *values[0]) 27: else 28: serialize_attribute_values(xml, key, values) 29: end 30: end 31: end 32: end
# File lib/active_ldap/xml.rb, line 58 58: def normalize_value(value, options=[]) 59: targets = [] 60: case value 61: when Hash 62: value.each do |real_option, real_value| 63: targets.concat(normalize_value(real_value, options + [real_option])) 64: end 65: when Array 66: value.each do |real_value| 67: targets.concat(normalize_value(real_value, options)) 68: end 69: when DN 70: targets.concat(normalize_value(value.to_s, options)) 71: when nil 72: # ignore 73: else 74: if /\A#{PRINTABLE_STRING}\z/ !~ value 75: value = [value].pack("m").gsub(/\n/u, '') 76: options += ["base64"] 77: end 78: xml_attributes = {} 79: options.each do |name, val| 80: xml_attributes[name] = val || "true" 81: end 82: targets << [value, xml_attributes] 83: end 84: targets 85: end
# File lib/active_ldap/xml.rb, line 50 50: def normalize_values(values) 51: targets = [] 52: values.each do |value| 53: targets.concat(normalize_value(value)) 54: end 55: targets 56: end
# File lib/active_ldap/xml.rb, line 105 105: def serialize_attribute_value(xml, name, value, xml_attributes) 106: xml.tag!(name, value, xml_attributes) 107: end
# File lib/active_ldap/xml.rb, line 87 87: def serialize_attribute_values(xml, name, values) 88: return if values.blank? 89: 90: if name == "dn" or @options[:type].to_s.downcase == "ldif" 91: values.each do |value, xml_attributes| 92: serialize_attribute_value(xml, name, value, xml_attributes) 93: end 94: else 95: plural_name = name.pluralize 96: attributes = @options[:skip_types] ? {} : {"type" => "array"} 97: xml.tag!(plural_name, attributes) do 98: values.each do |value, xml_attributes| 99: serialize_attribute_value(xml, name, value, xml_attributes) 100: end 101: end 102: end 103: end
# File lib/active_ldap/xml.rb, line 35 35: def target_attributes 36: except_dn = false 37: attributes = @attributes.dup 38: (@options[:except] || []).each do |name| 39: if name == "dn" 40: except_dn = true 41: else 42: attributes.delete(name) 43: end 44: end 45: attributes = attributes.sort_by {|key, values| key} 46: attributes.unshift(["dn", [@dn]]) unless except_dn 47: attributes 48: end