ALD 0.0.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.
- 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: []
|