Class | ActiveLdap::Schema::Attribute |
In: |
lib/active_ldap/schema.rb
|
Parent: | Entry |
super_attribute | [R] |
# File lib/active_ldap/schema.rb, line 356 356: def initialize(name, schema) 357: super(name, schema, "attributeTypes") 358: end
Returns true if the value MUST be transferred in binary
# File lib/active_ldap/schema.rb, line 388 388: def binary_required? 389: @binary_required 390: end
# File lib/active_ldap/schema.rb, line 427 427: def human_attribute_description 428: self.class.human_attribute_description(self) 429: end
# File lib/active_ldap/schema.rb, line 423 423: def human_attribute_name 424: self.class.human_attribute_name(self) 425: end
# File lib/active_ldap/schema.rb, line 415 415: def normalize_value(value) 416: normalize_value_internal(value, false) 417: end
Returns true if an attribute is read-only NO-USER-MODIFICATION
# File lib/active_ldap/schema.rb, line 364 364: def read_only? 365: @read_only 366: end
Returns true if an attribute can only have one value defined SINGLE-VALUE
# File lib/active_ldap/schema.rb, line 373 373: def single_value? 374: @single_value 375: end
# File lib/active_ldap/schema.rb, line 419 419: def syntax_description 420: send_to_syntax(nil, :description) 421: end
# File lib/active_ldap/schema.rb, line 411 411: def type_cast(value) 412: send_to_syntax(value, :type_cast, value) 413: end
# File lib/active_ldap/schema.rb, line 396 396: def valid?(value) 397: validate(value).nil? 398: end
# File lib/active_ldap/schema.rb, line 400 400: def validate(value) 401: error_info = validate_each_value(value) 402: return error_info if error_info 403: begin 404: normalize_value(value) 405: nil 406: rescue AttributeValueInvalid 407: [$!.message] 408: end 409: end
# File lib/active_ldap/schema.rb, line 553 553: def append_binary_key(hash) 554: key, value = hash.to_a[0] 555: if value.is_a?(Hash) 556: append_binary_key(value) 557: else 558: hash.merge(key => {"binary" => value}) 559: end 560: end
# File lib/active_ldap/schema.rb, line 432 432: def attribute(attribute_name, name=@name) 433: @schema.attribute_type(name, attribute_name) 434: end
# File lib/active_ldap/schema.rb, line 436 436: def collect_info 437: @description = attribute("DESC")[0] 438: @super_attribute = attribute("SUP")[0] 439: if @super_attribute 440: @super_attribute = @schema.attribute(@super_attribute) 441: @super_attribute = nil if @super_attribute.id.nil? 442: end 443: @read_only = attribute('NO-USER-MODIFICATION')[0] == 'TRUE' 444: @single_value = attribute('SINGLE-VALUE')[0] == 'TRUE' 445: @syntax = attribute("SYNTAX")[0] 446: @syntax = @schema.ldap_syntax(@syntax) if @syntax 447: if @syntax 448: @binary_required = @syntax.binary_transfer_required? 449: @binary = (@binary_required or !@syntax.human_readable?) 450: @derived_syntax = @syntax 451: else 452: @binary_required = false 453: @binary = false 454: @derived_syntax = nil 455: @derived_syntax = @super_attribute.syntax if @super_attribute 456: end 457: end
# File lib/active_ldap/schema.rb, line 546 546: def have_binary_key?(hash) 547: key, value = hash.to_a[0] 548: return true if key == "binary" 549: return have_binary_key?(value) if value.is_a?(Hash) 550: false 551: end
# File lib/active_ldap/schema.rb, line 511 511: def normalize_array_value(value, have_binary_mark) 512: if single_value? and value.reject {|v| v.is_a?(Hash)}.size > 1 513: format = _("Attribute %s can only have a single value: %s") 514: message = format % [human_attribute_name, value.inspect] 515: raise AttributeValueInvalid.new(self, value, message) 516: end 517: if value.empty? 518: if !have_binary_mark and binary_required? 519: [{'binary' => value}] 520: else 521: value 522: end 523: else 524: value.collect do |entry| 525: normalize_value_internal(entry, have_binary_mark)[0] 526: end 527: end 528: end
# File lib/active_ldap/schema.rb, line 530 530: def normalize_hash_value(value, have_binary_mark) 531: if value.size > 1 532: format = _("Attribute %s: Hash must have one key-value pair only: %s") 533: message = format % [human_attribute_name, value.inspect] 534: raise AttributeValueInvalid.new(self, value, message) 535: end 536: 537: if !have_binary_mark and binary_required? and !have_binary_key?(value) 538: [append_binary_key(value)] 539: else 540: key = value.keys[0] 541: have_binary_mark ||= key == "binary" 542: [{key => normalize_value_internal(value.values[0], have_binary_mark)}] 543: end 544: end
# File lib/active_ldap/schema.rb, line 491 491: def normalize_value_internal(value, have_binary_mark) 492: case value 493: when Array 494: normalize_array_value(value, have_binary_mark) 495: when Hash 496: normalize_hash_value(value, have_binary_mark) 497: else 498: if value.blank? 499: value = [] 500: else 501: value = send_to_syntax(value, :normalize_value, value) 502: end 503: if !have_binary_mark and binary_required? 504: [{'binary' => value}] 505: else 506: value.is_a?(Array) ? value : [value] 507: end 508: end 509: end
# File lib/active_ldap/schema.rb, line 459 459: def send_to_syntax(default_value, method_name, *args) 460: _syntax = syntax 461: if _syntax 462: _syntax.send(method_name, *args) 463: else 464: default_value 465: end 466: end
# File lib/active_ldap/schema.rb, line 468 468: def validate_each_value(value, option=nil) 469: failed_reason = nil 470: case value 471: when Hash 472: original_option = option 473: value.each do |sub_option, val| 474: opt = [original_option, sub_option].compact.join(";") 475: failed_reason, option = validate_each_value(val, opt) 476: break if failed_reason 477: end 478: when Array 479: original_option = option 480: value.each do |val| 481: failed_reason, option = validate_each_value(val, original_option) 482: break if failed_reason 483: end 484: else 485: failed_reason = send_to_syntax(nil, :validate, value) 486: end 487: return nil if failed_reason.nil? 488: [failed_reason, option] 489: end