inqlude 0.7.4 → 0.8.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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -0
  3. data/CHANGELOG.md +7 -0
  4. data/README.md +2 -0
  5. data/bin/inqlude +0 -6
  6. data/lib/cli.rb +18 -8
  7. data/lib/manifest.rb +1 -0
  8. data/lib/verifier.rb +23 -1
  9. data/lib/version.rb +1 -1
  10. data/manifest-format.md +12 -15
  11. data/schema/generic-manifest-v1 +7 -0
  12. data/schema/proprietary-release-manifest-v1 +7 -0
  13. data/schema/release-manifest-v1 +7 -0
  14. data/spec/data/inqlude-all.json +6 -0
  15. data/spec/data/{awesomelib → manifests/awesomelib}/awesomelib.2013-09-08.manifest +3 -0
  16. data/spec/data/{bleedingedge → manifests/bleedingedge}/bleedingedge.2012-01-01.manifest +0 -0
  17. data/spec/data/{commercial → manifests/commercial}/commercial.manifest +0 -0
  18. data/spec/data/{newlib → manifests/newlib}/newlib.manifest +3 -0
  19. data/spec/data/{proprietarylib → manifests/proprietarylib}/proprietarylib.2013-12-22.manifest +0 -0
  20. data/spec/data/missing-topics/miss-topics/miss-topics.manifest +20 -0
  21. data/spec/data/missing-topics/no-topics/no-topics.manifest +20 -0
  22. data/spec/integration/cli_general_spec.rb +1 -3
  23. data/spec/integration/cli_list_spec.rb +2 -2
  24. data/spec/integration/cli_verify_spec.rb +44 -7
  25. data/spec/integration/cli_view_spec.rb +2 -2
  26. data/spec/unit/creator_spec.rb +12 -12
  27. data/spec/unit/kde_frameworks_release_spec.rb +11 -11
  28. data/spec/unit/manifest_handler_spec.rb +18 -18
  29. data/spec/unit/spec_helper.rb +1 -3
  30. data/spec/unit/verifier_spec.rb +165 -16
  31. data/topics/README.md +11 -0
  32. data/topics/list_topics +11 -0
  33. data/topics/list_topics.rb +28 -0
  34. data/topics/list_topics_spec.rb +32 -0
  35. data/topics/topics-test.csv +5 -0
  36. data/topics/topics.csv +202 -0
  37. data/view/contribute.html.haml +3 -1
  38. metadata +16 -8
@@ -10,8 +10,8 @@ describe "Command line interface" do
10
10
  describe "view" do
11
11
  it "generates view" do
12
12
  dir = given_directory do
13
- given_directory_from_data("awesomelib")
14
- given_directory_from_data("newlib")
13
+ given_directory_from_data("awesomelib", from: "manifests/awesomelib")
14
+ given_directory_from_data("newlib", from: "manifests/newlib")
15
15
  end
16
16
 
17
17
  output_dir = given_directory
@@ -3,12 +3,12 @@ require File.expand_path('../spec_helper', __FILE__)
3
3
  describe Creator do
4
4
 
5
5
  include GivenFilesystemSpecHelpers
6
-
6
+
7
7
  use_given_filesystem
8
8
 
9
9
  let(:settings) do
10
10
  s = Settings.new
11
- s.manifest_path = File.expand_path('spec/data/')
11
+ s.manifest_path = File.expand_path('spec/data/manifests')
12
12
  s.offline = true
13
13
  s
14
14
  end
@@ -25,12 +25,12 @@ describe Creator do
25
25
  settings.manifest_path = given_directory do
26
26
  given_directory "awesomelib" do
27
27
  manifest_filename = given_file "awesomelib.2013-09-08.manifest",
28
- :from => "awesomelib/awesomelib.2013-09-08.manifest"
28
+ :from => "manifests/awesomelib/awesomelib.2013-09-08.manifest"
29
29
  end
30
30
  end
31
31
  manifest_filename = File.join( settings.manifest_path, "awesomelib",
32
32
  "awesomelib.2013-10-01.manifest" )
33
-
33
+
34
34
  c = Creator.new settings, "awesomelib"
35
35
 
36
36
  expect( File.exists?(manifest_filename) ).to be false
@@ -61,9 +61,9 @@ describe Creator do
61
61
 
62
62
  c = Creator.new settings, "newawesomelib"
63
63
  expect(File.exists?(manifest_filename)).to be false
