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
@@ -1,5 +1,7 @@
|
|
1
1
|
require File.expand_path('../spec_helper', __FILE__)
|
2
2
|
|
3
|
+
include GivenFilesystemSpecHelpers
|
4
|
+
|
3
5
|
describe ManifestHandler do
|
4
6
|
|
5
7
|
let(:settings) do
|
@@ -16,27 +18,51 @@ describe ManifestHandler do
|
|
16
18
|
end
|
17
19
|
|
18
20
|
it "reads manifests" do
|
19
|
-
mh.manifests.count.
|
20
|
-
mh.libraries.count.
|
21
|
+
expect(mh.manifests.count).to eq 5
|
22
|
+
expect(mh.libraries.count).to eq 5
|
21
23
|
mh.read_remote
|
22
|
-
mh.manifests.count.
|
23
|
-
mh.libraries.count.
|
24
|
+
expect(mh.manifests.count).to eq 5
|
25
|
+
expect(mh.libraries.count).to eq 5
|
24
26
|
end
|
25
27
|
|
26
28
|
it "provides access to manifests" do
|
27
|
-
mh.manifest("awesomelib").class.
|
29
|
+
expect(mh.manifest("awesomelib").class).to be Hash
|
28
30
|
expect { mh.manifest("nonexisting") }.to raise_error
|
29
31
|
end
|
32
|
+
|
33
|
+
it "reads schema type" do
|
34
|
+
expect(mh.manifest("awesomelib")["schema_type"]).to eq "release"
|
35
|
+
expect(mh.manifest("newlib")["schema_type"]).to eq "generic"
|
36
|
+
expect(mh.manifest("proprietarylib")["schema_type"]).to eq "proprietary-release"
|
37
|
+
end
|
38
|
+
|
39
|
+
context "default manifest path" do
|
40
|
+
before(:each) do
|
41
|
+
@handler = ManifestHandler.new Settings.new
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns generic manifest path" do
|
45
|
+
manifest = create_generic_manifest( "mylib" )
|
46
|
+
expect( @handler.manifest_path( manifest ) ).to eq(
|
47
|
+
File.expand_path( "~/.local/share/inqlude/manifests/mylib/mylib.manifest" ) )
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns release manifest path" do
|
51
|
+
manifest = create_manifest( "mylib", "2014-02-01", "1.0" )
|
52
|
+
expect( @handler.manifest_path( manifest ) ).to eq(
|
53
|
+
File.expand_path( "~/.local/share/inqlude/manifests/mylib/mylib.2014-02-01.manifest" ) )
|
54
|
+
end
|
55
|
+
end
|
30
56
|
|
31
|
-
|
57
|
+
describe "#libraries" do
|
32
58
|
|
33
59
|
it "returns all libraries" do
|
34
|
-
expect( mh.libraries.count ).to eq
|
60
|
+
expect( mh.libraries.count ).to eq 5
|
35
61
|
end
|
36
62
|
|
37
63
|
it "returns stable libraries" do
|
38
64
|
libraries = mh.libraries :stable
|
39
|
-
expect( libraries.count ).to eq
|
65
|
+
expect( libraries.count ).to eq 2
|
40
66
|
expect( libraries.first.manifests.last["name"] ).to eq "awesomelib"
|
41
67
|
expect( libraries.first.manifests.last["version"] ).to eq "0.2.0"
|
42
68
|
end
|
@@ -47,7 +73,75 @@ describe ManifestHandler do
|
|
47
73
|
expect( libraries.first.manifests.last["name"] ).to eq "bleedingedge"
|
48
74
|
expect( libraries.first.manifests.last["version"] ).to eq "edge"
|
49
75
|
end
|
76
|
+
|
77
|
+
it "returns unreleased libraries" do
|
78
|
+
libraries = mh.unreleased_libraries
|
79
|
+
expect( libraries.count ).to eq 1
|
80
|
+
expect( libraries.first.manifests.last["name"] ).to eq "newlib"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns commercial libraries" do
|
84
|
+
libraries = mh.commercial_libraries
|
85
|
+
expect( libraries.count ).to eq 3
|
86
|
+
expect( libraries.first.manifests.last["name"] ).to eq "awesomelib"
|
87
|
+
expect( libraries[1].manifests.last["name"] ).to eq "commercial"
|
88
|
+
end
|
50
89
|
|
51
90
|
end
|
52
91
|
|
92
|
+
describe "#group" do
|
93
|
+
it "returns all libraries of a group" do
|
94
|
+
libraries = mh.group("kde-frameworks")
|
95
|
+
expect( libraries.count ).to eq 2
|
96
|
+
expect( libraries.first.manifests.last["name"] ).to eq "awesomelib"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#library" do
|
101
|
+
|
102
|
+
it "returns one library" do
|
103
|
+
library = mh.library "awesomelib"
|
104
|
+
expect( library.name ).to eq "awesomelib"
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
context "library with generic and release manifest" do
|
110
|
+
use_given_filesystem
|
111
|
+
|
112
|
+
before(:each) do
|
113
|
+
@manifest_path = given_directory do
|
114
|
+
given_directory "karchive" do
|
115
|
+
given_file "karchive.manifest", :from => "karchive-generic.manifest"
|
116
|
+
given_file "karchive.2014-02-01.manifest", :from => "karchive-release-beta.manifest"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
s = Settings.new
|
121
|
+
s.manifest_path = @manifest_path
|
122
|
+
s.offline = true
|
123
|
+
@manifest_handler = ManifestHandler.new s
|
124
|
+
@manifest_handler.read_remote
|
125
|
+
end
|
126
|
+
|
127
|
+
it "reads generic manifest" do
|
128
|
+
expect( @manifest_handler.library("karchive").manifests.count ).to eq 2
|
129
|
+
generic_manifest = @manifest_handler.library("karchive").generic_manifest
|
130
|
+
expect( generic_manifest["name"] ).to eq "karchive"
|
131
|
+
expect( generic_manifest["schema_type"] ).to eq "generic"
|
132
|
+
end
|
133
|
+
|
134
|
+
it "lists development versions" do
|
135
|
+
libraries = @manifest_handler.libraries :beta
|
136
|
+
expect( libraries.count ).to eq 1
|
137
|
+
expect( libraries.first.latest_manifest["name"] ).to eq "karchive"
|
138
|
+
expect( libraries.first.latest_manifest["version"] ).to eq "4.9.90"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "lists unreleased libraries" do
|
142
|
+
libraries = @manifest_handler.unreleased_libraries
|
143
|
+
expect( libraries.count ).to eq 0
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
53
147
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Manifest do
|
4
|
+
|
5
|
+
include_context "manifest_files"
|
6
|
+
|
7
|
+
it "provides schema identifier" do
|
8
|
+
expect(Manifest.release_schema_id).to include("inqlude.org")
|
9
|
+
expect(Manifest.release_schema_id).to include("release")
|
10
|
+
|
11
|
+
expect(Manifest.generic_schema_id).to include("inqlude.org")
|
12
|
+
expect(Manifest.generic_schema_id).to include("generic")
|
13
|
+
|
14
|
+
expect(Manifest.proprietary_release_schema_id).to include("inqlude.org")
|
15
|
+
expect(Manifest.proprietary_release_schema_id).to include("proprietary")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "parses schema id" do
|
19
|
+
expect{Manifest.parse_schema_id("xxx")}.to raise_error StandardError
|
20
|
+
|
21
|
+
type, version = Manifest.parse_schema_id(
|
22
|
+
"http://inqlude.org/schema/release-manifest-v1#" )
|
23
|
+
expect(type).to eq "release"
|
24
|
+
expect(version).to eq 1
|
25
|
+
|
26
|
+
type, version = Manifest.parse_schema_id(
|
27
|
+
"http://inqlude.org/schema/release-manifest-v2#" )
|
28
|
+
expect(type).to eq "release"
|
29
|
+
expect(version).to eq 2
|
30
|
+
|
31
|
+
type, version = Manifest.parse_schema_id(
|
32
|
+
"http://inqlude.org/schema/generic-manifest-v1#" )
|
33
|
+
expect(type).to eq "generic"
|
34
|
+
expect(version).to eq 1
|
35
|
+
end
|
36
|
+
|
37
|
+
it "parses release manifest" do
|
38
|
+
filename = File.join settings.manifest_path, awesomelib_manifest_file
|
39
|
+
manifest = Manifest.parse_file filename
|
40
|
+
expect(manifest["name"]).to eq "awesomelib"
|
41
|
+
expect(manifest["version"]).to eq "0.2.0"
|
42
|
+
expect(manifest["filename"]).to eq "awesomelib.2013-09-08.manifest"
|
43
|
+
expect(manifest["libraryname"]).to eq "awesomelib"
|
44
|
+
expect(manifest["schema_type"]).to eq "release"
|
45
|
+
expect(manifest["schema_version"]).to eq 1
|
46
|
+
end
|
47
|
+
|
48
|
+
it "parses generic manifest" do
|
49
|
+
filename = File.join settings.manifest_path, newlib_manifest_file
|
50
|
+
manifest = Manifest.parse_file filename
|
51
|
+
expect(manifest["name"]).to eq "newlib"
|
52
|
+
expect(manifest.has_key? "version").to eq false
|
53
|
+
expect(manifest["filename"]).to eq "newlib.manifest"
|
54
|
+
expect(manifest["schema_type"]).to eq "generic"
|
55
|
+
expect(manifest["schema_version"]).to eq 1
|
56
|
+
end
|
57
|
+
|
58
|
+
it "writes JSON" do
|
59
|
+
filename = File.join settings.manifest_path, awesomelib_manifest_file
|
60
|
+
manifest = Manifest.parse_file filename
|
61
|
+
expect( Manifest.to_json( manifest ) ).to eq File.read( filename )
|
62
|
+
end
|
63
|
+
end
|
@@ -4,8 +4,8 @@ describe RpmManifestizer do
|
|
4
4
|
|
5
5
|
it "detects libraries" do
|
6
6
|
m = RpmManifestizer.new Settings.new
|
7
|
-
m.is_library?( "libjson" ).
|
8
|
-
m.is_library?( "kontact" ).
|
7
|
+
expect(m.is_library?( "libjson" )).to be true
|
8
|
+
expect(m.is_library?( "kontact" )).to be false
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
data/spec/settings_spec.rb
CHANGED
@@ -2,14 +2,63 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe Settings do
|
4
4
|
|
5
|
-
|
6
|
-
Settings.new.manifest_path.should == File.join( ENV["HOME"], ".inqlude/manifests" )
|
7
|
-
end
|
5
|
+
include GivenFilesystemSpecHelpers
|
8
6
|
|
9
7
|
it "lets manifest path to be set" do
|
10
8
|
s = Settings.new
|
11
9
|
s.manifest_path = "abc/xyz"
|
12
|
-
s.manifest_path.
|
10
|
+
expect(s.manifest_path).to eq "abc/xyz"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has default xdg data path" do
|
14
|
+
s = Settings.new
|
15
|
+
expected_path = File.join(ENV["HOME"], ".local/share/inqlude")
|
16
|
+
received_path = s.xdg_data_path.to_s
|
17
|
+
expect(received_path).to eq expected_path
|
18
|
+
end
|
19
|
+
|
20
|
+
it "has default xdg cache path" do
|
21
|
+
s = Settings.new
|
22
|
+
expected_path = File.join(ENV["HOME"], ".cache/inqlude")
|
23
|
+
received_path = s.xdg_cache_path.to_s
|
24
|
+
expect(received_path).to eq expected_path
|
25
|
+
end
|
26
|
+
|
27
|
+
it "has default manifest path" do
|
28
|
+
expect(Settings.new.manifest_path).to eq(
|
29
|
+
File.join( ENV["HOME"], ".local/share/inqlude/manifests"))
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
context "fake HOME" do
|
34
|
+
use_given_filesystem
|
35
|
+
|
36
|
+
before(:each) do
|
37
|
+
@old_home = ENV["HOME"]
|
38
|
+
|
39
|
+
@home = given_directory
|
40
|
+
ENV["HOME"] = @home
|
41
|
+
end
|
42
|
+
|
43
|
+
after(:each) do
|
44
|
+
ENV["HOME"] = @old_home
|
45
|
+
end
|
46
|
+
|
47
|
+
it "creates manifest dir" do
|
48
|
+
s = Settings.new
|
49
|
+
|
50
|
+
expect(s.manifest_dir).to eq File.join(@home,
|
51
|
+
".local/share/inqlude/manifests")
|
52
|
+
expect(File.exist?(s.manifest_dir)).to be true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "creates cache dir" do
|
56
|
+
s = Settings.new
|
57
|
+
|
58
|
+
expect(s.cache_dir).to eq File.join(@home,
|
59
|
+
".cache/inqlude")
|
60
|
+
expect(File.exist?(s.cache_dir)).to be true
|
61
|
+
end
|
13
62
|
end
|
14
63
|
|
15
64
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,48 @@
|
|
1
|
+
require 'given_filesystem/spec_helpers'
|
2
|
+
|
1
3
|
require File.expand_path('../../lib/inqlude', __FILE__)
|
2
4
|
|
3
|
-
def
|
5
|
+
def test_data_path file_name
|
6
|
+
File.expand_path(File.join('../data/', file_name), __FILE__)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_manifest name, release_date, version
|
4
10
|
m = Hash.new
|
11
|
+
m["schema_type"] = "release"
|
5
12
|
m["name"] = name
|
6
13
|
m["version"] = version
|
14
|
+
m["release_date" ] = release_date
|
15
|
+
m["description"] = "#{name} is a nice library."
|
16
|
+
m
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_generic_manifest name
|
20
|
+
m = Hash.new
|
21
|
+
m["schema_type"] = "generic"
|
22
|
+
m["name"] = name
|
7
23
|
m["description"] = "#{name} is a nice library."
|
8
24
|
m
|
9
25
|
end
|
26
|
+
|
27
|
+
shared_context "manifest_files" do
|
28
|
+
|
29
|
+
let(:settings) do
|
30
|
+
s = Settings.new
|
31
|
+
s.manifest_path = File.expand_path('spec/data/')
|
32
|
+
s.offline = true
|
33
|
+
s
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:awesomelib_manifest_file) do
|
37
|
+
"awesomelib/awesomelib.2013-09-08.manifest"
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:newlib_manifest_file) do
|
41
|
+
"newlib/newlib.manifest"
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:proprietarylib_manifest_file) do
|
45
|
+
"proprietarylib/proprietarylib.2013-12-22.manifest"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/spec/verifier_spec.rb
CHANGED
@@ -2,33 +2,28 @@ require File.expand_path('../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe Verifier do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
s.manifest_path = File.expand_path('spec/data/')
|
8
|
-
s.offline = true
|
9
|
-
s
|
10
|
-
end
|
11
|
-
|
5
|
+
include_context "manifest_files"
|
6
|
+
|
12
7
|
it "defines result class" do
|
13
8
|
r = Verifier::Result.new
|
14
|
-
r.valid
|
15
|
-
r.errors.class.
|
9
|
+
expect(r.valid?).to be false
|
10
|
+
expect(r.errors.class).to be Array
|
16
11
|
end
|
17
12
|
|
18
13
|
it "verifies read manifests" do
|
19
14
|
handler = ManifestHandler.new settings
|
20
15
|
handler.read_remote
|
21
|
-
|
16
|
+
|
22
17
|
verifier = Verifier.new settings
|
23
|
-
verifier.verify( handler.manifest("awesomelib") ).class.
|
24
|
-
verifier.verify( handler.manifest("awesomelib") ).valid
|
18
|
+
expect(verifier.verify( handler.manifest("awesomelib") ).class).to be Verifier::Result
|
19
|
+
expect(verifier.verify( handler.manifest("awesomelib") ).valid?).to be true
|
25
20
|
end
|
26
21
|
|
27
22
|
it "detects incomplete manifest" do
|
28
23
|
verifier = Verifier.new settings
|
29
24
|
|
30
25
|
manifest = Hash.new
|
31
|
-
verifier.verify( manifest ).valid
|
26
|
+
expect(verifier.verify( manifest ).valid?).to be false
|
32
27
|
end
|
33
28
|
|
34
29
|
it "detects invalid entries" do
|
@@ -37,11 +32,11 @@ describe Verifier do
|
|
37
32
|
verifier = Verifier.new settings
|
38
33
|
|
39
34
|
manifest = handler.manifest("awesomelib")
|
40
|
-
verifier.verify(manifest).valid
|
35
|
+
expect(verifier.verify(manifest).valid?).to be true
|
41
36
|
|
42
37
|
manifest["invalidentry"] = "something"
|
43
|
-
verifier.verify(manifest).valid
|
44
|
-
verifier.verify(manifest).errors.count.
|
38
|
+
expect(verifier.verify(manifest).valid?).to be false
|
39
|
+
expect(verifier.verify(manifest).errors.count).to eq 1
|
45
40
|
end
|
46
41
|
|
47
42
|
it "detects name mismatch" do
|
@@ -50,19 +45,55 @@ describe Verifier do
|
|
50
45
|
verifier = Verifier.new settings
|
51
46
|
|
52
47
|
manifest = handler.manifest("awesomelib")
|
53
|
-
verifier.verify(manifest).valid
|
48
|
+
expect(verifier.verify(manifest).valid?).to be true
|
54
49
|
|
55
50
|
manifest["filename"] = "wrongname"
|
56
|
-
verifier.verify(manifest).valid
|
51
|
+
expect(verifier.verify(manifest).valid?).to be false
|
52
|
+
end
|
53
|
+
|
54
|
+
it "verifies release manifest file" do
|
55
|
+
filename = File.join settings.manifest_path, awesomelib_manifest_file
|
56
|
+
|
57
|
+
verifier = Verifier.new settings
|
58
|
+
|
59
|
+
expect( verifier.verify_file( filename ).valid? ).to be true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "verifies generic manifest file" do
|
63
|
+
filename = File.join settings.manifest_path, newlib_manifest_file
|
64
|
+
|
65
|
+
verifier = Verifier.new settings
|
66
|
+
|
67
|
+
verification_result = verifier.verify_file( filename )
|
68
|
+
expect( verification_result.valid? ).to be true
|
57
69
|
end
|
70
|
+
|
71
|
+
it "verifies proprietary release manifest file" do
|
72
|
+
filename = File.join settings.manifest_path, proprietarylib_manifest_file
|
73
|
+
|
74
|
+
verifier = Verifier.new settings
|
58
75
|
|
59
|
-
|
60
|
-
|
61
|
-
|
76
|
+
verification_result = verifier.verify_file( filename )
|
77
|
+
expect( verification_result.valid? ).to be true
|
78
|
+
end
|
79
|
+
|
80
|
+
it "verifies schema" do
|
81
|
+
manifest = Hash.new
|
82
|
+
manifest["name"] = "mylib"
|
83
|
+
manifest["release_date"] = "2013-02-28"
|
84
|
+
manifest["filename"] = "mylib.2013-02-28.manifest"
|
85
|
+
manifest["libraryname"] = "mylib"
|
86
|
+
manifest["$schema"] = "http://inqlude.org/schema/release-manifest-v1#"
|
87
|
+
manifest["schema_type"] = "release"
|
88
|
+
manifest["schema_version"] = 1
|
62
89
|
|
63
90
|
verifier = Verifier.new settings
|
91
|
+
|
92
|
+
errors = verifier.verify(manifest).errors
|
64
93
|
|
65
|
-
expect(
|
94
|
+
expect( errors.class ).to be Array
|
95
|
+
expect(errors[0]).to match /^Schema validation error/
|
96
|
+
expect(errors.count).to eq 8
|
66
97
|
end
|
67
98
|
|
68
99
|
end
|