Changeset 1468
- Timestamp:
- 04/14/05 16:40:52 (4 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1459 r1468 445 445 def to_obj 446 446 hash = {} 447 proptype = {} 447 448 each do |k, v| 448 hash[k] = v.respond_to?(:to_obj) ? v.to_obj : v.to_s 449 value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s 450 case proptype[k] 451 when :single 452 hash[k] = [hash[k], value] 453 proptype[k] = :multi 454 when :multi 455 hash[k] << value 456 else 457 hash[k] = value 458 proptype[k] = :single 459 end 449 460 end 450 461 hash … … 557 568 else 558 569 hash = {} 570 proptype = {} 559 571 each do |k, v| 560 hash[k] = v.respond_to?(:to_obj) ? v.to_obj : v.to_s 572 value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s 573 case proptype[k] 574 when :single 575 hash[k] = [hash[k], value] 576 proptype[k] = :multi 577 when :multi 578 hash[k] << value 579 else 580 hash[k] = value 581 proptype[k] = :single 582 end 561 583 end 562 584 hash … … 575 597 end 576 598 577 def self.from_obj( hash_or_string, namespace = nil)599 def self.from_obj(obj, namespace = nil) 578 600 o = SOAPElement.new(nil) 579 case hash_or_string601 case obj 580 602 when nil 581 603 o.text = nil 582 604 when Hash 583 hash_or_string.each do |k, v| 584 child = self.from_obj(v, namespace) 585 child.elename = 586 k.is_a?(XSD::QName) ? k : XSD::QName.new(namespace, k.to_s) 587 o.add(child) 605 obj.each do |elename, value| 606 if value.is_a?(Array) 607 value.each do |subvalue| 608 child = from_obj(subvalue, namespace) 609 child.elename = to_elename(elename, namespace) 610 o.add(child) 611 end 612 else 613 child = from_obj(value, namespace) 614 child.elename = to_elename(elename, namespace) 615 o.add(child) 616 end 588 617 end 589 618 else 590 o.text = hash_or_string.to_s619 o.text = obj.to_s 591 620 end 592 621 o 622 end 623 624 def self.to_elename(obj, namespace = nil) 625 if obj.is_a?(XSD::QName) 626 obj 627 elsif /\A(.+):([^:]+)\z/ =~ obj.to_s 628 XSD::QName.new($1, $2) 629 else 630 XSD::QName.new(namespace, obj.to_s) 631 end 593 632 end 594 633