Changeset 1085
- Timestamp:
- 12/01/03 00:25:43 (5 years ago)
- Files:
-
- trunk/lib/soap/property.rb (modified) (7 diffs)
- trunk/test/soap/test_property.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/property.rb
r1084 r1085 1 # soap/property.rb: SOAP4R - Property definition.2 # Copyright (C) 200 0, 2001, 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.1 # soap/property.rb: SOAP4R - Property implementation. 2 # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 14 14 @store = Hash.new 15 15 @hook = Hash.new 16 @locked = false 16 17 end 17 18 … … 38 39 end 39 40 40 # keys: downcase dsymbol41 # keys: downcase symbol 41 42 def keys 42 43 @store.keys 44 end 45 46 def lock 47 each_key do |key| 48 key.lock 49 end 50 @locked = true 51 end 52 53 def unlock 54 @locked = false 55 each_key do |key| 56 key.unlock 57 end 43 58 end 44 59 … … 49 64 key = to_key(name) 50 65 if rest.empty? 66 check_lock(key) 51 67 @store[key] 52 68 else … … 59 75 key = to_key(name) 60 76 if rest.empty? 77 check_lock(key) 61 78 @store[key] = value 62 79 local_hook(key) … … 70 87 key = to_key(name) 71 88 if rest.empty? 89 check_lock(key) 72 90 (@hook[key] ||= []) << hook 73 91 else … … 78 96 private 79 97 98 def each_key 99 @store.each do |key, value| 100 if value.is_a?(::SOAP::Property) 101 yield(value) 102 end 103 end 104 end 105 80 106 def deref_key(key) 107 check_lock(key) 81 108 ref = @store[key] ||= self.class.new 82 unless ref.is_a?( SOAP::Property)83 raise ArgumentError.new("key `#{key}' already defined as a value .")109 unless ref.is_a?(::SOAP::Property) 110 raise ArgumentError.new("key `#{key}' already defined as a value") 84 111 end 85 112 ref 113 end 114 115 def check_lock(key) 116 if @locked and !@store.key?(key) 117 raise TypeError.new("cannot add any key to locked property") 118 end 86 119 end 87 120 trunk/test/soap/test_property.rb
r1084 r1085 124 124 assert(@prop["a"].keys.member?(:c)) 125 125 end 126 127 def test_lock 128 @prop["a.a"] = nil 129 @prop["a.b.c"] = 1 130 @prop["b"] = false 131 @prop.lock 132 assert_equal(nil, @prop["a.a"]) 133 assert_equal(1, @prop["a.b.c"]) 134 assert_equal(false, @prop["b"]) 135 assert_raises(TypeError) do 136 assert_nil(@prop["c"]) 137 end 138 assert_raises(TypeError) do 139 @prop["c"] = 2 140 end 141 assert_raises(TypeError) do 142 @prop["a.b.R"] 143 end 144 assert_raises(TypeError) do 145 @prop.add_hook("a.c") do 146 assert(false) 147 end 148 end 149 assert_nil(@prop["a.a"]) 150 @prop["a.b"] = nil 151 assert_nil(@prop["a.b"]) 152 # 153 @prop.unlock 154 assert_nil(@prop["c"]) 155 @prop["c"] = 2 156 assert_equal(2, @prop["c"]) 157 @prop["a.d.a.a"] = :foo 158 assert_equal(:foo, @prop["a.d.a.a"]) 159 tested = false 160 @prop.add_hook("a.c") do |name, value| 161 assert(true) 162 tested = true 163 end 164 @prop["a.c"] = 3 165 assert(tested) 166 end 126 167 end 127 168