class Reactor::Versioner::Slave

Slave class used by Versioner class to load and store migrated files inside the CM. It uses separate object type named “version_store” and stores data as base64'ed YAML inside recordSetCallback (Versionszuweisungsfunktion). Theoretically you could use any class for this purpose, but you would lose the ability to set recordSetCallback for this class. Other than that, it does not affect the object class in any way!

Maybe the future version won't disrupt even this fuction.

Public Instance Methods

base_name() click to toggle source
# File lib/reactor/tools/versioner.rb, line 24
def base_name
  "objClass"
end
create() click to toggle source
# File lib/reactor/tools/versioner.rb, line 68
def create
  request = Reactor::Cm::XmlRequest.prepare do |xml|
    xml.create_tag!(base_name) do
      xml.tag!('name') do
        xml.text!(name)
      end
      xml.tag!('objType') do
        xml.text!('document')
      end
    end
  end
  response = request.execute!
  response.ok?
end
exists?() click to toggle source
# File lib/reactor/tools/versioner.rb, line 28
def exists?
  begin
    request = Reactor::Cm::XmlRequest.prepare do |xml|
      xml.where_key_tag!(base_name, 'name', name)
      xml.get_key_tag!(base_name, 'name')
    end
    response = request.execute!
    return response.ok?
  rescue
    return false
  end
end
load() click to toggle source
# File lib/reactor/tools/versioner.rb, line 41
def load
  create if not exists?
  request = Reactor::Cm::XmlRequest.prepare do |xml|
    xml.where_key_tag!(base_name, 'name', name)
    xml.get_key_tag!(base_name, 'recordSetCallback')
  end
  response = request.execute!
  base64 = response.xpath("//recordSetCallback").text.to_s
  yaml = Base64::decode64(base64)
  data = YAML::load(yaml)
  return [] if data.nil? or data == false
  return data.to_a
end
name() click to toggle source
# File lib/reactor/tools/versioner.rb, line 20
def name
  "version_store"
end
store(data) click to toggle source
# File lib/reactor/tools/versioner.rb, line 55
def store(data)
  create if not exists?
  yaml = data.to_yaml
  base64 = Base64::encode64(yaml).gsub("\n", '').gsub("\r", '')
  content = '#' + base64
  request = Reactor::Cm::XmlRequest.prepare do |xml|
    xml.where_key_tag!(base_name, 'name', name)
    xml.set_key_tag!(base_name, 'recordSetCallback', content)
  end
  response = request.execute!
  response.ok?
end