inqlude 0.8.0 → 0.9.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.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.travis.yml +7 -3
- data/CHANGELOG.md +9 -0
- data/Gemfile +4 -0
- data/README.md +4 -0
- data/lib/cli.rb +24 -26
- data/lib/cli_controller.rb +24 -0
- data/lib/inqlude.rb +1 -0
- data/lib/kde_frameworks_release.rb +6 -1
- data/lib/manifest_handler.rb +44 -1
- data/lib/verifier.rb +4 -0
- data/lib/version.rb +1 -1
- data/lib/view.rb +62 -15
- data/manifest-format.md +30 -5
- data/spec/data/inqlude-all.json +11 -2
- data/spec/data/manifests/awesomelib/awesomelib.2013-09-08.manifest +4 -2
- data/spec/data/manifests/bleedingedge/bleedingedge.2012-01-01.manifest +3 -0
- data/spec/data/manifests/commercial/commercial.manifest +3 -0
- data/spec/data/manifests/newlib/newlib.manifest +1 -0
- data/spec/data/missing-topics/miss-topics/miss-topics.manifest +2 -1
- data/spec/integration/cli_verify_spec.rb +2 -0
- data/spec/integration/cli_view_spec.rb +102 -0
- data/spec/integration/spec_helper.rb +3 -0
- data/spec/online/cli_view_spec.rb +64 -0
- data/spec/online/spec_helper.rb +5 -0
- data/spec/stubs/qmake/qmake +2 -0
- data/spec/unit/cli_controller_spec.rb +51 -0
- data/spec/unit/kde_frameworks_release_spec.rb +36 -23
- data/spec/unit/manifest_handler_spec.rb +15 -1
- data/spec/unit/manifest_spec.rb +1 -1
- data/spec/unit/spec_helper.rb +10 -0
- data/spec/unit/view_spec.rb +68 -0
- data/topics/Manifest_updater/README.md +19 -0
- data/topics/Manifest_updater/app.js +43 -0
- data/topics/Manifest_updater/manifests/example/example.manifest +20 -0
- data/topics/Manifest_updater/package.json +9 -0
- data/topics/Manifest_updater/topics.csv +1 -0
- data/topics/Manifest_updater/update_manifests/example/example.manifest +24 -0
- data/topics/topics.csv +3 -0
- data/view/{about.html.haml → one-column/about.html.haml} +0 -0
- data/view/{all.html.haml → one-column/all.html.haml} +0 -0
- data/view/{commercial.html.haml → one-column/commercial.html.haml} +0 -0
- data/view/{contribute.html.haml → one-column/contribute.html.haml} +0 -0
- data/view/{development.html.haml → one-column/development.html.haml} +0 -0
- data/view/{favicon.ico → one-column/favicon.ico} +0 -0
- data/view/{get.html.haml → one-column/get.html.haml} +0 -0
- data/view/{group.html.haml → one-column/group.html.haml} +0 -0
- data/view/{index.html.haml → one-column/index.html.haml} +0 -0
- data/view/{layout.html.haml → one-column/layout.html.haml} +0 -0
- data/view/{library.html.haml → one-column/library.html.haml} +1 -1
- data/view/{public → one-column/public}/inqlude.css +0 -0
- data/view/{search.html.haml → one-column/search.html.haml} +0 -0
- data/view/{unreleased.html.haml → one-column/unreleased.html.haml} +0 -0
- data/view/two-column/about.html.haml +34 -0
- data/view/two-column/all.html.haml +47 -0
- data/view/two-column/contribute.html.haml +49 -0
- data/view/two-column/favicon.ico +0 -0
- data/view/two-column/get.html.haml +57 -0
- data/view/two-column/group.html.haml +52 -0
- data/view/two-column/index.html.haml +194 -0
- data/view/two-column/ios.ico +0 -0
- data/view/two-column/layout.html.haml +102 -0
- data/view/two-column/library.html.haml +64 -0
- data/view/two-column/public/inqlude.css +265 -0
- data/view/two-column/search.html.haml +20 -0
- data/view/two-column/topic.html.haml +47 -0
- metadata +41 -16
data/manifest-format.md
CHANGED
@@ -12,7 +12,7 @@ path, but by default the inqlude command line tool assumes the path
|
|
12
12
|
|
13
13
|
The manifest directory is under version control by git.
|
14
14
|
|
15
|
-
Each library
|
15
|
+
Each library represented in the Inqlude system has its own sub-directory in the
|
16
16
|
manifest directory. The name of the sub-directory is the name of the library.
|
17
17
|
See there for more information about its specification and how it's used.
|
18
18
|
|
@@ -38,7 +38,7 @@ This is a reference to the schema which is used in the manifest file. The
|
|
38
38
|
schema follows the [JSON Schema](http://json-schema.org) specification.
|
39
39
|
|
40
40
|
The schema comes in three flavors: "generic", "release", and
|
41
|
-
"proprietary-release". They
|
41
|
+
"proprietary-release". They differ in what fields are required, the meaning of
|
42
42
|
fields is the same in all. "generic" is a subset of "proprietary-release", which
|
43
43
|
is a subset of "release".
|
44
44
|
|
@@ -74,13 +74,23 @@ other library and a "-qt" suffix. For example the Qt bindings to PackageKit
|
|
74
74
|
are named "packagekit-qt" in Inqlude.
|
75
75
|
|
76
76
|
It's used as internal handle by the tools and shows up where it
|
77
|
-
needs to be processed by software, e.g. as an identifier as
|
77
|
+
needs to be processed by software, e.g. as an identifier as parameter of the
|
78
78
|
command line tool or as part of the URL on the web site. The name has to be
|
79
79
|
identical with the value of the name attribute of the manifest files
|
80
80
|
representing the different versions of the library.
|
81
81
|
|
82
82
|
*name is a mandatory attribute*
|
83
83
|
|
84
|
+
### display_name
|
85
|
+
|
86
|
+
The real name of the library that is displayed in the website.
|
87
|
+
|
88
|
+
This holds the name in a way formatted for best human readability. This can contain
|
89
|
+
characters which are upper-case, lower-case, alphanumeric, symbols and
|
90
|
+
special signs.
|
91
|
+
|
92
|
+
*display_name is an optional attribute*
|
93
|
+
|
84
94
|
### release_date
|
85
95
|
|
86
96
|
Date, when the version was released
|
@@ -101,6 +111,21 @@ This is the main description of the library used in summary lists etc.
|
|
101
111
|
|
102
112
|
*summary is a mandatory attribute*
|
103
113
|
|
114
|
+
### topics
|
115
|
+
|
116
|
+
Array of strings identifying the topics to which the library belongs.
|
117
|
+
|
118
|
+
Topics are used to categorize libraries. Each library has at least one topic,
|
119
|
+
but can have more than one.
|
120
|
+
|
121
|
+
At the moment valid topics are:
|
122
|
+
|
123
|
+
"API", "Artwork", "Bindings", "Communication", "Data", "Desktop", "Development",
|
124
|
+
"Graphics", "Logging", "Mobile", "Multimedia", "Printing", "QML", "Scripting",
|
125
|
+
"Security", "Text", "Web", "Widgets"
|
126
|
+
|
127
|
+
*topics is an optional attribute, preferred to have at least one topic*
|
128
|
+
|
104
129
|
### urls
|
105
130
|
|
106
131
|
List of URLs relevant to the library
|
@@ -216,13 +241,13 @@ openSUSE binary packages. For each version of openSUSE there is a separate
|
|
216
241
|
entry.
|
217
242
|
|
218
243
|
Each entry contains the package_name, repository, and source_rpm attributes.
|
219
|
-
The repository contains
|
244
|
+
The repository contains a url and a name sub-attribute.
|
220
245
|
|
221
246
|
### group
|
222
247
|
|
223
248
|
Name of a group
|
224
249
|
|
225
250
|
The group optionally specifies the name of a group of libraries the library
|
226
|
-
described
|
251
|
+
described by the manifest belongs to.
|
227
252
|
|
228
253
|
At the moment only the value "kde-frameworks" is used.
|
data/spec/data/inqlude-all.json
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
{
|
3
3
|
"$schema": "http://inqlude.org/schema/release-manifest-v1#",
|
4
4
|
"name": "awesomelib",
|
5
|
+
"display_name": "Awesomelib",
|
5
6
|
"release_date": "2013-09-08",
|
6
7
|
"version": "0.2.0",
|
7
8
|
"summary": "Awesome library",
|
@@ -10,7 +11,8 @@
|
|
10
11
|
],
|
11
12
|
"urls": {
|
12
13
|
"homepage": "http://example.com",
|
13
|
-
"download": "http://example.com/download"
|
14
|
+
"download": "http://example.com/download",
|
15
|
+
"vcs": "http://example.com/git"
|
14
16
|
},
|
15
17
|
"licenses": [
|
16
18
|
"LGPLv2.1+",
|
@@ -35,6 +37,9 @@
|
|
35
37
|
"release_date": "2012-01-01",
|
36
38
|
"version": "edge",
|
37
39
|
"summary": "Bleeding edge version of a library",
|
40
|
+
"topics": [
|
41
|
+
"API"
|
42
|
+
],
|
38
43
|
"urls": {
|
39
44
|
"homepage": "http://example.org",
|
40
45
|
"download": "http://example.org/download"
|
@@ -59,6 +64,9 @@
|
|
59
64
|
"$schema": "http://inqlude.org/schema/generic-manifest-v1#",
|
60
65
|
"name": "commercial",
|
61
66
|
"summary": "Commercial library",
|
67
|
+
"topics": [
|
68
|
+
"Data"
|
69
|
+
],
|
62
70
|
"urls": {
|
63
71
|
"homepage": "http://commercial.example.org"
|
64
72
|
},
|
@@ -78,6 +86,7 @@
|
|
78
86
|
{
|
79
87
|
"$schema": "http://inqlude.org/schema/generic-manifest-v1#",
|
80
88
|
"name": "newlib",
|
89
|
+
"display_name": "Newlib",
|
81
90
|
"summary": "A new lib under heavy development",
|
82
91
|
"topics": [
|
83
92
|
"Bindings"
|
@@ -123,4 +132,4 @@
|
|
123
132
|
"OS X"
|
124
133
|
]
|
125
134
|
}
|
126
|
-
]
|
135
|
+
]
|
@@ -1,6 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"$schema": "http://inqlude.org/schema/release-manifest-v1#",
|
3
3
|
"name": "awesomelib",
|
4
|
+
"display_name": "Awesomelib",
|
4
5
|
"release_date": "2013-09-08",
|
5
6
|
"version": "0.2.0",
|
6
7
|
"summary": "Awesome library",
|
@@ -9,7 +10,8 @@
|
|
9
10
|
],
|
10
11
|
"urls": {
|
11
12
|
"homepage": "http://example.com",
|
12
|
-
"download": "http://example.com/download"
|
13
|
+
"download": "http://example.com/download",
|
14
|
+
"vcs": "http://example.com/git"
|
13
15
|
},
|
14
16
|
"licenses": [
|
15
17
|
"LGPLv2.1+",
|
@@ -27,4 +29,4 @@
|
|
27
29
|
"source": "ftp://example.com/download/awesomelib-0.2.0.tar.gz"
|
28
30
|
},
|
29
31
|
"group": "kde-frameworks"
|
30
|
-
}
|
32
|
+
}
|
@@ -63,6 +63,7 @@ Verify manifest broken.manifest...error
|
|
63
63
|
Schema validation error: The property '#/' did not contain a required property of 'licenses' in schema http://inqlude.org/schema/generic-manifest-v1#
|
64
64
|
Schema validation error: The property '#/' did not contain a required property of 'description' in schema http://inqlude.org/schema/generic-manifest-v1#
|
65
65
|
Schema validation error: The property '#/' did not contain a required property of 'platforms' in schema http://inqlude.org/schema/generic-manifest-v1#
|
66
|
+
Warning: missing `display_name` attribute
|
66
67
|
Warning: missing `topics` attribute
|
67
68
|
|
68
69
|
2 manifests checked. 1 ok, 1 with error, 1 has warning.
|
@@ -108,6 +109,7 @@ EOT
|
|
108
109
|
Verify manifest miss-topics.manifest...ok
|
109
110
|
Warning: missing `topics` attribute
|
110
111
|
Verify manifest no-topics.manifest...ok
|
112
|
+
Warning: missing `display_name` attribute
|
111
113
|
Warning: missing `topics` attribute
|
112
114
|
|
113
115
|
2 manifests checked. 2 ok, 0 with error, 2 have warnings.
|
@@ -24,5 +24,107 @@ describe "Command line interface" do
|
|
24
24
|
expect(File.exist?(File.join(output_dir, "libraries", "awesomelib.html"))).to be(true)
|
25
25
|
expect(File.exist?(File.join(output_dir, "libraries", "newlib.html"))).to be(true)
|
26
26
|
end
|
27
|
+
|
28
|
+
it "checks templates direstory" do
|
29
|
+
dir = given_directory do
|
30
|
+
given_directory_from_data("awesomelib", from: "manifests/awesomelib")
|
31
|
+
given_directory_from_data("newlib", from: "manifests/newlib")
|
32
|
+
end
|
33
|
+
|
34
|
+
output_dir = given_directory
|
35
|
+
|
36
|
+
result = run_command(args: ["view", "--offline", "--manifest_dir=#{dir}",
|
37
|
+
"--output-dir=#{output_dir}", "--templates=one-column"])
|
38
|
+
expect(result).to exit_with_success(/Creating web site/)
|
39
|
+
|
40
|
+
result = run_command(args: ["view", "--offline", "--manifest_dir=#{dir}",
|
41
|
+
"--output-dir=#{output_dir}", "--templates=unreal-template"])
|
42
|
+
expected_output = <<EOT
|
43
|
+
Error: Templates directory doesn't exist
|
44
|
+
EOT
|
45
|
+
expect(result).to exit_with_error(1, expected_output)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "generates templates" do
|
49
|
+
dir = given_directory do
|
50
|
+
given_directory_from_data("awesomelib", from: "manifests/awesomelib")
|
51
|
+
given_directory_from_data("newlib", from: "manifests/newlib")
|
52
|
+
end
|
53
|
+
|
54
|
+
output_dir = given_directory
|
55
|
+
|
56
|
+
result = run_command(args: ["view", "--offline", "--manifest_dir=#{dir}",
|
57
|
+
"--output-dir=#{output_dir}", "--templates=one-column"])
|
58
|
+
expect(result).to exit_with_success(/Creating web site/)
|
59
|
+
|
60
|
+
expect(File.exist?(File.join(output_dir, "index.html"))).to be(true)
|
61
|
+
expect(File.exist?(File.join(output_dir, "libraries", "awesomelib.html"))).to be(true)
|
62
|
+
expect(File.exist?(File.join(output_dir, "libraries", "newlib.html"))).to be(true)
|
63
|
+
end
|
64
|
+
|
65
|
+
context "inqlude-all.json" do
|
66
|
+
before(:each) do
|
67
|
+
@manifest_dir = given_directory do
|
68
|
+
given_directory_from_data("awesomelib", from: "manifests/awesomelib")
|
69
|
+
given_directory_from_data("newlib", from: "manifests/newlib")
|
70
|
+
end
|
71
|
+
|
72
|
+
@output_dir = given_directory
|
73
|
+
|
74
|
+
run_command(args: ["view", "--offline", "--manifest_dir=#{@manifest_dir}",
|
75
|
+
"--output-dir=#{@output_dir}"])
|
76
|
+
end
|
77
|
+
|
78
|
+
it "checks number of manifests" do
|
79
|
+
data = File.read(File.join(@output_dir, 'inqlude-all.json'))
|
80
|
+
parsed_data = JSON.parse(data);
|
81
|
+
|
82
|
+
settings = Settings.new
|
83
|
+
settings.manifest_path = @manifest_dir
|
84
|
+
settings.offline = true
|
85
|
+
handler = ManifestHandler.new settings
|
86
|
+
handler.read_remote
|
87
|
+
|
88
|
+
expect(handler.libraries.length).to eq parsed_data.length
|
89
|
+
end
|
90
|
+
|
91
|
+
it "checks content" do
|
92
|
+
data = File.read(File.join(@output_dir, 'inqlude-all.json'))
|
93
|
+
parsed_data = JSON.parse(data);
|
94
|
+
for element in parsed_data do
|
95
|
+
if element["name"] == "awesomelib"
|
96
|
+
library = element
|
97
|
+
break
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
expect(library).to be
|
102
|
+
|
103
|
+
settings = Settings.new
|
104
|
+
handler = ManifestHandler.new settings
|
105
|
+
settings.manifest_path = @manifest_dir
|
106
|
+
settings.offline = true
|
107
|
+
handler.read_remote
|
108
|
+
|
109
|
+
manifest = handler.library("awesomelib").latest_manifest
|
110
|
+
|
111
|
+
expect(manifest.display_name).to eq "Awesomelib"
|
112
|
+
expect(manifest.release_date).to eq "2013-09-08"
|
113
|
+
expect(manifest.version).to eq "0.2.0"
|
114
|
+
expect(manifest.summary).to eq "Awesome library"
|
115
|
+
expect(manifest.topics).to eq ["API"]
|
116
|
+
|
117
|
+
expect(manifest.urls.homepage).to eq "http://example.com"
|
118
|
+
expect(manifest.urls.download).to eq "http://example.com/download"
|
119
|
+
expect(manifest.urls.vcs).to eq "http://example.com/git"
|
120
|
+
|
121
|
+
expect(manifest.licenses).to eq ["LGPLv2.1+", "Commercial"]
|
122
|
+
expect(manifest.description).to eq "This is an awesome library."
|
123
|
+
expect(manifest.authors).to eq ["Cornelius Schumacher <schumacher@kde.org>"]
|
124
|
+
expect(manifest.maturity).to eq "stable"
|
125
|
+
|
126
|
+
expect(manifest.packages.source).to eq "ftp://example.com/download/awesomelib-0.2.0.tar.gz"
|
127
|
+
end
|
128
|
+
end
|
27
129
|
end
|
28
130
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
include CliTester
|
4
|
+
|
5
|
+
describe "Command line interface" do
|
6
|
+
include GivenFilesystemSpecHelpers
|
7
|
+
|
8
|
+
use_given_filesystem
|
9
|
+
|
10
|
+
describe "view" do
|
11
|
+
before(:each) do
|
12
|
+
@output_dir = given_directory
|
13
|
+
run_command(args: ["view", "--output-dir=#{@output_dir}"])
|
14
|
+
end
|
15
|
+
|
16
|
+
it "generates inqlude-all.json from online data" do
|
17
|
+
data = File.read(File.join(@output_dir, 'inqlude-all.json'))
|
18
|
+
parsed_data = JSON.parse(data);
|
19
|
+
|
20
|
+
settings = Settings.new
|
21
|
+
handler = ManifestHandler.new settings
|
22
|
+
handler.read_remote
|
23
|
+
|
24
|
+
expect(handler.libraries.length).to eq parsed_data.length
|
25
|
+
|
26
|
+
for element in parsed_data do
|
27
|
+
if element["name"] == "baloo"
|
28
|
+
library = element
|
29
|
+
break
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
manifest = handler.library("baloo").latest_manifest
|
34
|
+
|
35
|
+
expect(manifest.display_name).to eq library["display_name"]
|
36
|
+
expect(manifest.release_date).to eq library["release_date"]
|
37
|
+
expect(manifest.version).to eq library["version"]
|
38
|
+
expect(manifest.summary).to eq library["summary"]
|
39
|
+
expect(manifest.topics).to eq library["topics"]
|
40
|
+
|
41
|
+
expect(manifest.urls.homepage).to eq library["urls"]["homepage"]
|
42
|
+
expect(manifest.urls.api_docs).to eq library["urls"]["api_docs"]
|
43
|
+
expect(manifest.urls.download).to eq library["urls"]["download"]
|
44
|
+
expect(manifest.urls.tutorial).to eq library["urls"]["tutorial"]
|
45
|
+
expect(manifest.urls.vcs).to eq library["urls"]["vcs"]
|
46
|
+
expect(manifest.urls.description_source).to eq library["urls"]["description_source"]
|
47
|
+
expect(manifest.urls.announcement).to eq library["urls"]["announcement"]
|
48
|
+
expect(manifest.urls.mailing_list).to eq library["urls"]["mailing_list"]
|
49
|
+
expect(manifest.urls.contact).to eq library["urls"]["contact"]
|
50
|
+
expect(manifest.urls.custom).to eq library["urls"]["custom"]
|
51
|
+
|
52
|
+
expect(manifest.licenses).to eq library["licenses"]
|
53
|
+
expect(manifest.description).to eq library["description"]
|
54
|
+
expect(manifest.authors).to eq library["authors"]
|
55
|
+
expect(manifest.maturity).to eq library["maturity"]
|
56
|
+
|
57
|
+
expect(manifest.packages.source).to eq library["packages"]["source"]
|
58
|
+
expect(manifest.packages.openSUSE).to eq library["packages"]["openSUSE"]
|
59
|
+
expect(manifest.packages.windows).to eq library["packages"]["windows"]
|
60
|
+
expect(manifest.packages.ubuntu).to eq library["packages"]["ubuntu"]
|
61
|
+
expect(manifest.packages.osx).to eq library["packages"]["osx"]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
|
3
|
+
class DistroUnknown
|
4
|
+
def name
|
5
|
+
"<unknown distro>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def version
|
9
|
+
"<unknown version>"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe CliController do
|
14
|
+
let(:distro) {DistroUnknown.new}
|
15
|
+
|
16
|
+
describe ".print_versions" do
|
17
|
+
context "with qmake installed" do
|
18
|
+
before do
|
19
|
+
ENV["PATH"] = stubs_path("qmake") + ":" + ENV["PATH"]
|
20
|
+
end
|
21
|
+
|
22
|
+
it "prints versions" do
|
23
|
+
expected_output = <<EOT
|
24
|
+
Inqlude: #{Inqlude::VERSION}
|
25
|
+
Qt: 4.8.6
|
26
|
+
OS: <unknown distro> <unknown version>
|
27
|
+
EOT
|
28
|
+
expect {
|
29
|
+
CliController.print_versions(distro)
|
30
|
+
}.to output(expected_output).to_stdout
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "without qmake installed" do
|
35
|
+
before do
|
36
|
+
allow(CliController).to receive(:find_executable).with("qmake").and_return(false)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "prints versions" do
|
40
|
+
expected_output = <<EOT
|
41
|
+
Inqlude: #{Inqlude::VERSION}
|
42
|
+
Qt: not found
|
43
|
+
OS: <unknown distro> <unknown version>
|
44
|
+
EOT
|
45
|
+
expect {
|
46
|
+
CliController.print_versions(distro)
|
47
|
+
}.to output(expected_output).to_stdout
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|