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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +7 -3
  4. data/CHANGELOG.md +9 -0
  5. data/Gemfile +4 -0
  6. data/README.md +4 -0
  7. data/lib/cli.rb +24 -26
  8. data/lib/cli_controller.rb +24 -0
  9. data/lib/inqlude.rb +1 -0
  10. data/lib/kde_frameworks_release.rb +6 -1
  11. data/lib/manifest_handler.rb +44 -1
  12. data/lib/verifier.rb +4 -0
  13. data/lib/version.rb +1 -1
  14. data/lib/view.rb +62 -15
  15. data/manifest-format.md +30 -5
  16. data/spec/data/inqlude-all.json +11 -2
  17. data/spec/data/manifests/awesomelib/awesomelib.2013-09-08.manifest +4 -2
  18. data/spec/data/manifests/bleedingedge/bleedingedge.2012-01-01.manifest +3 -0
  19. data/spec/data/manifests/commercial/commercial.manifest +3 -0
  20. data/spec/data/manifests/newlib/newlib.manifest +1 -0
  21. data/spec/data/missing-topics/miss-topics/miss-topics.manifest +2 -1
  22. data/spec/integration/cli_verify_spec.rb +2 -0
  23. data/spec/integration/cli_view_spec.rb +102 -0
  24. data/spec/integration/spec_helper.rb +3 -0
  25. data/spec/online/cli_view_spec.rb +64 -0
  26. data/spec/online/spec_helper.rb +5 -0
  27. data/spec/stubs/qmake/qmake +2 -0
  28. data/spec/unit/cli_controller_spec.rb +51 -0
  29. data/spec/unit/kde_frameworks_release_spec.rb +36 -23
  30. data/spec/unit/manifest_handler_spec.rb +15 -1
  31. data/spec/unit/manifest_spec.rb +1 -1
  32. data/spec/unit/spec_helper.rb +10 -0
  33. data/spec/unit/view_spec.rb +68 -0
  34. data/topics/Manifest_updater/README.md +19 -0
  35. data/topics/Manifest_updater/app.js +43 -0
  36. data/topics/Manifest_updater/manifests/example/example.manifest +20 -0
  37. data/topics/Manifest_updater/package.json +9 -0
  38. data/topics/Manifest_updater/topics.csv +1 -0
  39. data/topics/Manifest_updater/update_manifests/example/example.manifest +24 -0
  40. data/topics/topics.csv +3 -0
  41. data/view/{about.html.haml → one-column/about.html.haml} +0 -0
  42. data/view/{all.html.haml → one-column/all.html.haml} +0 -0
  43. data/view/{commercial.html.haml → one-column/commercial.html.haml} +0 -0
  44. data/view/{contribute.html.haml → one-column/contribute.html.haml} +0 -0
  45. data/view/{development.html.haml → one-column/development.html.haml} +0 -0
  46. data/view/{favicon.ico → one-column/favicon.ico} +0 -0
  47. data/view/{get.html.haml → one-column/get.html.haml} +0 -0
  48. data/view/{group.html.haml → one-column/group.html.haml} +0 -0
  49. data/view/{index.html.haml → one-column/index.html.haml} +0 -0
  50. data/view/{layout.html.haml → one-column/layout.html.haml} +0 -0
  51. data/view/{library.html.haml → one-column/library.html.haml} +1 -1
  52. data/view/{public → one-column/public}/inqlude.css +0 -0
  53. data/view/{search.html.haml → one-column/search.html.haml} +0 -0
  54. data/view/{unreleased.html.haml → one-column/unreleased.html.haml} +0 -0
  55. data/view/two-column/about.html.haml +34 -0
  56. data/view/two-column/all.html.haml +47 -0
  57. data/view/two-column/contribute.html.haml +49 -0
  58. data/view/two-column/favicon.ico +0 -0
  59. data/view/two-column/get.html.haml +57 -0
  60. data/view/two-column/group.html.haml +52 -0
  61. data/view/two-column/index.html.haml +194 -0
  62. data/view/two-column/ios.ico +0 -0
  63. data/view/two-column/layout.html.haml +102 -0
  64. data/view/two-column/library.html.haml +64 -0
  65. data/view/two-column/public/inqlude.css +265 -0
  66. data/view/two-column/search.html.haml +20 -0
  67. data/view/two-column/topic.html.haml +47 -0
  68. metadata +41 -16
