inqlude 0.0.8 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +3 -0
  4. data/README +35 -1
  5. data/TODO +50 -15
  6. data/inqlude.gemspec +7 -2
  7. data/lib/cli.rb +70 -6
  8. data/lib/creator.rb +32 -8
  9. data/lib/git_hub_tool.rb +92 -0
  10. data/lib/inqlude.rb +7 -0
  11. data/lib/kde_frameworks_creator.rb +173 -0
  12. data/lib/kde_frameworks_release.rb +61 -0
  13. data/lib/library.rb +26 -1
  14. data/lib/manifest.rb +43 -0
  15. data/lib/manifest_handler.rb +59 -17
  16. data/lib/rpm_manifestizer.rb +2 -2
  17. data/lib/settings.rb +21 -10
  18. data/lib/verifier.rb +29 -18
  19. data/lib/version.rb +1 -1
  20. data/lib/view.rb +55 -10
  21. data/manifest-format.md +27 -12
  22. data/schema/generic-manifest-v1 +54 -0
  23. data/schema/proprietary-release-manifest-v1 +63 -0
  24. data/schema/release-manifest-v1 +73 -0
  25. data/spec/creator_spec.rb +94 -34
  26. data/spec/data/awesomelib/awesomelib.2013-09-08.manifest +14 -6
  27. data/spec/data/bleedingedge/bleedingedge.2012-01-01.manifest +3 -2
  28. data/spec/data/commercial/commercial.manifest +13 -0
  29. data/spec/data/karchive-generic.manifest +22 -0
  30. data/spec/data/karchive-release-beta.manifest +29 -0
  31. data/spec/data/karchive-release.manifest +29 -0
  32. data/spec/data/karchive-release2.manifest +29 -0
  33. data/spec/data/karchive.authors +10 -0
  34. data/spec/data/karchive.readme +35 -0
  35. data/spec/data/kservice-generic.manifest +22 -0
  36. data/spec/data/kservice.readme +9 -0
  37. data/spec/data/newlib/newlib.manifest +13 -0
  38. data/spec/data/proprietarylib/proprietarylib.2013-12-22.manifest +16 -0
  39. data/spec/data/rendertest-generic.manifest +20 -0
  40. data/spec/data/testcontent +1 -0
  41. data/spec/kde_frameworks_creator_spec.rb +263 -0
  42. data/spec/kde_frameworks_release_spec.rb +72 -0
  43. data/spec/library_spec.rb +54 -2
  44. data/spec/manifest_handler_spec.rb +102 -8
  45. data/spec/manifest_spec.rb +63 -0
  46. data/spec/rpm_manifestizer_spec.rb +2 -2
  47. data/spec/settings_spec.rb +53 -4
  48. data/spec/spec_helper.rb +40 -1
  49. data/spec/verifier_spec.rb +53 -22
  50. data/spec/view_spec.rb +145 -0
  51. data/view/all.html.haml +24 -0
  52. data/view/commercial.html.haml +17 -0
  53. data/view/contribute.html.haml +7 -3
  54. data/view/development.html.haml +36 -0
  55. data/view/favicon.ico +0 -0
  56. data/view/group.html.haml +20 -0
  57. data/view/index.html.haml +11 -1
  58. data/view/layout.html.haml +0 -5
  59. data/view/library.html.haml +4 -4
  60. data/view/public/inqlude.css +2 -2
  61. data/view/unreleased.html.haml +18 -0
  62. metadata +172 -97
  63. 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.should == 2
20
- mh.libraries.count.should == 2
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.should == 2
23
- mh.libraries.count.should == 2
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.should == Hash
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
- context "#libraries" do
57
+ describe "#libraries" do
32
58
 
33
59
  it "returns all libraries" do
34
- expect( mh.libraries.count ).to eq 2
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 1
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" ).should be_true
8
- m.is_library?( "kontact" ).should be_false
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
@@ -2,14 +2,63 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe Settings do
4
4
 
5
- it "has default manifest path" do
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.should == "abc/xyz"
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
@@ -1,9 +1,48 @@
1
+ require 'given_filesystem/spec_helpers'
2
+
1
3
  require File.expand_path('../../lib/inqlude', __FILE__)
2
4
 
3
- def create_manifest name, version
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
@@ -2,33 +2,28 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe Verifier do
4
4
 
5
- let(:settings) do
6
- s = Settings.new
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?.should be_false
15
- r.errors.class.should == Array
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.should == Verifier::Result
24
- verifier.verify( handler.manifest("awesomelib") ).valid?.should be_true
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?.should be_false
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?.should be_true
35
+ expect(verifier.verify(manifest).valid?).to be true
41
36
 
42
37
  manifest["invalidentry"] = "something"
43
- verifier.verify(manifest).valid?.should be_false
44
- verifier.verify(manifest).errors.count.should == 1
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?.should be_true
48
+ expect(verifier.verify(manifest).valid?).to be true
54
49
 
55
50
  manifest["filename"] = "wrongname"
56
- verifier.verify(manifest).valid?.should be_false
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
- it "verifies file" do
60
- filename = File.join settings.manifest_path,
61
- "awesomelib/awesomelib.2013-09-08.manifest"
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( verifier.verify_file( filename ).valid? ).to be_true
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