inqlude 0.0.8 → 0.7.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.
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