Changeset 1092
- Timestamp:
- 12/01/03 23:49:55 (5 years ago)
- Files:
-
- trunk/lib/soap/property.rb (modified) (5 diffs)
- trunk/test/soap/test_property.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/property.rb
r1090 r1092 66 66 if rest.empty? 67 67 check_lock(key) 68 @store[key]68 local_referent(key) 69 69 else 70 70 deref_key(key).referent(rest) … … 76 76 if rest.empty? 77 77 check_lock(key) 78 @store[key] = value78 local_assign(key, value) 79 79 local_hook(key) 80 80 else … … 98 98 def each_key 99 99 @store.each do |key, value| 100 if value.is_a?(::SOAP::Property)100 if propkey?(value) 101 101 yield(value) 102 102 end … … 107 107 check_lock(key) 108 108 ref = @store[key] ||= self.class.new 109 unless ref.is_a?(::SOAP::Property)109 unless propkey?(ref) 110 110 raise ArgumentError.new("key `#{key}' already defined as a value") 111 111 end … … 119 119 end 120 120 121 def local_referent(key) 122 if @locked and propkey?(@store[key]) 123 raise TypeError.new("cannot split any key from locked property") 124 end 125 @store[key] 126 end 127 128 def local_assign(key, value) 129 if @locked and propkey?(value) 130 raise TypeError.new("cannot add any key to locked property") 131 end 132 @store[key] = value 133 end 134 121 135 NO_HOOK = [].freeze 122 136 def local_hook(key) 123 137 @hook[key] || NO_HOOK 138 end 139 140 def propkey?(value) 141 value.is_a?(::SOAP::Property) 124 142 end 125 143 trunk/test/soap/test_property.rb
r1090 r1092 192 192 assert_equal(@prop, @prop.unlock) 193 193 end 194 195 def test_lock_split 196 @prop["a.b.c"] = 1 197 assert_instance_of(::SOAP::Property, @prop["a.b"]) 198 @prop["a.b.d"] = branch = ::SOAP::Property.new 199 @prop["a.b.d.e"] = 2 200 assert_equal(branch, @prop["a.b.d"]) 201 assert_equal(branch, @prop[:a][:b][:d]) 202 @prop.lock 203 assert_raises(TypeError) do 204 @prop["a.b"] 205 end 206 assert_raises(TypeError) do 207 @prop["a"] 208 end 209 @prop["a.b.c"] = 2 210 assert_equal(2, @prop["a.b.c"]) 211 assert_raises(TypeError) do 212 @prop["a.b.c"] = ::SOAP::Property.new 213 end 214 end 194 215 end 195 216