64
-
64
+
65
65
  c.create "edge", "2013-09-01"
66
-
66
+
67
67
  expect(File.exists?(manifest_filename)).to be true
68
68
 
69
69
  m = Manifest.parse_file(manifest_filename)
@@ -82,19 +82,19 @@ describe Creator do
82
82
 
83
83
  c = Creator.new settings, "newawesomelib"
84
84
  expect(File.exists?(manifest_filename)).to be false
85
-
85
+
86
86
  c.create_generic
87
-
87
+
88
88
  expect(File.exists?(manifest_filename)).to be true
89
89
  end
90
-
90
+
91
91
  describe "#create_dir" do
92
92
 
93
93
  before(:each) do
94
94
  @settings = Settings.new
95
95
  @settings.manifest_path = given_directory
96
96
  end
97
-
97
+
98
98
  it "creates dir" do
99
99
  c = Creator.new( @settings, "one" )
100
100
  c.create_dir()
@@ -103,7 +103,7 @@ describe Creator do
103
103
  expect( File.directory? File.join( @settings.manifest_path, "one" ) )
104
104
  .to be true
105
105
  end
106
-
106
+
107
107
  it "uses existing dir" do
108
108
  c = Creator.new( @settings, "one" )
109
109
  c.create_dir()
@@ -114,5 +114,5 @@ describe Creator do
114
114
  .to be true
115
115
  end
116
116
  end
117
-
117
+
118
118
  end
@@ -1,11 +1,11 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe KdeFrameworksRelease do
4
-
4
+
5
5
  include GivenFilesystemSpecHelpers
6
6
 
7
7
  use_given_filesystem
8
-
8
+
9
9
  context "given KDE generic manifests" do
10
10
  before(:each) do
11
11
  @manifest_dir = given_directory do
@@ -16,31 +16,31 @@ describe KdeFrameworksRelease do
16
16
  given_file("kservice.manifest", :from => "kservice-generic.manifest")
17
17
  end
18
18
  given_directory("newlib") do
19
- given_file("newlib.manifest", :from => "newlib/newlib.manifest")
19
+ given_file("newlib.manifest", :from => "manifests/newlib/newlib.manifest")
20
20
  end
21
21
  end
22
-
22
+
23
23
  s = Settings.new
24
24
  s.manifest_path = @manifest_dir
25
25
  s.offline = true
26
26
  @manifest_handler = ManifestHandler.new s
27
27
  end
28
-
28
+
29
29
  it "reads generic manifests" do
30
30
  k = KdeFrameworksRelease.new @manifest_handler
31
31
  k.read_generic_manifests
32
-
32
+
33
33
  expect( k.generic_manifests.count ).to eq 2
34
34
  expect( k.generic_manifests[0].name ).to eq "karchive"
35
35
  expect( k.generic_manifests[1].name ).to eq "kservice"
36
36
  end
37
-
37
+
38
38
  it "writes release manifests" do
39
39
  k = KdeFrameworksRelease.new @manifest_handler
40
40
  k.read_generic_manifests
41
-
41
+
42
42
  k.write_release_manifests( "2014-02-01", "4.9.90" )
43
-
43
+
44
44
  manifest_path = File.join( @manifest_dir,
45
45
  "karchive/karchive.2014-02-01.manifest" )
46
46
  expect( File.exists? manifest_path ).to be true
@@ -48,7 +48,7 @@ describe KdeFrameworksRelease do
48
48
  manifest_path = File.join( @manifest_dir,
49
49
  "kservice/kservice.2014-02-01.manifest" )
50
50
  expect( File.exists? manifest_path ).to be true
51
-
51
+
52
52
  manifest = Manifest.parse_file( manifest_path )
53
53
  expect(manifest.class).to be ManifestRelease
54
54
  expect( manifest.name ).to eq "kservice"
@@ -72,5 +72,5 @@ describe KdeFrameworksRelease do
72
72
  it "strips patch release" do
73
73
  expect(KdeFrameworksRelease.strip_patch_release("5.4.0")).to eq "5.4"
74
74
  end
75
-
75
+
76
76
  end
@@ -6,17 +6,17 @@ describe ManifestHandler do
6
6
 
7
7
  let(:settings) do
8
8
  s = Settings.new
9
- s.manifest_path = File.expand_path('spec/data/')
9
+ s.manifest_path = File.expand_path('spec/data/manifests')
10
10
  s.offline = true
11
11
  s
12
12
  end
