class Riddl::Utils::Properties::UpdContent
Public Instance Methods
response()
click to toggle source
# File lib/ruby/riddl/utils/properties.rb, line 494 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 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) nods = nodes.map{|ele| ele.children.delete_all!; ele} nods.each do |ele| if value.nil? ele.add newstuff 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