ALD 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ALD.rb +8 -0
- data/lib/ALD/definition.rb +70 -0
- data/lib/ALD/definition_generator.rb +11 -0
- data/lib/ALD/exceptions.rb +10 -0
- data/lib/ALD/package.rb +56 -0
- data/lib/ALD/package_generator.rb +54 -0
- data/lib/ALD/schema.xsd +340 -0
- metadata +101 -0
data/lib/ALD.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'ALD/exceptions'
|
3
|
+
|
4
|
+
module ALD
|
5
|
+
class Definition
|
6
|
+
SCHEMA_FILE = "#{File.dirname(__FILE__)}/schema.xsd"
|
7
|
+
|
8
|
+
XML_NAMESPACE = 'ald://package/schema/2014'
|
9
|
+
|
10
|
+
def self.schema
|
11
|
+
@schema ||= Nokogiri::XML::Schema(File.read(SCHEMA_FILE))
|
12
|
+
end
|
13
|
+
|
14
|
+
TOPLEVEL_ATTRIBUTES = %w[
|
15
|
+
id
|
16
|
+
name
|
17
|
+
version
|
18
|
+
type
|
19
|
+
summary
|
20
|
+
]
|
21
|
+
|
22
|
+
TOPLEVEL_ATTRIBUTES.each do |attr|
|
23
|
+
define_method attr.to_sym do
|
24
|
+
@document.xpath("//@ald:#{attr}", 'ald' => XML_NAMESPACE)[0].value
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(source)
|
29
|
+
if source.is_a? Nokogiri::XML::Document
|
30
|
+
@document = source
|
31
|
+
else
|
32
|
+
@document = Nokogiri::XML(source) { |config| config.nonet }
|
33
|
+
end
|
34
|
+
|
35
|
+
raise InvalidDefinitionError unless valid?
|
36
|
+
end
|
37
|
+
|
38
|
+
def description
|
39
|
+
@document.xpath("//ald:description", 'ald' => XML_NAMESPACE)[0].text
|
40
|
+
end
|
41
|
+
|
42
|
+
def tags
|
43
|
+
@document.xpath("//ald:tags/ald:tag/@ald:name", 'ald' => XML_NAMESPACE).map { |tag| tag.value }
|
44
|
+
end
|
45
|
+
|
46
|
+
def authors
|
47
|
+
attribute_hash '//ald:authors/ald:author', %w[name user-name homepage email]
|
48
|
+
end
|
49
|
+
|
50
|
+
def links
|
51
|
+
attribute_hash '//ald:links/ald:link', %w[name description href]
|
52
|
+
end
|
53
|
+
|
54
|
+
def valid?
|
55
|
+
Definition.schema.valid?(@document)
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
@document.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def attribute_hash(xpath, keys)
|
65
|
+
@document.xpath(xpath, 'ald' => XML_NAMESPACE).map do |e|
|
66
|
+
Hash[keys.map { |k| e.attribute_with_ns(k, XML_NAMESPACE) }.reject(&:nil?).map { |a| [a.node_name, a.value] }]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/ALD/package.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'zip'
|
2
|
+
require 'ALD/definition'
|
3
|
+
require 'ALD/exceptions'
|
4
|
+
|
5
|
+
module ALD
|
6
|
+
# Represents an ALD package file containing an app or library and its definition
|
7
|
+
class Package
|
8
|
+
|
9
|
+
# The rubyzip Zip::File object containing the data
|
10
|
+
attr_reader :archive
|
11
|
+
|
12
|
+
# The ALD::Definition instance representing the definition contained in the package
|
13
|
+
attr_reader :definition
|
14
|
+
|
15
|
+
# Opens a new ALD package file
|
16
|
+
#
|
17
|
+
# file - a Zip::File instance or the path to the file
|
18
|
+
#
|
19
|
+
# Returns a new ALD::Package instance representing the package file
|
20
|
+
def initialize(file)
|
21
|
+
if file.is_a? Zip::File
|
22
|
+
@archive = file
|
23
|
+
else
|
24
|
+
@archive = Zip::File.open(file)
|
25
|
+
end
|
26
|
+
|
27
|
+
def_entry = @archive.find_entry('definition.ald')
|
28
|
+
raise NoDefinitionError if def_entry.nil?
|
29
|
+
|
30
|
+
@definition = Definition.new(def_entry.get_input_stream)
|
31
|
+
raise InvalidPackageError, 'The given ZIP file is not a valid ALD archive!' unless Package.valid?(@archive, @definition)
|
32
|
+
|
33
|
+
# file access
|
34
|
+
end
|
35
|
+
|
36
|
+
# Closes a no longer required package
|
37
|
+
def close
|
38
|
+
@archive.close
|
39
|
+
end
|
40
|
+
|
41
|
+
# Alias for new
|
42
|
+
def self.open(file)
|
43
|
+
new(file)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Tests if a given archive is a valid ALD package
|
47
|
+
#
|
48
|
+
# file - a Zip::File instance for the package
|
49
|
+
# definition - an ALD::Definition instance the package must meet
|
50
|
+
#
|
51
|
+
# Returns true if it is valid, false otherwise
|
52
|
+
def self.valid?(file, definition)
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'ALD/definition'
|
2
|
+
require 'ALD/definition_generator'
|
3
|
+
require 'ALD/package'
|
4
|
+
require 'ALD/exceptions'
|
5
|
+
|
6
|
+
module ALD
|
7
|
+
class Package
|
8
|
+
class Generator
|
9
|
+
attr_writer :definition
|
10
|
+
|
11
|
+
def definition
|
12
|
+
if @definition.is_a? ALD::Definition
|
13
|
+
@definition
|
14
|
+
elsif @definition.is_a? ALD::Definition::Generator
|
15
|
+
@definition.generate!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid?
|
20
|
+
true && @definition.valid?
|
21
|
+
end
|
22
|
+
|
23
|
+
# Creates a new package file from the given data
|
24
|
+
#
|
25
|
+
# generator - an ALD::Package::Generator instance to create the package from
|
26
|
+
# path - the path where to create the package. This file must not yet exist.
|
27
|
+
#
|
28
|
+
# Returns a new ALD::Package instance representing the newly created file
|
29
|
+
def generate!(path)
|
30
|
+
if File.exists? path
|
31
|
+
raise IOError, "Destination '#{path}' already exists!"
|
32
|
+
end
|
33
|
+
|
34
|
+
raise InvalidPackageError unless valid?
|
35
|
+
|
36
|
+
archive = Zip::File.open(path, Zip::File::CREATE)
|
37
|
+
|
38
|
+
archive.get_output_stream('definition.ald') do |s|
|
39
|
+
s << definition.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
files.each do |path, src|
|
43
|
+
archive.add(path, src)
|
44
|
+
end
|
45
|
+
|
46
|
+
Package.new(file)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.from_package(package)
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/ALD/schema.xsd
ADDED
@@ -0,0 +1,340 @@
|
|
1
|
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
2
|
+
xmlns:ald="ald://package/schema/2014"
|
3
|
+
attributeFormDefault="qualified" elementFormDefault="qualified"
|
4
|
+
targetNamespace="ald://package/schema/2014">
|
5
|
+
|
6
|
+
<xsd:simpleType name="guid-type"> <!-- defines the type of a GUID -->
|
7
|
+
<xsd:restriction base="xsd:string">
|
8
|
+
<xsd:pattern value="[a-fA-F0-9]{32}"/> <!-- update: do not use any format, just the raw number -->
|
9
|
+
</xsd:restriction>
|
10
|
+
</xsd:simpleType>
|
11
|
+
|
12
|
+
<xsd:simpleType name="internetURL">
|
13
|
+
<xsd:restriction base="xsd:anyURI">
|
14
|
+
<xsd:pattern value="https?://.*"/>
|
15
|
+
</xsd:restriction>
|
16
|
+
</xsd:simpleType>
|
17
|
+
|
18
|
+
<xsd:simpleType name="schemaURL">
|
19
|
+
<xsd:restriction base="xsd:anyURI">
|
20
|
+
<xsd:pattern value="(https?|ald)://.*"/>
|
21
|
+
</xsd:restriction>
|
22
|
+
</xsd:simpleType>
|
23
|
+
|
24
|
+
<xsd:simpleType name="word-string">
|
25
|
+
<xsd:restriction base="xsd:string">
|
26
|
+
<xsd:pattern value="(\w|_)+"/>
|
27
|
+
</xsd:restriction>
|
28
|
+
</xsd:simpleType>
|
29
|
+
|
30
|
+
<xsd:simpleType name="architecture">
|
31
|
+
<xsd:restriction base="xsd:string">
|
32
|
+
<xsd:enumeration value="x32"/>
|
33
|
+
<xsd:enumeration value="x64"/>
|
34
|
+
<xsd:enumeration value="x128"/>
|
35
|
+
</xsd:restriction>
|
36
|
+
</xsd:simpleType>
|
37
|
+
|
38
|
+
<xsd:simpleType name="encoding">
|
39
|
+
<xsd:restriction base="xsd:string">
|
40
|
+
<xsd:enumeration value="ANSI"/>
|
41
|
+
<xsd:enumeration value="Unicode"/>
|
42
|
+
</xsd:restriction>
|
43
|
+
</xsd:simpleType>
|
44
|
+
|
45
|
+
<xsd:simpleType name="access">
|
46
|
+
<xsd:restriction base="xsd:string">
|
47
|
+
<xsd:enumeration value="read"/>
|
48
|
+
<xsd:enumeration value="write"/>
|
49
|
+
<xsd:enumeration value="read+write"/>
|
50
|
+
</xsd:restriction>
|
51
|
+
</xsd:simpleType>
|
52
|
+
|
53
|
+
<!-- I. VERSIONING -->
|
54
|
+
<!-- a. semantic versioning -->
|
55
|
+
<xsd:simpleType name="semverType">
|
56
|
+
<xsd:restriction base="xsd:string">
|
57
|
+
<xsd:pattern value="(\d+)\.(\d+)\.(\d+)(\-([0-9A-Za-z\-]+\.)*([0-9A-Za-z\-]+))?(\+([0-9A-Za-z\-]+\.)*([0-9A-Za-z\-]+))?"/>
|
58
|
+
</xsd:restriction>
|
59
|
+
</xsd:simpleType>
|
60
|
+
|
61
|
+
<xsd:complexType name="semanticVersion"> <!-- defines a version of a dependency -->
|
62
|
+
<xsd:sequence>
|
63
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
64
|
+
</xsd:sequence>
|
65
|
+
|
66
|
+
<xsd:attribute use="required" name="value" type="ald:semverType"/>
|
67
|
+
</xsd:complexType>
|
68
|
+
|
69
|
+
<xsd:group name="semantic-version-switch"> <!-- defines several ways to validate a version -->
|
70
|
+
<xsd:choice>
|
71
|
+
<xsd:element name="version" type="ald:semanticVersion"/> <!-- the only accepted version number -->
|
72
|
+
<xsd:element name="version-list"> <!-- a list of accepted version numbers -->
|
73
|
+
<xsd:complexType>
|
74
|
+
<xsd:sequence>
|
75
|
+
<xsd:element name="version" type="ald:semanticVersion" minOccurs="1" maxOccurs="unbounded"/>
|
76
|
+
</xsd:sequence>
|
77
|
+
</xsd:complexType>
|
78
|
+
</xsd:element>
|
79
|
+
<xsd:element name="version-range"> <!-- a range of accepted version numbers -->
|
80
|
+
<xsd:complexType>
|
81
|
+
<xsd:sequence>
|
82
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
83
|
+
</xsd:sequence>
|
84
|
+
|
85
|
+
<xsd:attribute use="required" type="ald:semverType" name="min-version"/> <!-- the lower bound of a range of accepted version numbers for the item. -->
|
86
|
+
<xsd:attribute use="required" type="ald:semverType" name="max-version"/> <!-- the upper bound of a range of accepted version numbers for the item. -->
|
87
|
+
</xsd:complexType>
|
88
|
+
</xsd:element>
|
89
|
+
</xsd:choice>
|
90
|
+
</xsd:group>
|
91
|
+
|
92
|
+
<!-- b. lax versioning -->
|
93
|
+
<!-- defines a version of a requirement -->
|
94
|
+
<xsd:complexType name="laxVersion">
|
95
|
+
<xsd:sequence>
|
96
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
97
|
+
</xsd:sequence>
|
98
|
+
|
99
|
+
<xsd:attribute use="required" type="xsd:string" name="value"/> <!-- carries the version number -->
|
100
|
+
</xsd:complexType>
|
101
|
+
|
102
|
+
<xsd:group name="version-switch"> <!-- defines several ways to validate a version -->
|
103
|
+
<xsd:choice>
|
104
|
+
<xsd:element name="version" type="ald:laxVersion"/> <!-- the only accepted version number -->
|
105
|
+
<xsd:element name="version-list"> <!-- a list of accepted version numbers -->
|
106
|
+
<xsd:complexType>
|
107
|
+
<xsd:sequence>
|
108
|
+
<xsd:element name="version" type="ald:laxVersion" minOccurs="1" maxOccurs="unbounded"/>
|
109
|
+
</xsd:sequence>
|
110
|
+
</xsd:complexType>
|
111
|
+
</xsd:element>
|
112
|
+
<xsd:element name="version-range"> <!-- a range of accepted version numbers -->
|
113
|
+
<xsd:complexType>
|
114
|
+
<xsd:sequence>
|
115
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
116
|
+
</xsd:sequence>
|
117
|
+
|
118
|
+
<xsd:attribute use="required" type="xsd:string" name="min-version"/> <!-- the lower bound of a range of accepted version numbers for the item. -->
|
119
|
+
<xsd:attribute use="required" type="xsd:string" name="max-version"/> <!-- the upper bound of a range of accepted version numbers for the item. -->
|
120
|
+
</xsd:complexType>
|
121
|
+
</xsd:element>
|
122
|
+
</xsd:choice>
|
123
|
+
</xsd:group>
|
124
|
+
<!-- END OF VERSIONING -->
|
125
|
+
|
126
|
+
<!-- defines data of an author who wrote this item -->
|
127
|
+
<xsd:complexType name="authorType">
|
128
|
+
<xsd:sequence>
|
129
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
130
|
+
</xsd:sequence>
|
131
|
+
|
132
|
+
<xsd:attribute use="required" type="xsd:string" name="name"/> <!-- the name to identify the author. Can be same as user-name -->
|
133
|
+
<xsd:attribute use="optional" type="xsd:string" name="user-name"/> <!-- the AHK forums user name -->
|
134
|
+
<xsd:attribute use="optional" type="ald:internetURL" name="homepage"/> <!-- an URL to a homepage of the author -->
|
135
|
+
<xsd:attribute use="optional" type="xsd:string" name="email"/> <!-- an email address of the author -->
|
136
|
+
<xsd:anyAttribute/>
|
137
|
+
</xsd:complexType>
|
138
|
+
|
139
|
+
<!-- defines a library required for this item to work -->
|
140
|
+
<xsd:complexType name="dependencyType">
|
141
|
+
<xsd:sequence>
|
142
|
+
<xsd:group ref="ald:semantic-version-switch" minOccurs="1" maxOccurs="1"/> <!-- defines the version(s) of this dependency that are accepted -->
|
143
|
+
</xsd:sequence>
|
144
|
+
|
145
|
+
<xsd:attribute use="required" type="xsd:string" name="name"/> <!-- the name of the required item -->
|
146
|
+
<xsd:anyAttribute/>
|
147
|
+
</xsd:complexType>
|
148
|
+
|
149
|
+
<!-- specifies that the item can run on the given system -->
|
150
|
+
<xsd:complexType name="targetType">
|
151
|
+
<xsd:sequence>
|
152
|
+
<xsd:element name="language-version" minOccurs="0" maxOccurs="1">
|
153
|
+
<xsd:complexType>
|
154
|
+
<xsd:group ref="ald:version-switch" minOccurs="1" maxOccurs="1"/>
|
155
|
+
</xsd:complexType>
|
156
|
+
</xsd:element>
|
157
|
+
<xsd:element name="target" type="ald:targetType" minOccurs="0" maxOccurs="unbounded"/>
|
158
|
+
</xsd:sequence>
|
159
|
+
|
160
|
+
<xsd:attribute use="optional" type="xsd:string" name="message"/>
|
161
|
+
<xsd:attribute use="optional" type="xsd:NCName" name="id"/>
|
162
|
+
|
163
|
+
<xsd:attribute use="optional" type="ald:architecture" name="language-architecture"/>
|
164
|
+
<xsd:attribute use="optional" type="ald:encoding" name="language-encoding"/>
|
165
|
+
<xsd:attribute use="optional" type="ald:architecture" name="system-architecture"/>
|
166
|
+
<xsd:attribute use="optional" type="xsd:string" name="system-version"/>
|
167
|
+
<xsd:attribute use="optional" type="xsd:string" name="system-type"/>
|
168
|
+
|
169
|
+
<xsd:anyAttribute/>
|
170
|
+
</xsd:complexType>
|
171
|
+
|
172
|
+
<!-- specifies different files for different platforms -->
|
173
|
+
<xsd:complexType name="fileSetType">
|
174
|
+
<xsd:sequence>
|
175
|
+
<xsd:choice minOccurs="1" maxOccurs="unbounded">
|
176
|
+
<xsd:element name="file" type="ald:fileType"/>
|
177
|
+
<xsd:element name="file-set" type="ald:fileSetType"/>
|
178
|
+
</xsd:choice>
|
179
|
+
<xsd:element name="target" minOccurs="0" maxOccurs="unbounded">
|
180
|
+
<xsd:complexType>
|
181
|
+
<xsd:attribute use="required" type="xsd:NCName" name="ref"/>
|
182
|
+
</xsd:complexType>
|
183
|
+
</xsd:element>
|
184
|
+
</xsd:sequence>
|
185
|
+
|
186
|
+
<xsd:attribute use="required" type="xsd:string" name="src"/>
|
187
|
+
<xsd:anyAttribute/>
|
188
|
+
</xsd:complexType>
|
189
|
+
|
190
|
+
<!-- defines a file being included -->
|
191
|
+
<xsd:complexType name="fileType">
|
192
|
+
<xsd:sequence>
|
193
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
194
|
+
</xsd:sequence>
|
195
|
+
|
196
|
+
<xsd:attribute name="path" use="required" type="xsd:string"/> <!-- the (internal) path to the file -->
|
197
|
+
<xsd:anyAttribute/>
|
198
|
+
</xsd:complexType>
|
199
|
+
|
200
|
+
<!-- defines a tag for the package -->
|
201
|
+
<xsd:complexType name="tagType">
|
202
|
+
<xsd:sequence>
|
203
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
204
|
+
</xsd:sequence>
|
205
|
+
|
206
|
+
<xsd:attribute name="name" use="required" type="ald:word-string"/> <!-- the name of the tag -->
|
207
|
+
<xsd:anyAttribute/>
|
208
|
+
</xsd:complexType>
|
209
|
+
|
210
|
+
<!-- defines a link related to the package -->
|
211
|
+
<xsd:complexType name="linkType">
|
212
|
+
<xsd:sequence>
|
213
|
+
<xsd:element name="customdata" type="ald:customDataType" minOccurs="0" maxOccurs="unbounded"/>
|
214
|
+
</xsd:sequence>
|
215
|
+
|
216
|
+
<xsd:attribute use="required" type="xsd:string" name="name"/> <!-- a short name for what the link points to -->
|
217
|
+
<xsd:attribute use="required" type="xsd:string" name="description"/> <!-- a description of what the link points to -->
|
218
|
+
<xsd:attribute use="required" type="ald:internetURL" name="href"/> <!-- the URL the link points to -->
|
219
|
+
<xsd:anyAttribute/>
|
220
|
+
</xsd:complexType>
|
221
|
+
|
222
|
+
<!-- allows users to include custom data in the package which can be read by ALD clients -->
|
223
|
+
<xsd:complexType name="customDataType" mixed="true">
|
224
|
+
<xsd:sequence>
|
225
|
+
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
|
226
|
+
</xsd:sequence>
|
227
|
+
|
228
|
+
<xsd:attribute use="required" type="xsd:string" name="namespace"/> <!-- a string identifying the client using this or the usage for the included data -->
|
229
|
+
<xsd:attribute use="optional" type="ald:schemaURL" name="schema"/> <!-- an optional schema URL which can be used for checking the content -->
|
230
|
+
<xsd:anyAttribute/>
|
231
|
+
</xsd:complexType>
|
232
|
+
|
233
|
+
<xsd:complexType name="file-list-type">
|
234
|
+
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
|
235
|
+
<xsd:choice>
|
236
|
+
<xsd:element name="file" type="ald:fileType"/>
|
237
|
+
<xsd:element name="file-set" type="ald:fileSetType"/>
|
238
|
+
</xsd:choice>
|
239
|
+
</xsd:sequence>
|
240
|
+
</xsd:complexType>
|
241
|
+
|
242
|
+
<xsd:complexType name="repositoryType">
|
243
|
+
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
|
244
|
+
<xsd:element name="url">
|
245
|
+
<xsd:complexType>
|
246
|
+
<xsd:simpleContent>
|
247
|
+
<xsd:extension base="xsd:anyURI">
|
248
|
+
<xsd:attribute use="required" type="ald:access" name="access"/>
|
249
|
+
</xsd:extension>
|
250
|
+
</xsd:simpleContent>
|
251
|
+
</xsd:complexType>
|
252
|
+
</xsd:element>
|
253
|
+
</xsd:sequence>
|
254
|
+
<xsd:attribute use="required" type="xsd:string" name="type"/>
|
255
|
+
<xsd:attribute use="required" type="ald:internetURL" name="view-url"/>
|
256
|
+
</xsd:complexType>
|
257
|
+
|
258
|
+
<!-- root -->
|
259
|
+
<xsd:element name="package">
|
260
|
+
<xsd:complexType>
|
261
|
+
<xsd:sequence>
|
262
|
+
<xsd:element name="description" minOccurs="1" maxOccurs="1" type="xsd:string"/>
|
263
|
+
<xsd:element name="authors" minOccurs="1" maxOccurs="1"> <!-- the list of authors being involved in this item -->
|
264
|
+
<xsd:complexType>
|
265
|
+
<xsd:sequence>
|
266
|
+
<xsd:element name="author" type="ald:authorType" minOccurs="1" maxOccurs="unbounded"/>
|
267
|
+
</xsd:sequence>
|
268
|
+
</xsd:complexType>
|
269
|
+
</xsd:element>
|
270
|
+
<xsd:element name="dependencies" minOccurs="0" maxOccurs="1"> <!-- the list of dependencies this package has -->
|
271
|
+
<xsd:complexType>
|
272
|
+
<xsd:sequence>
|
273
|
+
<xsd:element name="dependency" type="ald:dependencyType" minOccurs="0" maxOccurs="unbounded"/>
|
274
|
+
</xsd:sequence>
|
275
|
+
</xsd:complexType>
|
276
|
+
</xsd:element>
|
277
|
+
<xsd:element name="targets" minOccurs="1" maxOccurs="1">
|
278
|
+
<xsd:complexType>
|
279
|
+
<xsd:sequence>
|
280
|
+
<xsd:element name="target" type="ald:targetType" minOccurs="0" maxOccurs="unbounded"/>
|
281
|
+
</xsd:sequence>
|
282
|
+
</xsd:complexType>
|
283
|
+
|
284
|
+
<xsd:unique name="targetID">
|
285
|
+
<xsd:selector xpath=".//ald:target"/>
|
286
|
+
<xsd:field xpath="@ald:id"/>
|
287
|
+
</xsd:unique>
|
288
|
+
</xsd:element>
|
289
|
+
<xsd:element name="files" minOccurs="1" maxOccurs="1"> <!-- holds the lists of files to include -->
|
290
|
+
<xsd:complexType>
|
291
|
+
<xsd:sequence>
|
292
|
+
<xsd:element name="doc" type="ald:file-list-type" minOccurs="1" maxOccurs="1"/> <!-- the list of documentation files -->
|
293
|
+
<xsd:element name="src" type="ald:file-list-type" minOccurs="1" maxOccurs="1"/> <!-- the list of source files -->
|
294
|
+
</xsd:sequence>
|
295
|
+
</xsd:complexType>
|
296
|
+
</xsd:element>
|
297
|
+
<xsd:element name="development" minOccurs="0" maxOccurs="1">
|
298
|
+
<xsd:complexType>
|
299
|
+
<xsd:sequence>
|
300
|
+
<xsd:element name="repository" type="ald:repositoryType" minOccurs="1" maxOccurs="unbounded"/>
|
301
|
+
</xsd:sequence>
|
302
|
+
</xsd:complexType>
|
303
|
+
</xsd:element>
|
304
|
+
<xsd:element name="tags" minOccurs="0" maxOccurs="1"> <!-- the list of tags for the package -->
|
305
|
+
<xsd:complexType>
|
306
|
+
<xsd:sequence>
|
307
|
+
<xsd:element name="tag" type="ald:tagType" minOccurs="1" maxOccurs="unbounded"/>
|
308
|
+
</xsd:sequence>
|
309
|
+
</xsd:complexType>
|
310
|
+
</xsd:element>
|
311
|
+
<!-- todo: triggers
|
312
|
+
Triggers can be run after installation, before and after update and before uninstall.
|
313
|
+
They consist of a command line to execute.
|
314
|
+
-->
|
315
|
+
<xsd:element name="links" minOccurs="1" maxOccurs="1"> <!-- the list of related links -->
|
316
|
+
<xsd:complexType>
|
317
|
+
<xsd:sequence>
|
318
|
+
<xsd:element name="link" type="ald:linkType" minOccurs="0" maxOccurs="unbounded"/>
|
319
|
+
</xsd:sequence>
|
320
|
+
</xsd:complexType>
|
321
|
+
</xsd:element>
|
322
|
+
<xsd:any minOccurs="0"/>
|
323
|
+
</xsd:sequence>
|
324
|
+
|
325
|
+
<xsd:attribute use="required" type="ald:guid-type" name="id"/> <!-- the unique ID of the package -->
|
326
|
+
<xsd:attribute use="required" type="xsd:string" name="type"/> <!-- the type of the package -->
|
327
|
+
<xsd:attribute use="required" type="xsd:string" name="summary"/>
|
328
|
+
<xsd:attribute use="required" type="xsd:string" name="name"/> <!-- the name of the package -->
|
329
|
+
<xsd:attribute use="required" type="ald:semverType" name="version"/> <!-- the current version of the package -->
|
330
|
+
<xsd:attribute use="optional" type="xsd:string" name="logo-image"/> <!-- the relative path to a logo image, if one is included -->
|
331
|
+
<xsd:attribute use="optional" type="ald:internetURL" name="homepage"/>
|
332
|
+
<xsd:anyAttribute/>
|
333
|
+
</xsd:complexType>
|
334
|
+
|
335
|
+
<xsd:keyref name="target-ref" refer="ald:targetID">
|
336
|
+
<xsd:selector xpath=".//ald:file-set/ald:target"/>
|
337
|
+
<xsd:field xpath="@ald:ref"/>
|
338
|
+
</xsd:keyref>
|
339
|
+
</xsd:element>
|
340
|
+
</xsd:schema>
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ALD
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- maul.esel
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rubyzip
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.1'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: nokogiri
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.6'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.6'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: A gem containing helpers for the ALD API, the ALD package format and
|
63
|
+
ALD package definitions.
|
64
|
+
email:
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- lib/ALD.rb
|
70
|
+
- lib/ALD/package.rb
|
71
|
+
- lib/ALD/definition.rb
|
72
|
+
- lib/ALD/package_generator.rb
|
73
|
+
- lib/ALD/definition_generator.rb
|
74
|
+
- lib/ALD/exceptions.rb
|
75
|
+
- lib/ALD/schema.xsd
|
76
|
+
homepage: https://github.com/Library-Distribution/ALD.rb
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.8.25
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Utility gem for the ALD protocol
|
101
|
+
test_files: []
|