13
-
13
+
14
14
  let(:mh) do
15
15
  mh = ManifestHandler.new settings
16
16
  mh.read_remote
17
17
  mh
18
18
  end
19
-
19
+
20
20
  it "reads manifests" do
21
21
  expect(mh.manifests.count).to eq 5
22
22
  expect(mh.libraries.count).to eq 5
@@ -53,33 +53,33 @@ describe ManifestHandler do
53
53
  File.expand_path( "~/.local/share/inqlude/manifests/mylib/mylib.2014-02-01.manifest" ) )
54
54
  end
55
55
  end
56
-
56
+
57
57
  describe "#libraries" do
58
58
 
59
59
  it "returns all libraries" do
60
60
  expect( mh.libraries.count ).to eq 5
61
61
  end
62
-
62
+
63
63
  it "returns stable libraries" do
64
64
  libraries = mh.libraries :stable
65
65
  expect( libraries.count ).to eq 2
66
66
  expect( libraries.first.manifests.last.name ).to eq "awesomelib"
67
67
  expect( libraries.first.manifests.last.version ).to eq "0.2.0"
68
68
  end
69
-
69
+
70
70
  it "returns development versions" do
71
71
  libraries = mh.libraries :edge
72
72
  expect( libraries.count ).to eq 1
73
73
  expect( libraries.first.manifests.last.name ).to eq "bleedingedge"
74
74
  expect( libraries.first.manifests.last.version ).to eq "edge"
75
75
  end
76
-
76
+
77
77
  it "returns unreleased libraries" do
78
78
  libraries = mh.unreleased_libraries
79
79
  expect( libraries.count ).to eq 1
80
80
  expect( libraries.first.manifests.last.name ).to eq "newlib"
81
81
  end
82
-
82
+
83
83
  it "returns commercial libraries" do
84
84
  libraries = mh.commercial_libraries
85
85
  expect( libraries.count ).to eq 3
@@ -88,7 +88,7 @@ describe ManifestHandler do
88
88
  end
89
89
 
90
90
  end
91
-
91
+
92
92
  describe "#group" do
93
93
  it "returns all libraries of a group" do
94
94
  libraries = mh.group("kde-frameworks")
@@ -96,16 +96,16 @@ describe ManifestHandler do
96
96
  expect( libraries.first.manifests.last.name ).to eq "awesomelib"
97
97
  end
98
98
  end
99
-
99
+
100
100
  describe "#library" do
101
-
101
+
102
102
  it "returns one library" do
103
103
  library = mh.library "awesomelib"
104
104
  expect( library.name ).to eq "awesomelib"
105
105
  end
106
-
106
+
107
107
  end
108
-
108
+
109
109
  context "library with generic and release manifest" do
110
110
  use_given_filesystem
111
111
 
@@ -116,34 +116,34 @@ describe ManifestHandler do
116
116
  given_file "karchive.2014-02-01.manifest", :from => "karchive-release-beta.manifest"
117
117
  end
118
118
  end
119
-
119
+
120
120
  s = Settings.new
121
121
  s.manifest_path = @manifest_path
122
122
  s.offline = true
123
123
  @manifest_handler = ManifestHandler.new s
124
124
  @manifest_handler.read_remote
125
125
  end
126
-
126
+
127
127
  it "reads generic manifest" do
128
128
  expect( @manifest_handler.library("karchive").manifests.count ).to eq 2
129
129
  generic_manifest = @manifest_handler.library("karchive").generic_manifest
130
130
  expect( generic_manifest.name ).to eq "karchive"
131
131
  expect( generic_manifest.class ).to be ManifestGeneric
132
132
  end
133
-
133
+
134
134
  it "lists development versions" do
135
135
  libraries = @manifest_handler.libraries :beta
136
136
  expect( libraries.count ).to eq 1
137
137
  expect( libraries.first.latest_manifest.name ).to eq "karchive"
138
138
  expect( libraries.first.latest_manifest.version ).to eq "4.9.90"
139
139
  end
140
-
140
+
141
141
  it "lists unreleased libraries" do
142
142
  libraries = @manifest_handler.unreleased_libraries
143
143
  expect( libraries.count ).to eq 0
144
144
  end
145
145
  end
146
-
146
+
147
147
  it "generates inqlude-all.json" do
148
148
  expected_json = File.read(test_data_path("inqlude-all.json"))
149
149
  expect(mh.generate_inqlude_all).to eq expected_json
