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



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

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

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/reactor/tools/versioner.rb', line 29

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

#loadObject



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

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

#nameObject



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

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