@@ -1,9 +1,7 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe KdeFrameworksRelease do
4
-
5
4
  include GivenFilesystemSpecHelpers
6
-
7
5
  use_given_filesystem
8
6
 
9
7
  context "given KDE generic manifests" do
@@ -28,49 +26,64 @@ describe KdeFrameworksRelease do
28
26
 
29
27
  it "reads generic manifests" do
30
28
  k = KdeFrameworksRelease.new @manifest_handler
31
- k.read_generic_manifests
32
29
 
33
- expect( k.generic_manifests.count ).to eq 2
34
- expect( k.generic_manifests[0].name ).to eq "karchive"
35
- expect( k.generic_manifests[1].name ).to eq "kservice"
30
+ expected_output = <<EOT
31
+ Reading generic manifests from '#{@manifest_dir}'...
32
+ Read 2 manifests.
33
+ EOT
34
+
35
+ expect {
36
+ k.read_generic_manifests
37
+ }.to output(expected_output).to_stdout
38
+
39
+ expect(k.generic_manifests.count).to eq 2
40
+ expect(k.generic_manifests[0].name).to eq "karchive"
41
+ expect(k.generic_manifests[1].name).to eq "kservice"
36
42
  end
37
43
 
38
44
  it "writes release manifests" do
39
45
  k = KdeFrameworksRelease.new @manifest_handler
40
- k.read_generic_manifests
46
+ expect {
47
+ k.read_generic_manifests
48
+ }.to output.to_stdout
49
+
50
+ expected_output = <<EOT
51
+ Writing release manifests for version '4.9.90'...
52
+ #{@manifest_dir}/karchive/karchive.2014-02-01.manifest
53
+ #{@manifest_dir}/kservice/kservice.2014-02-01.manifest
54
+ Written 2 manifests.
55
+ EOT
41
56
 
42
- k.write_release_manifests( "2014-02-01", "4.9.90" )
57
+ expect {
58
+ k.write_release_manifests("2014-02-01", "4.9.90")
59
+ }.to output(expected_output).to_stdout
43
60
 
44
- manifest_path = File.join( @manifest_dir,
45
- "karchive/karchive.2014-02-01.manifest" )
46
- expect( File.exists? manifest_path ).to be true
61
+ manifest_path = File.join(@manifest_dir,"karchive/karchive.2014-02-01.manifest")
62
+ expect(File.exists? manifest_path).to be true
47
63
 
48
- manifest_path = File.join( @manifest_dir,
49
- "kservice/kservice.2014-02-01.manifest" )
50
- expect( File.exists? manifest_path ).to be true
64
+ manifest_path = File.join(@manifest_dir,"kservice/kservice.2014-02-01.manifest")
65
+ expect(File.exists? manifest_path).to be true
51
66
 
52
- manifest = Manifest.parse_file( manifest_path )
67
+ manifest = Manifest.parse_file(manifest_path)
53
68
  expect(manifest.class).to be ManifestRelease
54
- expect( manifest.name ).to eq "kservice"
55
- expect( manifest.version ).to eq "4.9.90"
56
- expect( manifest.release_date ).to eq "2014-02-01"
69
+ expect(manifest.name).to eq "kservice"
70
+ expect(manifest.version).to eq "4.9.90"
71
+ expect(manifest.release_date).to eq "2014-02-01"
57
72
  end
58
73
  end
59
74
 
60
75
  it "creates release manifest from generic manifest" do
61
- generic_manifest = Manifest.parse_file(
62
- given_file("karchive-generic.manifest") )
76
+ generic_manifest = Manifest.parse_file(given_file("karchive-generic.manifest"))
63
77
  date = "2014-11-06"
64
78
  version = "5.4.0"
65
79
  release_manifest = KdeFrameworksRelease.create_release_manifest(
66
80
  generic_manifest, date, version)
67
- expected_json = File.read( given_file("karchive-release-5.4.manifest") )
81
+ expected_json = File.read(given_file("karchive-release-5.4.manifest"))
68
82
  expected_json.chomp! # Remove newline added by File.read
69
- expect( release_manifest.to_json ).to eq expected_json
83
+ expect(release_manifest.to_json).to eq expected_json
70
84
  end