@@ -23,10 +23,9 @@ def create_generic_manifest name
23
23
  end
24
24
 
25
25
  shared_context "manifest_files" do
26
-
27
26
  let(:settings) do
28
27
  s = Settings.new
29
- s.manifest_path = File.expand_path('spec/data/')
28
+ s.manifest_path = File.expand_path('spec/data/manifests')
30
29
  s.offline = true
31
30
  s
32
31
  end
@@ -42,5 +41,4 @@ shared_context "manifest_files" do
42
41
  let(:proprietarylib_manifest_file) do
43
42
  "proprietarylib/proprietarylib.2013-12-22.manifest"
44
43
  end
45
-
46
44
  end
@@ -3,13 +3,126 @@ require File.expand_path('../spec_helper', __FILE__)
3
3
  describe Verifier do
4
4
 
5
5
  include_context "manifest_files"
6
-
7
- it "defines result class" do
8
- r = Verifier::Result.new
9
- expect(r.valid?).to be true
10
- expect(r.errors.class).to be Array
6
+
7
+ describe Verifier::Result do
8
+ it "defines result class" do
9
+ expect(subject.valid?).to be true
10
+ expect(subject.errors.class).to be Array
11
+ end
12
+
13
+ context "no errors" do
14
+ before do
15
+ subject.name = "abc"
16
+ end
17
+
18
+ it "is valid" do
19
+ expect(subject.valid?).to be true
20
+ end
21
+
22
+ it "prints result" do
23
+ expected_output = <<EOT
24
+ Verify manifest abc...ok
25
+ EOT
26
+
27
+ expect {
28
+ subject.print_result
29
+ }.to output(expected_output).to_stdout
30
+ end
31
+ end
32
+
33
+ context "one error" do
34
+ before do
35
+ subject.name = "abc"
36
+ subject.errors.push("an error")
37
+ end
38
+
39
+ it "is invalid" do
40
+ expect(subject.valid?).to be false
41
+ end
42
+
43
+ it "prints result" do
44
+ expected_output = <<EOT
45
+ Verify manifest abc...error
46
+ an error
47
+ EOT
48
+
49
+ expect {
50
+ subject.print_result
51
+ }.to output(expected_output).to_stdout
52
+ end
53
+ end
54
+
55
+ context "multiple errors" do
56
+ before do
57
+ subject.name = "abc"
58
+ subject.errors.push("an error")
59
+ subject.errors.push("another error")
60
+ end
61
+
62
+ it "is invalid" do
63
+ expect(subject.valid?).to be false
64
+ end
65
+
66
+ it "prints result" do
67
+ expected_output = <<EOT
68
+ Verify manifest abc...error
69
+ an error
70
+ another error
71
+ EOT
72
+
73
+ expect {
74
+ subject.print_result
75
+ }.to output(expected_output).to_stdout
76
+ end
77
+ end
78
+
79
+ context "one warning" do
80
+ before do
81
+ subject.name = "xyz"
82
+ subject.warnings.push("a warning")
83
+ end
84
+
85
+ it "has warning" do
86
+ expect(subject.has_warnings?).to be true
87
+ end
88
+
89
+ it "prints warning" do
90
+ expected_output = <<EOT
91
+ Verify manifest xyz...ok
92
+ a warning
93
+ EOT
94
+
95
+ expect {
96
+ subject.print_result
97
+ }.to output(expected_output).to_stdout
98
+ end
99
+ end
100
+
101
+ context "multiple warnings" do
102
+ before do
103
+ subject.name = "xyz"
104
+ subject.warnings.push("a warning")
105
+ subject.warnings.push("another warning")
106
+ end
107
+
108
+ it "has warning" do
109
+ expect(subject.has_warnings?).to be true
110
+ end
111
+
112
+ it "prints warning" do
113
+ expected_output = <<EOT
114
+ Verify manifest xyz...ok
115
+ a warning
116
+ another warning
117
+ EOT
118
+
119
+ expect {
120
+ subject.print_result
121
+ }.to output(expected_output).to_stdout
122
+ end
123
+ end
11
124
  end
12
-
125
+
13
126
  it "verifies read manifests" do
14
127
  handler = ManifestHandler.new settings
15
128
  handler.read_remote
@@ -25,7 +138,7 @@ describe Verifier do
25
138
  manifest = ManifestRelease.new
26
139
  expect(verifier.verify( manifest ).valid?).to be false
27
140
  end
