taverna-baclava 1.0.0
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.
- data/Changes.rdoc +8 -0
- data/Licence.rdoc +29 -0
- data/ReadMe.rdoc +17 -0
- data/lib/baclava/node.rb +102 -0
- data/lib/baclava/reader.rb +110 -0
- data/lib/baclava/writer.rb +122 -0
- data/lib/taverna-baclava.rb +34 -0
- data/test/tc_baclava.rb +56 -0
- data/test/tc_node.rb +75 -0
- data/test/test.baclava +86 -0
- data/test/ts_baclava.rb +38 -0
- metadata +126 -0
data/Changes.rdoc
ADDED
data/Licence.rdoc
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
7
|
+
|
8
|
+
* Redistributions of source code must retain the above copyright notice,
|
9
|
+
this list of conditions and the following disclaimer.
|
10
|
+
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
13
|
+
and/or other materials provided with the distribution.
|
14
|
+
|
15
|
+
* Neither the names of The University of Manchester nor the names of its
|
16
|
+
contributors may be used to endorse or promote products derived from this
|
17
|
+
software without specific prior written permission.
|
18
|
+
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
POSSIBILITY OF SUCH DAMAGE.
|
data/ReadMe.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= Taverna[http://www.taverna.org.uk/] Baclava Gem
|
2
|
+
|
3
|
+
Authors:: Robert Haines, Stian Soiland-Reyes, David Withers, Emmanuel Tagarira
|
4
|
+
Contact:: mailto:support@mygrid.org.uk
|
5
|
+
URL:: http://www.taverna.org.uk/
|
6
|
+
Licence:: BSD (See Licence or http://www.opensource.org/licenses/bsd-license.php)
|
7
|
+
Copyright:: (c) 2006-2012 The University of Manchester, UK
|
8
|
+
|
9
|
+
== Synopsis
|
10
|
+
|
11
|
+
This is a Ruby library to support the reading and writing of the
|
12
|
+
Baclava data format.
|
13
|
+
|
14
|
+
== Support
|
15
|
+
|
16
|
+
Please email mailto:support@mygrid.org.uk for any questions relating to
|
17
|
+
this Ruby gem.
|
data/lib/baclava/node.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Authors: Robert Haines, Stian Soiland-Reyes, David Withers, Emmanuel Tagarira
|
32
|
+
|
33
|
+
module Taverna
|
34
|
+
module Baclava
|
35
|
+
|
36
|
+
# An annotated data value.
|
37
|
+
class Node
|
38
|
+
|
39
|
+
# The value of this Node.
|
40
|
+
attr_reader :value
|
41
|
+
|
42
|
+
# A list of annotations on this Node.
|
43
|
+
attr_accessor :annotation
|
44
|
+
|
45
|
+
# The syntactic type of this node.
|
46
|
+
attr_reader :syntactic_type
|
47
|
+
|
48
|
+
# Create a new Node. If a list is passed in as the value then it is
|
49
|
+
# recursively processed into a list of Nodes.
|
50
|
+
def initialize(value = nil, annotation = [])
|
51
|
+
@syntactic_type = ""
|
52
|
+
@value = value.nil? ? nil : _set_value(value)
|
53
|
+
@annotation = annotation
|
54
|
+
end
|
55
|
+
|
56
|
+
# Set the value of this Node. If a list is passed in then it is
|
57
|
+
# recursively processed into a list of Nodes.
|
58
|
+
def value=(value)
|
59
|
+
@value = value.nil? ? nil : _set_value(value)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Test for equality between this and another Node.
|
63
|
+
def ==(other)
|
64
|
+
@value == other.value and @annotation == other.annotation
|
65
|
+
end
|
66
|
+
|
67
|
+
# Extract the data value(s) from this Node and return them in the same
|
68
|
+
# structure as the given Node.
|
69
|
+
def Node.extract_node_data(node)
|
70
|
+
case node
|
71
|
+
when Hash
|
72
|
+
hash = {}
|
73
|
+
node.each { |k, v| hash[k] = Node.extract_node_data(v.value) }
|
74
|
+
hash
|
75
|
+
when Array
|
76
|
+
list = []
|
77
|
+
node.each { |n| list << Node.extract_node_data(n.value) }
|
78
|
+
list
|
79
|
+
when Taverna::Baclava::Node
|
80
|
+
Node.extract_node_data(node.value)
|
81
|
+
else
|
82
|
+
node
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
# Recursively set the value of this node, creating the underlying lists
|
89
|
+
# if necessary.
|
90
|
+
def _set_value(value)
|
91
|
+
if value.is_a? Array
|
92
|
+
value.map do |v|
|
93
|
+
v.is_a?(Taverna::Baclava::Node) ? v : Node.new(v)
|
94
|
+
end
|
95
|
+
else
|
96
|
+
value.to_s
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Authors: Robert Haines, Stian Soiland-Reyes, David Withers, Emmanuel Tagarira
|
32
|
+
|
33
|
+
require 'baclava/node'
|
34
|
+
require 'rexml/document'
|
35
|
+
|
36
|
+
module Taverna
|
37
|
+
module Baclava
|
38
|
+
|
39
|
+
class Reader
|
40
|
+
|
41
|
+
# Reads a baclava document and returns a hash of Baclava::Node objects.
|
42
|
+
def self.read(xml)
|
43
|
+
if xml.kind_of?(REXML::Document)
|
44
|
+
document = xml
|
45
|
+
else
|
46
|
+
document = REXML::Document.new(xml)
|
47
|
+
end
|
48
|
+
root = document.root
|
49
|
+
raise "'#{root.name}' doesn't appear to be a data thing!" if root.name != "dataThingMap"
|
50
|
+
|
51
|
+
create_data_map(root)
|
52
|
+
end
|
53
|
+
|
54
|
+
# :stopdoc:
|
55
|
+
|
56
|
+
def self.create_data_map(element)
|
57
|
+
data_map = {}
|
58
|
+
|
59
|
+
element.each_element('b:dataThing') do |datathing|
|
60
|
+
key = datathing.attribute('key').value
|
61
|
+
data = Node.new
|
62
|
+
data_map[key] = data
|
63
|
+
datathing.each_element('b:myGridDataDocument') do |dataDocument|
|
64
|
+
dataDocument.each_element('s:metadata') do |metadata|
|
65
|
+
data.annotation = get_metadata(metadata)
|
66
|
+
end
|
67
|
+
dataDocument.each_element('b:partialOrder') do |partialOrder|
|
68
|
+
data.value = get_list(partialOrder)
|
69
|
+
end
|
70
|
+
dataDocument.each_element('b:dataElement') do |dataElement|
|
71
|
+
data.value = get_element(dataElement)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
data_map
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.get_list(element)
|
80
|
+
list = []
|
81
|
+
element.each_element('b:itemList') do |itemList|
|
82
|
+
itemList.each_element('b:dataElement') do |dataElement|
|
83
|
+
list << get_element(dataElement)
|
84
|
+
end
|
85
|
+
itemList.each_element('b:partialOrder') do |partialOrder|
|
86
|
+
list << get_list(partialOrder)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
list
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.get_metadata(element)
|
93
|
+
list = []
|
94
|
+
element.each_element('s:mimeTypes') do |mimeTypes|
|
95
|
+
mimeTypes.each_element('s:mimeType') do |mimeType|
|
96
|
+
list << mimeType.text
|
97
|
+
end
|
98
|
+
end
|
99
|
+
list
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.get_element(element)
|
103
|
+
element.each_element('b:dataElementData') do |data|
|
104
|
+
text = data.text
|
105
|
+
return text.nil? ? "" : Base64.decode64(text)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Authors: Robert Haines, Stian Soiland-Reyes, David Withers, Emmanuel Tagarira
|
32
|
+
|
33
|
+
|
34
|
+
require 'baclava/node'
|
35
|
+
require 'base64'
|
36
|
+
require 'rexml/document'
|
37
|
+
require 'rubygems'
|
38
|
+
require 'builder'
|
39
|
+
|
40
|
+
module Taverna
|
41
|
+
module Baclava
|
42
|
+
|
43
|
+
class Writer
|
44
|
+
|
45
|
+
# Write a hash of Baclava::Node objects into a REXML::Document.
|
46
|
+
def self.write_doc(data_map)
|
47
|
+
REXML::Document.new(write(data_map))
|
48
|
+
end
|
49
|
+
|
50
|
+
# Write a hash of Baclava::Node objects into a XML String.
|
51
|
+
def self.write(data_map)
|
52
|
+
xml = Builder::XmlMarkup.new :indent => 2
|
53
|
+
xml.instruct!
|
54
|
+
xml.b :dataThingMap, 'xmlns:b' => 'http://org.embl.ebi.escience/baclava/0.1alpha' do
|
55
|
+
data_map.each_key do |key|
|
56
|
+
data = data_map[key]
|
57
|
+
xml.b :dataThing, 'key' => key do
|
58
|
+
xml.b :myGridDataDocument, 'lsid' => '', 'syntactictype' => data.syntactic_type do
|
59
|
+
write_metadata xml, data.annotation unless data.annotation.nil?
|
60
|
+
write_data xml, data.value
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# :stopdoc:
|
68
|
+
|
69
|
+
def self.write_metadata(xml, metadata)
|
70
|
+
xml.s :metadata, 'xmlns:s' => 'http://org.embl.ebi.escience/xscufl/0.1alpha' do
|
71
|
+
return if metadata.empty?
|
72
|
+
xml.s :mimeTypes do
|
73
|
+
metadata.each do |mimetype|
|
74
|
+
xml.s :mimetype, mimetype.chomp
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.write_data(xml, data, index = nil)
|
81
|
+
if data.is_a? Array
|
82
|
+
write_list xml, data, index
|
83
|
+
else
|
84
|
+
if index
|
85
|
+
xml.b :dataElement, 'lsid' => '', 'index' => index do |x|
|
86
|
+
x.b :dataElementData, Base64.encode64(data).chomp
|
87
|
+
end
|
88
|
+
else
|
89
|
+
xml.b :dataElement, 'lsid' => '' do |x|
|
90
|
+
x.b :dataElementData, Base64.encode64(data).chomp
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.write_list(xml, list, index)
|
97
|
+
if index
|
98
|
+
xml.b :partialOrder, 'lsid' => '', 'type' => 'list', 'index' => index do
|
99
|
+
write_item_list xml, list
|
100
|
+
end
|
101
|
+
else
|
102
|
+
xml.b :partialOrder, 'lsid' => '', 'type' => 'list' do
|
103
|
+
write_item_list xml, list
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.write_item_list(xml, list)
|
109
|
+
xml.b :relationList do
|
110
|
+
(1...list.length).each do |i|
|
111
|
+
xml.b :relation, 'parent' => (i - 1), 'child' => i
|
112
|
+
end
|
113
|
+
end
|
114
|
+
xml.b :itemList do
|
115
|
+
(0...list.length).each do |i|
|
116
|
+
write_data xml, list[i].value, i
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Authors: Robert Haines, Stian Soiland-Reyes, David Withers, Emmanuel Tagarira
|
32
|
+
|
33
|
+
require 'baclava/reader'
|
34
|
+
require 'baclava/writer'
|
data/test/tc_baclava.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Author: Robert Haines
|
32
|
+
|
33
|
+
class TestBaclava < Test::Unit::TestCase
|
34
|
+
SINGLE_IN = []
|
35
|
+
MANY_IN = [[["boo"]], [["", "Hello"]], [], [[], ["test"], []]]
|
36
|
+
MAP = {
|
37
|
+
"SINGLE_IN" => Taverna::Baclava::Node.new(SINGLE_IN),
|
38
|
+
"MANY_IN" => Taverna::Baclava::Node.new(MANY_IN)
|
39
|
+
}
|
40
|
+
|
41
|
+
def test_reader
|
42
|
+
input = Taverna::Baclava::Reader.read(File.read("test/test.baclava"))
|
43
|
+
assert_equal(input, MAP)
|
44
|
+
map = Taverna::Baclava::Node.extract_node_data(input)
|
45
|
+
assert_equal(map["SINGLE_IN"], SINGLE_IN)
|
46
|
+
assert_equal(map["MANY_IN"], MANY_IN)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_writer
|
50
|
+
input = Taverna::Baclava::Reader.read(Taverna::Baclava::Writer.write(MAP))
|
51
|
+
assert_equal(input, MAP)
|
52
|
+
map = Taverna::Baclava::Node.extract_node_data(input)
|
53
|
+
assert_equal(map["SINGLE_IN"], SINGLE_IN)
|
54
|
+
assert_equal(map["MANY_IN"], MANY_IN)
|
55
|
+
end
|
56
|
+
end
|
data/test/tc_node.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Author: Robert Haines
|
32
|
+
|
33
|
+
class TestNode < Test::Unit::TestCase
|
34
|
+
TEST_VALUE = "Hello"
|
35
|
+
TEST_LIST = ["Hello", "World!"]
|
36
|
+
TEST_NUMBER = 1337
|
37
|
+
|
38
|
+
def test_singleton
|
39
|
+
node = Taverna::Baclava::Node.new(TEST_VALUE)
|
40
|
+
assert_equal(node.value, TEST_VALUE)
|
41
|
+
assert_equal(node.annotation, [])
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_lists
|
45
|
+
node = Taverna::Baclava::Node.new(TEST_LIST)
|
46
|
+
assert_equal(node.value[0].value, TEST_LIST[0])
|
47
|
+
assert_equal(node.value[1].value, TEST_LIST[1])
|
48
|
+
assert_equal(node.annotation, [])
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_non_strings
|
52
|
+
node = Taverna::Baclava::Node.new(TEST_NUMBER)
|
53
|
+
assert_equal(node.value, TEST_NUMBER.to_s)
|
54
|
+
assert_equal(node.annotation, [])
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_extract
|
58
|
+
n1 = Taverna::Baclava::Node.new(TEST_VALUE)
|
59
|
+
n2 = Taverna::Baclava::Node.new(TEST_LIST)
|
60
|
+
n3 = Taverna::Baclava::Node.new(TEST_NUMBER)
|
61
|
+
map = {
|
62
|
+
"value" => n1,
|
63
|
+
"list" => n2,
|
64
|
+
"number" => n3
|
65
|
+
}
|
66
|
+
|
67
|
+
assert_equal(Taverna::Baclava::Node.extract_node_data(n1), TEST_VALUE)
|
68
|
+
assert_equal(Taverna::Baclava::Node.extract_node_data(n2), TEST_LIST)
|
69
|
+
assert_equal(Taverna::Baclava::Node.extract_node_data(n3),
|
70
|
+
TEST_NUMBER.to_s)
|
71
|
+
|
72
|
+
map_x = Taverna::Baclava::Node.extract_node_data(map)
|
73
|
+
assert_equal(map_x["list"], TEST_LIST)
|
74
|
+
end
|
75
|
+
end
|
data/test/test.baclava
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<b:dataThingMap xmlns:b="http://org.embl.ebi.escience/baclava/0.1alpha">
|
3
|
+
<b:dataThing key="MANY_IN">
|
4
|
+
<b:myGridDataDocument lsid="" syntactictype="l(l(l('null')))">
|
5
|
+
<s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
|
6
|
+
<b:partialOrder lsid="" type="list">
|
7
|
+
<b:relationList>
|
8
|
+
<b:relation parent="0" child="1" />
|
9
|
+
<b:relation parent="1" child="2" />
|
10
|
+
<b:relation parent="2" child="3" />
|
11
|
+
</b:relationList>
|
12
|
+
<b:itemList>
|
13
|
+
<b:partialOrder lsid="" type="list" index="0">
|
14
|
+
<b:relationList />
|
15
|
+
<b:itemList>
|
16
|
+
<b:partialOrder lsid="" type="list" index="0">
|
17
|
+
<b:relationList />
|
18
|
+
<b:itemList>
|
19
|
+
<b:dataElement lsid="" index="0">
|
20
|
+
<b:dataElementData>Ym9v</b:dataElementData>
|
21
|
+
</b:dataElement>
|
22
|
+
</b:itemList>
|
23
|
+
</b:partialOrder>
|
24
|
+
</b:itemList>
|
25
|
+
</b:partialOrder>
|
26
|
+
<b:partialOrder lsid="" type="list" index="1">
|
27
|
+
<b:relationList />
|
28
|
+
<b:itemList>
|
29
|
+
<b:partialOrder lsid="" type="list" index="0">
|
30
|
+
<b:relationList>
|
31
|
+
<b:relation parent="0" child="1" />
|
32
|
+
</b:relationList>
|
33
|
+
<b:itemList>
|
34
|
+
<b:dataElement lsid="" index="0">
|
35
|
+
<b:dataElementData />
|
36
|
+
</b:dataElement>
|
37
|
+
<b:dataElement lsid="" index="1">
|
38
|
+
<b:dataElementData>SGVsbG8=</b:dataElementData>
|
39
|
+
</b:dataElement>
|
40
|
+
</b:itemList>
|
41
|
+
</b:partialOrder>
|
42
|
+
</b:itemList>
|
43
|
+
</b:partialOrder>
|
44
|
+
<b:partialOrder lsid="" type="list" index="2">
|
45
|
+
<b:relationList />
|
46
|
+
<b:itemList />
|
47
|
+
</b:partialOrder>
|
48
|
+
<b:partialOrder lsid="" type="list" index="3">
|
49
|
+
<b:relationList>
|
50
|
+
<b:relation parent="0" child="1" />
|
51
|
+
<b:relation parent="1" child="2" />
|
52
|
+
</b:relationList>
|
53
|
+
<b:itemList>
|
54
|
+
<b:partialOrder lsid="" type="list" index="0">
|
55
|
+
<b:relationList />
|
56
|
+
<b:itemList />
|
57
|
+
</b:partialOrder>
|
58
|
+
<b:partialOrder lsid="" type="list" index="1">
|
59
|
+
<b:relationList />
|
60
|
+
<b:itemList>
|
61
|
+
<b:dataElement lsid="" index="0">
|
62
|
+
<b:dataElementData>dGVzdA==</b:dataElementData>
|
63
|
+
</b:dataElement>
|
64
|
+
</b:itemList>
|
65
|
+
</b:partialOrder>
|
66
|
+
<b:partialOrder lsid="" type="list" index="2">
|
67
|
+
<b:relationList />
|
68
|
+
<b:itemList />
|
69
|
+
</b:partialOrder>
|
70
|
+
</b:itemList>
|
71
|
+
</b:partialOrder>
|
72
|
+
</b:itemList>
|
73
|
+
</b:partialOrder>
|
74
|
+
</b:myGridDataDocument>
|
75
|
+
</b:dataThing>
|
76
|
+
<b:dataThing key="SINGLE_IN">
|
77
|
+
<b:myGridDataDocument lsid="" syntactictype="l('null')">
|
78
|
+
<s:metadata xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" />
|
79
|
+
<b:partialOrder lsid="" type="list">
|
80
|
+
<b:relationList />
|
81
|
+
<b:itemList />
|
82
|
+
</b:partialOrder>
|
83
|
+
</b:myGridDataDocument>
|
84
|
+
</b:dataThing>
|
85
|
+
</b:dataThingMap>
|
86
|
+
|
data/test/ts_baclava.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Copyright (c) 2006-2012 The University of Manchester, UK.
|
2
|
+
#
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
7
|
+
#
|
8
|
+
# * Redistributions of source code must retain the above copyright notice,
|
9
|
+
# this list of conditions and the following disclaimer.
|
10
|
+
#
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
#
|
15
|
+
# * Neither the names of The University of Manchester nor the names of its
|
16
|
+
# contributors may be used to endorse or promote products derived from this
|
17
|
+
# software without specific prior written permission.
|
18
|
+
#
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
22
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
23
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
24
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
25
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
26
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
27
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
28
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
#
|
31
|
+
# Author: Robert Haines
|
32
|
+
|
33
|
+
require 'test/unit'
|
34
|
+
require 'taverna-baclava'
|
35
|
+
|
36
|
+
# tests
|
37
|
+
require 'tc_node'
|
38
|
+
require 'tc_baclava'
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: taverna-baclava
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Robert Haines
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-03-13 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 63
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 9
|
32
|
+
- 2
|
33
|
+
version: 0.9.2
|
34
|
+
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rdoc
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 43
|
45
|
+
segments:
|
46
|
+
- 3
|
47
|
+
- 9
|
48
|
+
- 4
|
49
|
+
version: 3.9.4
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: builder
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 7
|
61
|
+
segments:
|
62
|
+
- 3
|
63
|
+
- 0
|
64
|
+
- 0
|
65
|
+
version: 3.0.0
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id003
|
68
|
+
description: A Ruby library to support the reading and writing of the Baclava data format.
|
69
|
+
email: rhaines@manchester.ac.uk
|
70
|
+
executables: []
|
71
|
+
|
72
|
+
extensions: []
|
73
|
+
|
74
|
+
extra_rdoc_files:
|
75
|
+
- ReadMe.rdoc
|
76
|
+
- Licence.rdoc
|
77
|
+
- Changes.rdoc
|
78
|
+
files:
|
79
|
+
- lib/baclava/node.rb
|
80
|
+
- lib/baclava/writer.rb
|
81
|
+
- lib/baclava/reader.rb
|
82
|
+
- lib/taverna-baclava.rb
|
83
|
+
- test/tc_baclava.rb
|
84
|
+
- test/ts_baclava.rb
|
85
|
+
- test/tc_node.rb
|
86
|
+
- test/test.baclava
|
87
|
+
- ReadMe.rdoc
|
88
|
+
- Licence.rdoc
|
89
|
+
- Changes.rdoc
|
90
|
+
homepage: http://www.taverna.org.uk/
|
91
|
+
licenses: []
|
92
|
+
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options:
|
95
|
+
- -N
|
96
|
+
- --tab-width=2
|
97
|
+
- --main=ReadMe.rdoc
|
98
|
+
require_paths:
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 3
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
requirements: []
|
119
|
+
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 1.8.10
|
122
|
+
signing_key:
|
123
|
+
specification_version: 3
|
124
|
+
summary: Ruby support for the Baclava file format.
|
125
|
+
test_files:
|
126
|
+
- test/ts_baclava.rb
|