From d796fa74baf1dbb2f7a5468a37b026fe7a9c4ac0 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 14:01:06 -0800 Subject: [PATCH 1/8] Rough cut --- lib/rdoc/generator/json_index.rb | 15 ++++++++ test/test_rdoc_generator_json_index.rb | 52 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index c303b2effb..d11affb5c7 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -1,4 +1,5 @@ require 'json' +require 'zlib' ## # The JsonIndex generator is designed to complement an HTML generator and @@ -152,6 +153,20 @@ def generate end end + ## + # Compress the search_index.js file using gzip + + def generate_gzipped + debug_msg "Compressing generated JSON index" + search_index_file = @outputdir + SEARCH_INDEX_FILE + outfile = search_index_file + '.gz' + debug_msg " writing gzipped search index to %s" % outfile + + Zlib::GzipWriter.open(outfile) do |gz| + gz.write File.read(search_index_file) + end + end + ## # Adds classes and modules to the index diff --git a/test/test_rdoc_generator_json_index.rb b/test/test_rdoc_generator_json_index.rb index 214e4a0d91..0b85e3d5b2 100644 --- a/test/test_rdoc_generator_json_index.rb +++ b/test/test_rdoc_generator_json_index.rb @@ -136,6 +136,58 @@ def test_generate assert_equal expected, index end + def test_generate_gzipped + require 'zlib' + @g.generate_gzipped + + assert_file 'js/searcher.js' + assert_file 'js/navigation.js' + assert_file 'js/search_index.js' + assert_file 'js/search_index.js.gz' + + gzip = File.read 'js/search_index.js.gz' + json = Zlib::GzipReader.new(gzip).read + + json =~ /\Avar search_data = / + + assignment = $& + index = $' + + refute_empty assignment + + index = JSON.parse index + + info = [ + @klass.search_record[2..-1], + @nest_klass.search_record[2..-1], + @meth.search_record[2..-1], + @nest_meth.search_record[2..-1], + @page.search_record[2..-1], + ] + + expected = { + 'index' => { + 'searchIndex' => [ + 'c', + 'd', + 'meth()', + 'meth()', + 'page', + ], + 'longSearchIndex' => [ + 'c', + 'c::d', + 'c#meth()', + 'c::d#meth()', + '', + ], + 'info' => info, + }, + } + + assert_equal expected, index + end + def test_generate_utf_8 skip "Encoding not implemented" unless Object.const_defined? :Encoding From c5f73f40bc21622ff66ef77a0f5d4601ae6dfbdb Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 14:29:07 -0800 Subject: [PATCH 2/8] Use `@base_dir` instead --- lib/rdoc/generator/json_index.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index d11affb5c7..7da35a52e4 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -158,7 +158,7 @@ def generate def generate_gzipped debug_msg "Compressing generated JSON index" - search_index_file = @outputdir + SEARCH_INDEX_FILE + search_index_file = @base_dir + SEARCH_INDEX_FILE outfile = search_index_file + '.gz' debug_msg " writing gzipped search index to %s" % outfile From ced2419749bbe3d1e0d31d23a8d5a83a0a52e4fa Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 15:08:11 -0800 Subject: [PATCH 3/8] Fix wrong out_dir and ensure JSON index file is read into memory --- lib/rdoc/generator/json_index.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index 7da35a52e4..4820e305f2 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -158,9 +158,13 @@ def generate def generate_gzipped debug_msg "Compressing generated JSON index" - search_index_file = @base_dir + SEARCH_INDEX_FILE - outfile = search_index_file + '.gz' - debug_msg " writing gzipped search index to %s" % outfile + out_dir = @base_dir + @options.op_dir + + search_index_file = out_dir + SEARCH_INDEX_FILE + outfile = out_dir + "#{search_index_file}.gz" + + debug_msg "Reading the JSON index file from %s" % search_index_file + search_index = search_index_file.read Zlib::GzipWriter.open(outfile) do |gz| gz.write File.read(search_index_file) From 6e9d169681d2837c6e988780fa64a2e53b6649ae Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 15:08:45 -0800 Subject: [PATCH 4/8] Use `Pathname#open` like `#generate` instead. --- lib/rdoc/generator/json_index.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index 4820e305f2..38d2431694 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -166,8 +166,11 @@ def generate_gzipped debug_msg "Reading the JSON index file from %s" % search_index_file search_index = search_index_file.read - Zlib::GzipWriter.open(outfile) do |gz| - gz.write File.read(search_index_file) + debug_msg "Writing gzipped search index to %s" % outfile + outfile.open 'w', 0644 do |io| + gz = Zlib::GzipWriter.new(io) + gz.write search_index + gz.close end end From 0543a901f8153f7362cb58a82633b09f7e4b91c1 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 15:09:34 -0800 Subject: [PATCH 5/8] Call `#generate` first to make sure the JSON index file exists --- test/test_rdoc_generator_json_index.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_rdoc_generator_json_index.rb b/test/test_rdoc_generator_json_index.rb index 0b85e3d5b2..be6a74d430 100644 --- a/test/test_rdoc_generator_json_index.rb +++ b/test/test_rdoc_generator_json_index.rb @@ -138,6 +138,7 @@ def test_generate def test_generate_gzipped require 'zlib' + @g.generate @g.generate_gzipped assert_file 'js/searcher.js' @@ -145,7 +146,7 @@ def test_generate_gzipped assert_file 'js/search_index.js' assert_file 'js/search_index.js.gz' - gzip = File.read 'js/search_index.js.gz' + gzip = File.open 'js/search_index.js.gz' json = Zlib::GzipReader.new(gzip).read json =~ /\Avar search_data = / From ad47a91f30c6ac2ac3c7cf02697a8b5aaf4cbd5d Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 21:51:38 -0800 Subject: [PATCH 6/8] Ensure gzipped file is also generated --- lib/rdoc/generator/darkfish.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb index bd37b60668..2fd6007695 100644 --- a/lib/rdoc/generator/darkfish.rb +++ b/lib/rdoc/generator/darkfish.rb @@ -246,6 +246,7 @@ def generate generate_file_files generate_table_of_contents @json_index.generate + @json_index.generate_gzipped copy_static From 2db3106095cc525a5a97bd761d16cc5a530ed807 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Mon, 1 Dec 2014 21:51:58 -0800 Subject: [PATCH 7/8] Use GzipWriter to open and write to the file --- lib/rdoc/generator/json_index.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index 38d2431694..4512006363 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -167,8 +167,10 @@ def generate_gzipped search_index = search_index_file.read debug_msg "Writing gzipped search index to %s" % outfile - outfile.open 'w', 0644 do |io| - gz = Zlib::GzipWriter.new(io) + + Zlib::GzipWriter.open(outfile) do |gz| + gz.mtime = File.mtime(search_index_file) + gz.orig_name = search_index_file.to_s gz.write search_index gz.close end From af82e336fd352e3b29be8be5733e9fe2332601e1 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Thu, 4 Dec 2014 16:19:40 -0800 Subject: [PATCH 8/8] We might as well gzip all of the javascript files in this directory. --- lib/rdoc/generator/json_index.rb | 20 ++++++++++++++++++++ test/test_rdoc_generator_json_index.rb | 2 ++ 2 files changed, 22 insertions(+) diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb index 4512006363..9d6f0d4356 100644 --- a/lib/rdoc/generator/json_index.rb +++ b/lib/rdoc/generator/json_index.rb @@ -174,6 +174,26 @@ def generate_gzipped gz.write search_index gz.close end + + # GZip the rest of the js files + Dir.chdir @template_dir do + Dir['**/*.js'].each do |source| + dest = out_dir + source + outfile = out_dir + "#{dest}.gz" + + debug_msg "Reading the original js file from %s" % dest + data = dest.read + + debug_msg "Writing gzipped file to %s" % outfile + + Zlib::GzipWriter.open(outfile) do |gz| + gz.mtime = File.mtime(dest) + gz.orig_name = dest.to_s + gz.write data + gz.close + end + end + end end ## diff --git a/test/test_rdoc_generator_json_index.rb b/test/test_rdoc_generator_json_index.rb index be6a74d430..f25ee27d5e 100644 --- a/test/test_rdoc_generator_json_index.rb +++ b/test/test_rdoc_generator_json_index.rb @@ -142,7 +142,9 @@ def test_generate_gzipped @g.generate_gzipped assert_file 'js/searcher.js' + assert_file 'js/searcher.js.gz' assert_file 'js/navigation.js' + assert_file 'js/navigation.js.gz' assert_file 'js/search_index.js' assert_file 'js/search_index.js.gz'