28
-
141
+
29
142
  it "detects invalid entries" do
30
143
  handler = ManifestHandler.new settings
31
144
  handler.read_remote
@@ -45,7 +158,7 @@ describe Verifier do
45
158
 
46
159
  manifest = handler.manifest("awesomelib")
47
160
  expect(verifier.verify(manifest).valid?).to be true
48
-
161
+
49
162
  manifest.filename = "wrongname"
50
163
 
51
164
  result = verifier.verify(manifest)
@@ -54,9 +167,45 @@ describe Verifier do
54
167
  expect(result.errors.first).to eq "Expected file name: awesomelib.2013-09-08.manifest"
55
168
  end
56
169
 
170
+ context "one invalid topic" do
171
+ it "detects invalid topics" do
172
+ handler = ManifestHandler.new settings
173
+ handler.read_remote
174
+ verifier = Verifier.new settings
175
+
176
+ manifest = handler.manifest("awesomelib")
177
+ expect(verifier.verify(manifest).valid?).to be true
178
+
179
+ manifest.topics = ["Invalid"]
180
+
181
+ result = verifier.verify(manifest)
182
+
183
+ expect(result.valid?).to be false
184
+ expect(result.errors).to include "Invalid topics 'Invalid'. Valid topics are 'API', 'Artwork', 'Bindings', 'Communication', 'Data', 'Desktop', 'Development', 'Graphics', 'Logging', 'Mobile', 'Multimedia', 'Printing', 'QML', 'Scripting', 'Security', 'Text', 'Web', 'Widgets'"
185
+ end
186
+ end
187
+
188
+ context "multiple invalid topics" do
189
+ it "detects invalid topics" do
190
+ handler = ManifestHandler.new settings
191
+ handler.read_remote
192
+ verifier = Verifier.new settings
193
+
194
+ manifest = handler.manifest("awesomelib")
195
+ expect(verifier.verify(manifest).valid?).to be true
196
+
197
+ manifest.topics = ["API","Invalid1","Invalid2"]
198
+
199
+ result = verifier.verify(manifest)
200
+
201
+ expect(result.valid?).to be false
202
+ expect(result.errors).to include "Invalid topics 'Invalid1', 'Invalid2'. Valid topics are 'API', 'Artwork', 'Bindings', 'Communication', 'Data', 'Desktop', 'Development', 'Graphics', 'Logging', 'Mobile', 'Multimedia', 'Printing', 'QML', 'Scripting', 'Security', 'Text', 'Web', 'Widgets'"
203
+ end
204
+ end
205
+
57
206
  it "verifies release manifest file" do
58
207
  filename = File.join settings.manifest_path, awesomelib_manifest_file
59
-
208
+
60
209
  verifier = Verifier.new settings
61
210
 
62
211
  expect( verifier.verify_file( filename ).valid? ).to be true
@@ -64,16 +213,16 @@ describe Verifier do
64
213
 
65
214
  it "verifies generic manifest file" do
66
215
  filename = File.join settings.manifest_path, newlib_manifest_file
67
-
216
+
68
217
  verifier = Verifier.new settings
69
218
 
70
219
  verification_result = verifier.verify_file( filename )
71
220
  expect( verification_result.valid? ).to be true
72
221
  end
73
-
222
+
74
223
  it "verifies proprietary release manifest file" do
75
224
  filename = File.join settings.manifest_path, proprietarylib_manifest_file
76
-
225
+
77
226
  verifier = Verifier.new settings
78
227
 
79
228
  verification_result = verifier.verify_file( filename )
@@ -88,21 +237,21 @@ describe Verifier do
88
237
  verification_result = verifier.verify_file( filename )
89
238
  expect( verification_result.valid? ).to be false
90
239
  end
91
-
240
+
92
241
  it "verifies schema" do
93
242
  manifest = ManifestRelease.new
94
243
  manifest.name = "mylib"
95
244
  manifest.release_date = "2013-02-28"
96
245
  manifest.filename = "mylib.2013-02-28.manifest"
97
246
  manifest.libraryname = "mylib"
98
-
247
+
99
248
  verifier = Verifier.new settings
100
-
249
+
101
250
  errors = verifier.verify(manifest).errors
102
251
 
103
252
  expect( errors.class ).to be Array
104
253
  expect(errors[0]).to match /^Schema validation error/
105
254
  expect(errors.count).to eq 8
106
255
  end
107
-
256
+
108
257
  end