71
85
 
72
86
  it "strips patch release" do
73
87
  expect(KdeFrameworksRelease.strip_patch_release("5.4.0")).to eq "5.4"
74
88
  end
75
-
76
89
  end
@@ -87,6 +87,12 @@ describe ManifestHandler do
87
87
  expect( libraries[1].manifests.last.name ).to eq "commercial"
88
88
  end
89
89
 
90
+ it "returns latest libraries" do
91
+ libraries = mh.latest_libraries
92
+ expect(libraries.first.manifests.last.name).to eq "proprietarylib"
93
+ expect(libraries).not_to include "newlib"
94
+ end
95
+
90
96
  end
91
97
 
92
98
  describe "#group" do
@@ -97,6 +103,14 @@ describe ManifestHandler do
97
103
  end
98
104
  end
99
105
 
106
+ describe "#topic" do
107
+ it "returns all libraries of a topic" do
108
+ libraries = mh.topic("API")
109
+ expect( libraries.count ).to eq 2
110
+ expect( libraries.first.manifests.last.name ).to eq "awesomelib"
111
+ end
112
+ end
113
+
100
114
  describe "#library" do
101
115
 
102
116
  it "returns one library" do
@@ -145,7 +159,7 @@ describe ManifestHandler do
145
159
  end
146
160
 
147
161
  it "generates inqlude-all.json" do
148
- expected_json = File.read(test_data_path("inqlude-all.json"))
162
+ expected_json = File.read(test_data_path("inqlude-all.json")).chomp
149
163
  expect(mh.generate_inqlude_all).to eq expected_json
150
164
  end
151
165
  end
@@ -68,7 +68,7 @@ describe Manifest do
68
68
  it "writes JSON for release manifest" do
69
69
  filename = File.join settings.manifest_path, awesomelib_manifest_file
70
70
  manifest = Manifest.parse_file filename
71
- expect( manifest.to_json ).to eq File.read( filename )
71
+ expect( manifest.to_json ).to eq File.read( filename ).chomp
72
72
  end
73
73
 
74
74
  it "writes JSON for generic manifest" do
@@ -1,11 +1,21 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
1
4
  require 'given_filesystem/spec_helpers'
2
5
 
3
6
  require_relative "../../lib/inqlude"
4
7
 
8
+ require "nokogiri"
9
+ require "open-uri"
10
+
5
11
  def test_data_path file_name
6
12
  File.expand_path(File.join('../../data/', file_name), __FILE__)
7
13
  end
8
14
 
15
+ def stubs_path(context)
16
+ File.expand_path(File.join('../../stubs/', context), __FILE__)
17
+ end
18
+
9
19
  def create_manifest name, release_date, version
10
20
  m = ManifestRelease.new
11
21
  m.name = name
@@ -44,6 +44,15 @@ describe View do
44
44
  expect(v.commercial_libraries.count).to eq mh.commercial_libraries.count
45
45
  expect(v.commercial_libraries.first.name).to eq mh.commercial_libraries.first.name
46
46
  end
47
+
48
+ it "returns list of latest libraries" do
49
+ mh = ManifestHandler.new settings
50
+ mh.read_remote
51
+ v = View.new mh
52
+
53
+ expect(v.latest_libraries.count).to eq mh.latest_libraries.count
54
+ expect(v.latest_libraries.first.name).to eq mh.latest_libraries.first.name
55
+ end
47
56
 
48
57
  it "returns group" do
49
58
  mh = ManifestHandler.new settings
@@ -54,6 +63,15 @@ describe View do
54
63
  expect(v.group.count).to eq mh.group("kde-frameworks").count
55
64
  expect(v.group.first.name).to eq mh.group("kde-frameworks").first.name
56
65
  end
66
+
67
+ it "returns topic" do
68
+ mh = ManifestHandler.new settings
69
+ mh.read_remote
70
+ v = View.new mh
71
+
72
+ expect(v.topic("API").count).to eq 2
73
+ expect(v.topic("API").first.name).to eq 'awesomelib'
74
+ end
57
75
  end
58
76
 
59
77
  context "generic manifest and one release" do
@@ -173,4 +191,54 @@ EOT
173
191
  end
174
192
  end
175
193
 
