inqlude 0.0.8 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/Gemfile +3 -0
- data/README +35 -1
- data/TODO +50 -15
- data/inqlude.gemspec +7 -2
- data/lib/cli.rb +70 -6
- data/lib/creator.rb +32 -8
- data/lib/git_hub_tool.rb +92 -0
- data/lib/inqlude.rb +7 -0
- data/lib/kde_frameworks_creator.rb +173 -0
- data/lib/kde_frameworks_release.rb +61 -0
- data/lib/library.rb +26 -1
- data/lib/manifest.rb +43 -0
- data/lib/manifest_handler.rb +59 -17
- data/lib/rpm_manifestizer.rb +2 -2
- data/lib/settings.rb +21 -10
- data/lib/verifier.rb +29 -18
- data/lib/version.rb +1 -1
- data/lib/view.rb +55 -10
- data/manifest-format.md +27 -12
- data/schema/generic-manifest-v1 +54 -0
- data/schema/proprietary-release-manifest-v1 +63 -0
- data/schema/release-manifest-v1 +73 -0
- data/spec/creator_spec.rb +94 -34
- data/spec/data/awesomelib/awesomelib.2013-09-08.manifest +14 -6
- data/spec/data/bleedingedge/bleedingedge.2012-01-01.manifest +3 -2
- data/spec/data/commercial/commercial.manifest +13 -0
- data/spec/data/karchive-generic.manifest +22 -0
- data/spec/data/karchive-release-beta.manifest +29 -0
- data/spec/data/karchive-release.manifest +29 -0
- data/spec/data/karchive-release2.manifest +29 -0
- data/spec/data/karchive.authors +10 -0
- data/spec/data/karchive.readme +35 -0
- data/spec/data/kservice-generic.manifest +22 -0
- data/spec/data/kservice.readme +9 -0
- data/spec/data/newlib/newlib.manifest +13 -0
- data/spec/data/proprietarylib/proprietarylib.2013-12-22.manifest +16 -0
- data/spec/data/rendertest-generic.manifest +20 -0
- data/spec/data/testcontent +1 -0
- data/spec/kde_frameworks_creator_spec.rb +263 -0
- data/spec/kde_frameworks_release_spec.rb +72 -0
- data/spec/library_spec.rb +54 -2
- data/spec/manifest_handler_spec.rb +102 -8
- data/spec/manifest_spec.rb +63 -0
- data/spec/rpm_manifestizer_spec.rb +2 -2
- data/spec/settings_spec.rb +53 -4
- data/spec/spec_helper.rb +40 -1
- data/spec/verifier_spec.rb +53 -22
- data/spec/view_spec.rb +145 -0
- data/view/all.html.haml +24 -0
- data/view/commercial.html.haml +17 -0
- data/view/contribute.html.haml +7 -3
- data/view/development.html.haml +36 -0
- data/view/favicon.ico +0 -0
- data/view/group.html.haml +20 -0
- data/view/index.html.haml +11 -1
- data/view/layout.html.haml +0 -5
- data/view/library.html.haml +4 -4
- data/view/public/inqlude.css +2 -2
- data/view/unreleased.html.haml +18 -0
- metadata +172 -97
- data/view/edge.html.haml +0 -9
data/lib/settings.rb
CHANGED
@@ -16,11 +16,17 @@
|
|
16
16
|
|
17
17
|
class Settings
|
18
18
|
|
19
|
+
include XDG::BaseDir::Mixin
|
20
|
+
|
21
|
+
def subdirectory
|
22
|
+
"inqlude"
|
23
|
+
end
|
24
|
+
|
19
25
|
attr_accessor :offline, :manifest_path
|
20
26
|
|
21
27
|
def initialize
|
22
28
|
@offline = false
|
23
|
-
@manifest_path =
|
29
|
+
@manifest_path = File.join(xdg_data_path.to_s, "manifests")
|
24
30
|
end
|
25
31
|
|
26
32
|
def data_path
|
@@ -28,24 +34,29 @@ class Settings
|
|
28
34
|
end
|
29
35
|
|
30
36
|
def cache_dir
|
31
|
-
|
37
|
+
make_dir(File.join(xdg_cache_path.to_s))
|
38
|
+
end
|
39
|
+
|
40
|
+
def manifest_dir
|
41
|
+
make_dir(@manifest_path)
|
32
42
|
end
|
33
43
|
|
34
44
|
def version
|
35
45
|
Inqlude::VERSION
|
36
46
|
end
|
37
47
|
|
38
|
-
|
48
|
+
def xdg_data_path
|
49
|
+
data.home
|
50
|
+
end
|
39
51
|
|
40
|
-
def
|
41
|
-
home
|
42
|
-
Dir::mkdir home unless File.exists? home
|
43
|
-
home + dirname
|
52
|
+
def xdg_cache_path
|
53
|
+
cache.home
|
44
54
|
end
|
45
55
|
|
46
|
-
|
47
|
-
|
48
|
-
|
56
|
+
private
|
57
|
+
|
58
|
+
def make_dir path
|
59
|
+
FileUtils.mkdir_p(path)
|
49
60
|
path
|
50
61
|
end
|
51
62
|
|
data/lib/verifier.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2011 Cornelius Schumacher <schumacher@kde.org>
|
1
|
+
# Copyright (C) 2011-2013 Cornelius Schumacher <schumacher@kde.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -44,32 +44,44 @@ class Verifier
|
|
44
44
|
def initialize settings
|
45
45
|
@settings = settings
|
46
46
|
|
47
|
-
@allowed_keys = [ "
|
47
|
+
@allowed_keys = [ "$schema", "name", "version", "release_date",
|
48
48
|
"summary", "urls", "licenses", "description", "authors", "maturity",
|
49
49
|
"platforms", "packages", "keywords", "dependencies", "filename",
|
50
|
-
"libraryname" ]
|
51
|
-
@mandatory_keys = [ "schema_version", "name", "version", "release_date",
|
52
|
-
"summary", "urls", "licenses", "description", "maturity",
|
53
|
-
"platforms", "packages" ]
|
50
|
+
"libraryname", "display_name", "schema_type", "schema_version", "group" ]
|
54
51
|
end
|
55
52
|
|
56
53
|
def verify manifest
|
57
54
|
@result = Result.new
|
58
55
|
|
59
56
|
if !manifest["filename"]
|
60
|
-
@result.errors
|
57
|
+
@result.errors.push "Unable to determine filename"
|
61
58
|
@result.name = "<unknown>"
|
62
59
|
else
|
63
60
|
@result.name = manifest["filename"]
|
64
61
|
end
|
65
62
|
if !manifest["libraryname"]
|
66
|
-
@result.errors
|
63
|
+
@result.errors.push "Unable to determine libraryname"
|
64
|
+
end
|
65
|
+
if manifest["$schema"]
|
66
|
+
schema_type = manifest["schema_type"]
|
67
|
+
if schema_type != "generic" && schema_type != "release" &&
|
68
|
+
schema_type != "proprietary-release"
|
69
|
+
@result.errors.push "Unknown schema type '#{schema_type}'"
|
70
|
+
end
|
71
|
+
else
|
72
|
+
@result.errors.push "Unable to find $schema attribute"
|
67
73
|
end
|
68
74
|
|
69
75
|
if @result.errors.empty?
|
70
76
|
filename = manifest["filename"]
|
71
|
-
expected_filename = "
|
72
|
-
|
77
|
+
expected_filename = ""
|
78
|
+
schema_type = manifest["schema_type"]
|
79
|
+
if schema_type == "generic"
|
80
|
+
expected_filename = "#{manifest["libraryname"]}.manifest"
|
81
|
+
elsif schema_type == "release" || schema_type == "proprietary-release"
|
82
|
+
expected_filename = "#{manifest["libraryname"]}.#{manifest["release_date"]}.manifest"
|
83
|
+
end
|
84
|
+
|
73
85
|
if filename != expected_filename
|
74
86
|
@result.errors.push "Expected file name: #{expected_filename}"
|
75
87
|
end
|
@@ -84,10 +96,12 @@ class Verifier
|
|
84
96
|
end
|
85
97
|
end
|
86
98
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
99
|
+
schema_name = "#{manifest["schema_type"]}-manifest-v#{manifest["schema_version"]}"
|
100
|
+
schema_file = File.expand_path("../../schema/#{schema_name}", __FILE__)
|
101
|
+
|
102
|
+
errors = JSON::Validator.fully_validate(schema_file, manifest)
|
103
|
+
errors.each do |error|
|
104
|
+
@result.errors.push "Schema validation error: #{error}"
|
91
105
|
end
|
92
106
|
end
|
93
107
|
|
@@ -101,10 +115,7 @@ class Verifier
|
|
101
115
|
end
|
102
116
|
|
103
117
|
def verify_file filename
|
104
|
-
manifest =
|
105
|
-
manifest["filename"] = filename
|
106
|
-
filename =~ /^(.*?)\./
|
107
|
-
manifest["libraryname"] = $1
|
118
|
+
manifest = Manifest.parse_file filename
|
108
119
|
verify manifest
|
109
120
|
end
|
110
121
|
|
data/lib/version.rb
CHANGED
data/lib/view.rb
CHANGED
@@ -16,8 +16,7 @@
|
|
16
16
|
|
17
17
|
class View
|
18
18
|
|
19
|
-
attr_accessor :enable_disqus
|
20
|
-
attr_accessor :enable_search
|
19
|
+
attr_accessor :enable_disqus,:enable_search,:manifest,:library,:group_name
|
21
20
|
attr_reader :root
|
22
21
|
|
23
22
|
def initialize handler
|
@@ -29,17 +28,36 @@ class View
|
|
29
28
|
|
30
29
|
assert_dir output_dir
|
31
30
|
|
31
|
+
system "cp #{view_dir}/favicon.ico #{output_dir}"
|
32
|
+
|
32
33
|
assert_dir "#{output_dir}/public"
|
33
34
|
system "cp #{view_dir}/public/* #{output_dir}/public/"
|
35
|
+
|
36
|
+
assert_dir "#{output_dir}/schema"
|
37
|
+
system "cp #{schema_dir}/* #{output_dir}/schema"
|
34
38
|
|
35
39
|
@root = ""
|
36
40
|
|
37
41
|
render_template "index", output_dir
|
38
|
-
render_template "
|
42
|
+
render_template "development", output_dir
|
43
|
+
render_template "unreleased", output_dir
|
44
|
+
render_template "commercial", output_dir
|
45
|
+
render_template "all", output_dir
|
39
46
|
render_template "about", output_dir
|
40
47
|
render_template "get", output_dir
|
41
48
|
render_template "contribute", output_dir
|
42
49
|
render_template "search", output_dir
|
50
|
+
|
51
|
+
|
52
|
+
groups_path = "#{output_dir}/groups/"
|
53
|
+
assert_dir groups_path
|
54
|
+
|
55
|
+
@root = "../"
|
56
|
+
|
57
|
+
@group_name = "kde-frameworks"
|
58
|
+
file_name = "groups/kde-frameworks"
|
59
|
+
render_template "group", output_dir, file_name
|
60
|
+
|
43
61
|
|
44
62
|
library_path = "#{output_dir}/libraries/"
|
45
63
|
assert_dir library_path
|
@@ -48,7 +66,7 @@ class View
|
|
48
66
|
|
49
67
|
@manifest_handler.libraries.each do |library|
|
50
68
|
@library = library
|
51
|
-
@manifest = library.
|
69
|
+
@manifest = library.latest_manifest
|
52
70
|
file_name = "libraries/" + library.name
|
53
71
|
render_template "library", output_dir, file_name
|
54
72
|
end
|
@@ -90,7 +108,7 @@ class View
|
|
90
108
|
end
|
91
109
|
|
92
110
|
def link_to_manifest name
|
93
|
-
"<a href=\"libraries/#{name}.html\">#{name}</a>"
|
111
|
+
"<a href=\"#{@root}libraries/#{name}.html\">#{name}</a>"
|
94
112
|
end
|
95
113
|
|
96
114
|
def link url
|
@@ -133,6 +151,9 @@ class View
|
|
133
151
|
end
|
134
152
|
|
135
153
|
def version_content
|
154
|
+
if @manifest["schema_type"] == "generic"
|
155
|
+
raise "Can't get version for generic manifest '#{@manifest["name"]}'"
|
156
|
+
end
|
136
157
|
out = @manifest["version"]
|
137
158
|
out += " (#{@manifest["maturity"]})"
|
138
159
|
out += "<span class='release-date'>"
|
@@ -185,7 +206,26 @@ class View
|
|
185
206
|
end
|
186
207
|
@manifest_handler.libraries(maturity)
|
187
208
|
end
|
209
|
+
|
210
|
+
def unreleased_libraries
|
211
|
+
@manifest_handler.unreleased_libraries
|
212
|
+
end
|
188
213
|
|
214
|
+
def commercial_libraries
|
215
|
+
@manifest_handler.commercial_libraries
|
216
|
+
end
|
217
|
+
|
218
|
+
def group_title
|
219
|
+
if @group_name == "kde-frameworks"
|
220
|
+
return "KDE Frameworks"
|
221
|
+
end
|
222
|
+
""
|
223
|
+
end
|
224
|
+
|
225
|
+
def group
|
226
|
+
@manifest_handler.group(@group_name)
|
227
|
+
end
|
228
|
+
|
189
229
|
def disqus_enabled?
|
190
230
|
@enable_disqus
|
191
231
|
end
|
@@ -209,14 +249,15 @@ class View
|
|
209
249
|
end
|
210
250
|
|
211
251
|
def old_versions
|
212
|
-
versions =
|
213
|
-
count = @library.manifests.count
|
214
|
-
if count > 1
|
215
|
-
versions = @library.manifests[0..count-2].map {|m| m["version"] }
|
216
|
-
end
|
252
|
+
versions = @library.versions.reject{ |v| v == @manifest["version"] }
|
217
253
|
versions.reverse
|
218
254
|
end
|
219
255
|
|
256
|
+
def render_description
|
257
|
+
doc = Kramdown::Document.new(@manifest["description"])
|
258
|
+
doc.to_html
|
259
|
+
end
|
260
|
+
|
220
261
|
private
|
221
262
|
|
222
263
|
def assert_dir name
|
@@ -231,4 +272,8 @@ class View
|
|
231
272
|
File.expand_path( File.dirname( __FILE__ ) + "/../view/" ) + "/"
|
232
273
|
end
|
233
274
|
|
275
|
+
def schema_dir
|
276
|
+
File.expand_path( File.dirname( __FILE__ ) + "/../schema/" ) + "/"
|
277
|
+
end
|
278
|
+
|
234
279
|
end
|
data/manifest-format.md
CHANGED
@@ -32,19 +32,33 @@ concrete file.
|
|
32
32
|
|
33
33
|
These are the attributes:
|
34
34
|
|
35
|
-
###
|
35
|
+
### $schema
|
36
36
|
|
37
|
-
|
37
|
+
This is a reference to the schema which is used in the manifest file. The
|
38
|
+
schema follows the [JSON Schema](http://json-schema.org) specification.
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
The schema comes in three flavors: "generic", "release", and
|
41
|
+
"proprietary-release". They differe in what fields are required, the meaning of
|
42
|
+
fields is the same in all. "generic" is a subset of "proprietary-release", which
|
43
|
+
is a subset of "release".
|
44
|
+
|
45
|
+
Each schema has an identifier. The current identifier for the release schema is
|
46
|
+
"http://inqlude.org/schema/release-manifest-v1#". It includes the version
|
47
|
+
number. The other identifiers are the same, but instead of "release" they use
|
48
|
+
the corresponding sub string identifying the flavor.
|
49
|
+
|
50
|
+
The schema and its versioning is used to make expectations of tools and
|
51
|
+
processing explicit and adapt to schema changes.
|
41
52
|
|
42
53
|
If the schema is changed in a way incompatible with processing tools, the
|
43
54
|
schema version number has to be increased.
|
44
55
|
|
45
|
-
|
56
|
+
As Inqlude currently still is in alpha, changes to the schema are to be expected
|
57
|
+
and while we will try to not break things, there might be some incompatible
|
58
|
+
changes without changing the version number during development. This will stop,
|
59
|
+
when we have reached beta state.
|
46
60
|
|
47
|
-
|
61
|
+
*$schema is a mandatory attribute*
|
48
62
|
|
49
63
|
### name
|
50
64
|
|
@@ -71,13 +85,13 @@ representing the different versions of the library.
|
|
71
85
|
|
72
86
|
Date, when the version was released
|
73
87
|
|
74
|
-
*release_date is a mandatory attribute*
|
88
|
+
*release_date is a mandatory attribute in the release schemas*
|
75
89
|
|
76
90
|
### version
|
77
91
|
|
78
92
|
Version of the release
|
79
93
|
|
80
|
-
*version is a mandatory attribute*
|
94
|
+
*version is a mandatory attribute in the release schemas*
|
81
95
|
|
82
96
|
### summary
|
83
97
|
|
@@ -132,8 +146,8 @@ strings for the most often used licenses:
|
|
132
146
|
Full description of the library
|
133
147
|
|
134
148
|
The description is a text describing the library. It can be of arbitrary length.
|
135
|
-
|
136
|
-
|
149
|
+
The text is formatted using
|
150
|
+
[Markdown](http://daringfireball.net/projects/markdown/syntax).
|
137
151
|
|
138
152
|
*description is a mandatory attribute*
|
139
153
|
|
@@ -158,7 +172,7 @@ The flag has to be one of the following identifiers:
|
|
158
172
|
recommended for production use
|
159
173
|
* "alpha": preview releases, not suitable for production use
|
160
174
|
|
161
|
-
*maturity is a mandatory attribute*
|
175
|
+
*maturity is a mandatory attribute, it's optional in the generic schema*
|
162
176
|
|
163
177
|
### platforms
|
164
178
|
|
@@ -190,7 +204,8 @@ package. The following types are supported:
|
|
190
204
|
This is the source code of the release. It has one URL to the file, which
|
191
205
|
can be used to download the code.
|
192
206
|
|
193
|
-
*source is a mandatory package attribute
|
207
|
+
*source is a mandatory package attribute in the release schema, it's optional
|
208
|
+
in the proprietary-release schema*
|
194
209
|
|
195
210
|
#### openSUSE
|
196
211
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"id": "http://inqlude.org/schema/generic-manifest-v1#",
|
3
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
4
|
+
"title": "Generic Inqlude Manifest Schema",
|
5
|
+
"type": "object",
|
6
|
+
"properties": {
|
7
|
+
"name": {
|
8
|
+
"type": "string"
|
9
|
+
},
|
10
|
+
"summary": {
|
11
|
+
"type": "string"
|
12
|
+
},
|
13
|
+
"urls": {
|
14
|
+
"type": "object",
|
15
|
+
"properties": {
|
16
|
+
"homepage": {
|
17
|
+
"type": "string"
|
18
|
+
},
|
19
|
+
"download": {
|
20
|
+
"type": "string"
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"required": [ "homepage" ]
|
24
|
+
},
|
25
|
+
"licenses": {
|
26
|
+
"type": "array",
|
27
|
+
"items": {
|
28
|
+
"type": "string"
|
29
|
+
},
|
30
|
+
"minItems": 1
|
31
|
+
},
|
32
|
+
"description": {
|
33
|
+
"type": "string"
|
34
|
+
},
|
35
|
+
"authors": {
|
36
|
+
"type": "array",
|
37
|
+
"items": {
|
38
|
+
"type": "string"
|
39
|
+
}
|
40
|
+
},
|
41
|
+
"platforms": {
|
42
|
+
"type": "array",
|
43
|
+
"items": {
|
44
|
+
"type": "string"
|
45
|
+
},
|
46
|
+
"minItems": 1
|
47
|
+
},
|
48
|
+
"group": {
|
49
|
+
"type": "string"
|
50
|
+
}
|
51
|
+
},
|
52
|
+
"required": [ "$schema", "name", "summary",
|
53
|
+
"urls", "licenses", "description", "platforms" ]
|
54
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
{
|
2
|
+
"id": "http://inqlude.org/schema/release-manifest-v1#",
|
3
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
4
|
+
"title": "Inqlude Release Manifest Schema",
|
5
|
+
"type": "object",
|
6
|
+
"properties": {
|
7
|
+
"name": {
|
8
|
+
"type": "string"
|
9
|
+
},
|
10
|
+
"release_date": {
|
11
|
+
"type": "string"
|
12
|
+
},
|
13
|
+
"version": {
|
14
|
+
"type": "string"
|
15
|
+
},
|
16
|
+
"summary": {
|
17
|
+
"type": "string"
|
18
|
+
},
|
19
|
+
"urls": {
|
20
|
+
"type": "object",
|
21
|
+
"properties": {
|
22
|
+
"homepage": {
|
23
|
+
"type": "string"
|
24
|
+
},
|
25
|
+
"download": {
|
26
|
+
"type": "string"
|
27
|
+
}
|
28
|
+
},
|
29
|
+
"required": [ "homepage" ]
|
30
|
+
},
|
31
|
+
"licenses": {
|
32
|
+
"type": "array",
|
33
|
+
"items": {
|
34
|
+
"type": "string"
|
35
|
+
},
|
36
|
+
"minItems": 1
|
37
|
+
},
|
38
|
+
"description": {
|
39
|
+
"type": "string"
|
40
|
+
},
|
41
|
+
"authors": {
|
42
|
+
"type": "array",
|
43
|
+
"items": {
|
44
|
+
"type": "string"
|
45
|
+
}
|
46
|
+
},
|
47
|
+
"maturity": {
|
48
|
+
"type": "string"
|
49
|
+
},
|
50
|
+
"platforms": {
|
51
|
+
"type": "array",
|
52
|
+
"items": {
|
53
|
+
"type": "string"
|
54
|
+
},
|
55
|
+
"minItems": 1
|
56
|
+
},
|
57
|
+
"group": {
|
58
|
+
"type": "string"
|
59
|
+
}
|
60
|
+
},
|
61
|
+
"required": [ "$schema", "name", "release_date", "version", "summary",
|
62
|
+
"urls", "licenses", "description", "maturity", "platforms" ]
|
63
|
+
}
|