ovirt-engine-sdk 4.0.1 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGES.adoc +684 -0
- data/README.adoc +729 -32
- data/ext/ovirtsdk4c/extconf.rb +31 -5
- data/ext/ovirtsdk4c/ov_error.c +9 -2
- data/ext/ovirtsdk4c/ov_error.h +3 -1
- data/ext/ovirtsdk4c/ov_http_client.c +1218 -0
- data/ext/ovirtsdk4c/ov_http_client.h +75 -0
- data/ext/ovirtsdk4c/ov_http_request.c +397 -0
- data/ext/ovirtsdk4c/ov_http_request.h +54 -0
- data/ext/ovirtsdk4c/ov_http_response.c +210 -0
- data/ext/ovirtsdk4c/ov_http_response.h +41 -0
- data/ext/ovirtsdk4c/ov_http_transfer.c +91 -0
- data/ext/ovirtsdk4c/ov_http_transfer.h +47 -0
- data/ext/ovirtsdk4c/ov_module.h +2 -2
- data/ext/ovirtsdk4c/ov_string.c +43 -0
- data/ext/ovirtsdk4c/ov_string.h +25 -0
- data/ext/ovirtsdk4c/ov_xml_reader.c +115 -99
- data/ext/ovirtsdk4c/ov_xml_reader.h +20 -3
- data/ext/ovirtsdk4c/ov_xml_writer.c +95 -77
- data/ext/ovirtsdk4c/ov_xml_writer.h +18 -3
- data/ext/ovirtsdk4c/ovirtsdk4c.c +10 -2
- data/lib/ovirtsdk4/connection.rb +695 -0
- data/lib/ovirtsdk4/errors.rb +70 -0
- data/lib/ovirtsdk4/probe.rb +324 -0
- data/lib/ovirtsdk4/reader.rb +74 -40
- data/lib/ovirtsdk4/readers.rb +3325 -976
- data/lib/ovirtsdk4/service.rb +439 -48
- data/lib/ovirtsdk4/services.rb +29365 -21180
- data/lib/ovirtsdk4/type.rb +20 -6
- data/lib/ovirtsdk4/types.rb +15048 -3198
- data/lib/ovirtsdk4/version.rb +1 -1
- data/lib/ovirtsdk4/writer.rb +108 -13
- data/lib/ovirtsdk4/writers.rb +1373 -294
- data/lib/ovirtsdk4.rb +4 -2
- metadata +88 -36
- data/lib/ovirtsdk4/http.rb +0 -548
data/lib/ovirtsdk4/version.rb
CHANGED
data/lib/ovirtsdk4/writer.rb
CHANGED
@@ -15,7 +15,6 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
module OvirtSDK4
|
18
|
-
|
19
18
|
#
|
20
19
|
# This is the base class for all the XML writers used by the SDK. It contains the utility methods used by
|
21
20
|
# all of them.
|
@@ -23,7 +22,6 @@ module OvirtSDK4
|
|
23
22
|
# @api private
|
24
23
|
#
|
25
24
|
class Writer
|
26
|
-
|
27
25
|
#
|
28
26
|
# Writes an element with the given name and string value.
|
29
27
|
#
|
@@ -42,11 +40,7 @@ module OvirtSDK4
|
|
42
40
|
# @return [String]
|
43
41
|
#
|
44
42
|
def self.render_boolean(value)
|
45
|
-
|
46
|
-
return 'true'
|
47
|
-
else
|
48
|
-
return 'false'
|
49
|
-
end
|
43
|
+
value ? 'true' : 'false'
|
50
44
|
end
|
51
45
|
|
52
46
|
#
|
@@ -67,7 +61,7 @@ module OvirtSDK4
|
|
67
61
|
# @return [String]
|
68
62
|
#
|
69
63
|
def self.render_integer(value)
|
70
|
-
|
64
|
+
value.to_s
|
71
65
|
end
|
72
66
|
|
73
67
|
#
|
@@ -84,11 +78,11 @@ module OvirtSDK4
|
|
84
78
|
#
|
85
79
|
# Converts the given decimal value to an string.
|
86
80
|
#
|
87
|
-
# @param value [
|
81
|
+
# @param value [Float]
|
88
82
|
# @return [String]
|
89
83
|
#
|
90
84
|
def self.render_decimal(value)
|
91
|
-
|
85
|
+
value.to_s
|
92
86
|
end
|
93
87
|
|
94
88
|
#
|
@@ -96,7 +90,7 @@ module OvirtSDK4
|
|
96
90
|
#
|
97
91
|
# @param writer [XmlWriter]
|
98
92
|
# @param name [String]
|
99
|
-
# @param value [
|
93
|
+
# @param value [Float]
|
100
94
|
#
|
101
95
|
def self.write_decimal(writer, name, value)
|
102
96
|
writer.write_element(name, Writer.render_decimal(value))
|
@@ -109,7 +103,30 @@ module OvirtSDK4
|
|
109
103
|
# @return [String]
|
110
104
|
#
|
111
105
|
def self.render_date(value)
|
112
|
-
|
106
|
+
value.xmlschema
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# Converts the given value to an string, assuming that it is of the given type.
|
111
|
+
#
|
112
|
+
# @param value [Object] The value.
|
113
|
+
# @param type [Class] The type.
|
114
|
+
# @return [String] The string that represents the value.
|
115
|
+
#
|
116
|
+
def self.render(value, type)
|
117
|
+
if type.equal?(String)
|
118
|
+
value
|
119
|
+
elsif type.equal?(TrueClass)
|
120
|
+
render_boolean(value)
|
121
|
+
elsif type.equal?(Integer)
|
122
|
+
render_integer(value)
|
123
|
+
elsif type.equal?(Float)
|
124
|
+
render_decimal(value)
|
125
|
+
elsif type.equal?(DateTime)
|
126
|
+
render_date(value)
|
127
|
+
else
|
128
|
+
raise Error, "Don't know how to render value '#{value}' of type '#{type}'"
|
129
|
+
end
|
113
130
|
end
|
114
131
|
|
115
132
|
#
|
@@ -123,6 +140,84 @@ module OvirtSDK4
|
|
123
140
|
writer.write_element(name, Writer.render_date(value))
|
124
141
|
end
|
125
142
|
|
126
|
-
|
143
|
+
#
|
144
|
+
# This hash stores for each known type a reference to the method that writes the XML document corresponding for that
|
145
|
+
# type. For example, for the `Vm` type it will contain a reference to the `VmWriter.write_one` method.
|
146
|
+
#
|
147
|
+
@writers = {}
|
148
|
+
|
149
|
+
#
|
150
|
+
# Registers a write method.
|
151
|
+
#
|
152
|
+
# @param type [Class] The type.
|
153
|
+
# @param writer [Method] The reference to the method that writes the XML document corresponding to the type.
|
154
|
+
#
|
155
|
+
def self.register(type, writer)
|
156
|
+
@writers[type] = writer
|
157
|
+
end
|
127
158
|
|
159
|
+
#
|
160
|
+
# Writes one object, determining the writer method to use based on the type. For example if the type of the object
|
161
|
+
# is `Vm` then it will create write the `vm` tag, with its contents.
|
162
|
+
#
|
163
|
+
# @param object [Struct] The object to write.
|
164
|
+
#
|
165
|
+
# @param opts [Hash] Options to alter the behaviour of the method.
|
166
|
+
#
|
167
|
+
# @option opts [XmlWriter] :target The XML writer where the output will be written. If it this option
|
168
|
+
# isn't given, or if the value is `nil` the method will return a string contain the XML document.
|
169
|
+
#
|
170
|
+
# @option opts [String] :root The name of the root tag of the generated XML document. This isn't needed
|
171
|
+
# when writing single objects, as the tag is calculated from the type of the object, for example, if
|
172
|
+
# the object is a virtual machine then the tag will be `vm`. But when writing arrays of objects the tag
|
173
|
+
# is needed, because the list may be empty, or have different types of objects. In this case, for arrays,
|
174
|
+
# if the name isn't provided an exception will be raised.
|
175
|
+
#
|
176
|
+
# @option opts [Boolean] :indent (false) Indicates if the output should be indented, for easier reading by humans.
|
177
|
+
#
|
178
|
+
def self.write(object, opts = {})
|
179
|
+
# Get the options:
|
180
|
+
target = opts[:target]
|
181
|
+
root = opts[:root]
|
182
|
+
indent = opts[:indent] || false
|
183
|
+
|
184
|
+
# If the target is `nil` then create a temporary XML writer to write the output:
|
185
|
+
cursor = nil
|
186
|
+
if target.nil?
|
187
|
+
cursor = XmlWriter.new(nil, indent)
|
188
|
+
elsif target.is_a?(XmlWriter)
|
189
|
+
cursor = target
|
190
|
+
else
|
191
|
+
raise ArgumentError, "Expected an 'XmlWriter', but got '#{target.class}'"
|
192
|
+
end
|
193
|
+
|
194
|
+
# Do the actual write, and make sure to always close the XML writer if we created it:
|
195
|
+
begin
|
196
|
+
if object.is_a?(Array)
|
197
|
+
# For arrays we can't decide which tag to use, so the 'root' parameter is mandatory in this case:
|
198
|
+
raise Error, "The 'root' option is mandatory when writing arrays" if root.nil?
|
199
|
+
|
200
|
+
# Write the root tag, and then recursively call the method to write each of the items of the array:
|
201
|
+
cursor.write_start(root)
|
202
|
+
object.each do |item|
|
203
|
+
write(item, target: cursor)
|
204
|
+
end
|
205
|
+
cursor.write_end
|
206
|
+
else
|
207
|
+
# Select the specific writer according to the type:
|
208
|
+
type = object.class
|
209
|
+
writer = @writers[type]
|
210
|
+
raise Error, "Can't find a writer for type '#{type}'" if writer.nil?
|
211
|
+
|
212
|
+
# Write the object using the specific method:
|
213
|
+
writer.call(object, cursor, root)
|
214
|
+
end
|
215
|
+
|
216
|
+
# If no XML cursor was explicitly given, and we created it, then we need to return the generated XML text:
|
217
|
+
cursor.string if target.nil?
|
218
|
+
ensure
|
219
|
+
cursor.close if !cursor.nil? && !cursor.equal?(target)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
128
223
|
end
|