194
+ context "templates" do
195
+ include_context "manifest_files"
196
+
197
+ include GivenFilesystemSpecHelpers
198
+
199
+ use_given_filesystem
200
+
201
+ before(:each) do
202
+ mh = ManifestHandler.new(settings)
203
+ mh.read_remote
204
+
205
+ v = View.new mh
206
+ v.templates = "one-column"
207
+
208
+ dir = given_directory
209
+
210
+ v.create(dir)
211
+ @path = File.join(dir, "index.html")
212
+ end
213
+
214
+ it "generates templates" do
215
+ expect(File.exists?(@path)).to be true
216
+ end
217
+
218
+ it "checks content" do
219
+ html_data = File.read(@path)
220
+
221
+ nokogiri_object = Nokogiri::HTML(html_data)
222
+ paragraphs_content = nokogiri_object.xpath("//p").to_s
223
+
224
+ expected_content =
225
+ '<p>
226
+ The goal of Inqlude is to provide a comprehensive listing of all
227
+ existing libraries for developers of Qt applications. If you are creating
228
+ applications using the <a href="http://qt-project.org">Qt toolkit</a>, and
229
+ are looking for libraries, components
230
+ or modules to use, Inqlude is the place where you find all information and
231
+ pointers to get started.
232
+ </p><p>
233
+ This is a young project, we are still collecting information, and are
234
+ building up the web site and the tools around it. If you would like to get
235
+ involved, read more about <a href="contribute.html">how to contribute</a>, or go
236
+ to the mailing list
237
+ <a href="https://mail.kde.org/mailman/listinfo/inqlude">inqlude.kde.org</a>
238
+ to directly talk to us. See you there.
239
+ </p>'
240
+
241
+ expect(paragraphs_content).to eq(expected_content)
242
+ end
243
+ end
176
244
  end
@@ -0,0 +1,19 @@
1
+ **This directory contains a node.js program to update the manifests with topics from
2
+ the file `topics.csv`.**
3
+
4
+ Follow the instructions given below to run the program.
5
+
6
+ * Install node.js and npm.
7
+ * Copy the library folders that contain the manifest files required to be updated
8
+ and paste them at `manifests` directory and `update_manifests` directory.
9
+ * Run `npm install` from this directory.
10
+ * Then run `node app.js` from this directory.
11
+ * You will find the updated manifests at `update_manifests` directory.
12
+
13
+
14
+ **Note:**
15
+ * You should have the `topics.csv` file in the same directory that contains `app.js`.
16
+ * Having the manifest files at `manifests` directory is adequate, but make sure that
17
+ you have the same library folder structure at both `manifests` directory and
18
+ `update_manifests` directory.
19
+ * Also make sure that you have the details for the required update activity at `topics.csv`.
@@ -0,0 +1,43 @@
1
+ var fs = require('fs');
2
+ var recursive = require('recursive-readdir');
3
+
4
+ var parse = require('csv-parse');
5
+ var csvAr;
6
+
7
+ var parser = parse({delimiter: ','}, function(err, data){
8
+ csvAr = data;
9
+ });
10
+
11
+ fs.createReadStream(__dirname+'/topics.csv').pipe(parser);
12
+
13
+ recursive('manifests', function (err, files) {
14
+ for (var i = files.length - 1; i >= 0; i--) {
15
+ var fi = files[i];
16
+ var data = fs.readFileSync(fi, 'utf8');
17
+ var manifest = JSON.parse(data);
18
+ var name = manifest.name;
19
+ var sel = csvAr.filter(function(d) {
20
+ return d[0] == name;
21
+ })[0];
22
+
23
+ if(!sel){
24
+ console.log(fi);
25
+ }
26
+ var sel1 = sel;
27
+
28
+ sel1 = sel.slice(1);
29
+ for (var j = 0; j < sel1.length ; j++) {
30
+ if(sel1[j] === ''){
31
+ sel1 = sel1.slice(0,j);
32
+ break;
33
+ }
34
+ }
35
+
36
+ manifest.topics = sel1;
37
+ var data1 = JSON.stringify(manifest, null, 2) + '\n';
38
+
39
+ var fi2 = 'update_'+ fi;
40
+ fs.writeFileSync(fi2, data1);
41
+ }
42
+ });
43
+
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://inqlude.org/schema/generic-manifest-v1#",
3
+ "name": "example",
4
+ "summary": "An example library",
5
+ "urls": {
6
+ "homepage": "http://example.org",
7
+ "download": "http://example.org/download"
8
+ },
9
+ "licenses": [
10
+ "GPLv3"
11
+ ],
12
+ "description": "This is an example library",
13
+ "authors": [
14
+ "Nanduni Nimalsiri <nandunibw@gmail.com>"
15
+ ],
16
+ "platforms": [
17
+ "Linux",
18
+ "Windows"
19
+ ]
20
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "Nanduni",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "dependencies": {
6
+ "csv-parse": "^1.1.3",
7
+ "recursive-readdir": "^2.0.0"
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ example,API,QML,
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://inqlude.org/schema/generic-manifest-v1#",
3
+ "name": "example",
4
+ "summary": "An example library",
5
+ "urls": {
6
+ "homepage": "http://example.org",
7
+ "download": "http://example.org/download"
8
+ },
9
+ "licenses": [
10
+ "GPLv3"
11
+ ],
12
+ "description": "This is an example library",
13
+ "authors": [
14
+ "Nanduni Nimalsiri <nandunibw@gmail.com>"
15
+ ],
16
+ "platforms": [
17
+ "Linux",
18
+ "Windows"
19
+ ],
20
+ "topics": [
21
+ "API",
22
+ "QML"
23
+ ]
24
+ }
@@ -100,6 +100,7 @@ libqtlua,Scripting,,
100
100
  libqxt,Development,Widgets,
