Class: Reactor::Versioner::Slave

Inherits:
Object
  • Object
show all
Defined in:
lib/reactor/tools/versioner.rb

Overview

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.

Instance Method Summary collapse

Instance Method Details

#base_nameObject



24
25
26
# File 'lib/reactor/tools/versioner.rb', line 24

def base_name
  "objClass"
end

#createObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/reactor/tools/versioner.rb', line 69

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?Boolean



28
29
30
31
32
33
34
35
36
37
38
39
# 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!
    response.ok?
  rescue StandardError
    false
  end
end

#loadObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/reactor/tools/versioner.rb', line 41

def load
  create unless 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? || (data == false)

  data.to_a
end

#nameObject



20
21
22
# File 'lib/reactor/tools/versioner.rb', line 20

def name
  "version_store"
end

#store(data) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/reactor/tools/versioner.rb', line 56

def store(data)
  create unless exists?
  yaml = data.to_yaml
  base64 = Base64.encode64(yaml).delete("\n").delete("\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