class Riddl::Utils::Properties::PtcContent
Public Instance Methods
response()
click to toggle source
# File lib/ruby/riddl/utils/properties.rb, line 433 def response backend = @a[0] handler = @a[1] property = @r[1] value = @p.detect{|p| p.name == 'value'}; value = value.nil? ? value : value.value content = @p.detect{|p| p.name == 'content'}; content = content.nil? ? content : content.value content = content.read if content.respond_to? :read minor = @r[2] unless backend.modifiable?(property) @status = 500 return # change properties.schema end path = "/p:properties/*[name()=\"#{property}\"]#{minor.nil? ? '' : "/p:#{minor}"}" nodes = backend.data.find(path) if nodes.empty? @status = 404 return # this property does not exist end if backend.is_state?(property) unless backend.valid_state?(property,nodes.first.to_s,value) @status = 404 return # not a valid state from here on end end newstuff = value.nil? ? XML::Smart.string(content).root.children : value backend.modify do |doc| nodes = doc.root.find(path) nodes.each do |ele| if value.nil? newstuff.each do |child| cpath = File.basename(child.qname.name) subele = ele.find("p:" + cpath).first if subele subele.replace_by_copy(child) else ele.add(child) end end ele.children.first.attributes['changed'] = Time.now.xmlschema if backend.is_state?(property) else ele.text = newstuff ele.attributes['changed'] = Time.now.xmlschema if backend.is_state?(property) end end end || begin @status = 400 return # bad request end EM.defer{handler.property(property).update} unless handler.nil? return end