101
101
  libsystemd-qt,Bindings,,
102
102
  libtmdbqt,API,Data,
103
+ limereport,Printing,,
103
104
  log4qt,Development,Logging,
104
105
  log4qt-fork,Development,Logging,
105
106
  lxqt_wallet,Security,,
@@ -168,9 +169,11 @@ qtoptimization,Development,,
168
169
  qtorm,Web,Data,
169
170
  qtrest,Communication,API,
170
171
  qtrpt,Printing,,
172
+ qtsharp,Development,,
171
173
  qtspeech,Bindings,Multimedia,
172
174
  qtuio,Mobile,,
173
175
  qtuiotouch,Mobile,,
176
+ qtunits,Data,,
174
177
  qtvkontakte,Mobile,,
175
178
  qtwebapp,Web,,
176
179
  qtwebkit,Web,,
@@ -10,7 +10,7 @@
10
10
  = list_attribute "platforms"
11
11
  = list_attribute "authors"
12
12
  = list_attribute_content "Home page", link( m.urls.homepage )
13
-
13
+ = list_attribute "topics"
14
14
  = render_description
15
15
 
16
16
  - if more_urls?
@@ -0,0 +1,34 @@
1
+ %home
2
+ = link_to "Home", "index"
3
+
4
+ %h3 About Inqlude
5
+
6
+ %p
7
+ The goal of Inqlude is to provide a comprehensive listing of all
8
+ existing libraries for developers of Qt applications. If you are creating
9
+ applications using the Qt toolkit, and are looking for libraries, components
10
+ or modules to use, Inqlude is the place where you find all information and
11
+ pointers to get started.
12
+ %p
13
+ Inqlude comes with a command line client for handling libraries. See the
14
+ = link_to "instructions how to get libraries", "get"
15
+ for more details.
16
+ %p
17
+ Inqlude aims to be a complete archive of all available Qt based
18
+ libraries. If you notice that there is some information missing, outdated
19
+ or inaccurate, please consider contributing the missing data. See the
20
+ = link_to "instructions how to contribute", "contribute"
21
+ for more details.
22
+ %p
23
+ %em
24
+ Note that Inqlude is currently in alpha state. It's not ready for full
25
+ production use yet. Data is still incomplete, and the tools are
26
+ limited. Feedback and input is appreciated.
27
+ %p
28
+ If you have questions of comments please feel free to write to the Inqlude
29
+ mailing list #{link_to "inqlude@kde.org", "mailto:inqlude@kde.org"}.
30
+ %p
31
+ Inqlude was created by
32
+ = link_to "Cornelius Schumacher", "mailto:schumacher@kde.org"
33
+ with the help of many others, and is a proud member of the KDE family.
34
+ %br