sdoc 2.1.0 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2501b7ecbe5f0166265183e512bea38f69a47e7fdf350346307b2b1d06ac208c
4
- data.tar.gz: b45da3c5d1044c713b3972888a69b58e318e616bbb0285db327621470b203f5e
3
+ metadata.gz: 002ca37375a4f9d51c68f2c7ac421cec8c4baf74171615627e828fbf8947bc48
4
+ data.tar.gz: 06f44cb76f359c63d97a0b9e5c0eb5c5b06277c700928006e2e390c05955eb17
5
5
  SHA512:
6
- metadata.gz: b960da6795d44598a71048843a15eda6d115fe67bf44c4251aec6496a17674b4f47095978868d09dc35fd2dca81289f36d6b65a7de5eb574c3e228d53b0156cf
7
- data.tar.gz: 4df53cf2db5874f971f343c2ccea52b59a0341cd15153a9580608800bfa10dc65e114377496bd439ea0955ece61835c9b1de980006ef87507be313c70bd4b445
6
+ metadata.gz: b48d64b1e6c87db2088e56c692ed31c8f85fef24e640b18a5c4f609966f7d0b912d78a2e2a973bfffc2bbbecf1ffb3bfb5f16adeecc69780f3e7286850a8f92a
7
+ data.tar.gz: 9e59249e7ea77c4057c1a741e9d4dd6c6fe058ba63fe976d88e20806520d7ce8b219aa5b04acc0943b8f91b0abfb11d97e9fb2d28360381cf893a5c7f8ec3b7f
@@ -0,0 +1,37 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ schedule:
6
+ - cron: '0 0 * * *'
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-20.04
11
+ strategy:
12
+ matrix:
13
+ ruby:
14
+ - '2.1'
15
+ - '2.2'
16
+ - '2.3'
17
+ - '2.4'
18
+ - '2.5'
19
+ - '2.6'
20
+ - '2.7'
21
+ - '3.0'
22
+ - 'ruby-head'
23
+ - 'jruby-head'
24
+ - 'truffleruby-head'
25
+
26
+ steps:
27
+ - uses: actions/checkout@v1
28
+
29
+ - name: Set up Ruby
30
+ uses: ruby/setup-ruby@v1
31
+ with:
32
+ ruby-version: ${{ matrix.ruby }}
33
+ bundler-cache: true
34
+
35
+ - name: Test
36
+ run: |
37
+ bundle exec rake
data/.gitignore CHANGED
@@ -7,3 +7,4 @@ Gemfile.lock
7
7
  /.rake_tasks~
8
8
  /*.gem
9
9
  /rails/
10
+ /ruby/
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ Master
2
+ ======
3
+
4
+ 2.2.0
5
+ =====
6
+
7
+ * #161 Add 'skip to content' link and improve shortcut keys [@MikeRogers0](https://github.com/MikeRogers0)
8
+ * #170 Fix link hovers in headings [@tlatsas](https://github.com/tlatsas)
9
+ * #169 Fix clearing search results [@mikdiet](https://github.com/mikdiet)
10
+ * #167 Update Merge script to work with sdoc v2 [@mikdiet](https://github.com/mikdiet)
11
+ * #160 Remove outline from reset stylesheet [@p8](https://github.com/p8)
12
+ * #159 Remove TAB override in panel [@p8](https://github.com/p8)
13
+ * #157 Move to GitHub action for tests [@MikeRogers0](https://github.com/MikeRogers0)
14
+ * #155 Fix Ctrl+C copying [Jan Schär](https://github.com/jscissr)
15
+
1
16
  2.1.0
2
17
  =====
3
18
 
@@ -91,4 +106,3 @@ Bug Fixes
91
106
  [Compare v0.3.20...v0.4.0](https://github.com/voloko/sdoc/compare/v0.3.20...v0.4.0)
92
107
 
93
108
  No friendly log for this version yet, but PRs are welcome!
94
-
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SDoc
2
2
 
3
- [![Build Status](https://travis-ci.org/zzak/sdoc.svg?branch=master)](https://travis-ci.org/zzak/sdoc)
3
+ [![Tests](https://github.com/zzak/sdoc/actions/workflows/test.yml/badge.svg)](https://github.com/zzak/sdoc/actions/workflows/test.yml)
4
4
 
5
5
  **Powering http://api.rubyonrails.org/**
6
6
 
@@ -92,15 +92,25 @@ As maintainer of both projects, I'll see if I can identify the root of the cause
92
92
 
93
93
  ## Contributing
94
94
 
95
- If you'd like to contribute you can generate the Rails documentation by running:
95
+ If you'd like to contribute you can generate the Rails main branch documentation by running:
96
96
 
97
97
  ```bash
98
98
  rake test:rails
99
99
  ```
100
100
 
101
- This task will generate documentation for the Rails master branch.
102
- Since the task doesn't do any file filtering it contains a lot of extra pages.
101
+ You can generate the Ruby default branch documentation by running:
103
102
 
103
+ ```bash
104
+ rake test:ruby
105
+ ```
106
+
107
+ You can generate merged Rails and Ruby documentation by running:
108
+
109
+ ```bash
110
+ rake test:merged
111
+ ```
112
+
113
+ The generated documentation will be put into `doc/public` directory.
104
114
  To view the just generated documentation start up a rack application by running:
105
115
 
106
116
  ```bash
data/Rakefile CHANGED
@@ -12,22 +12,74 @@ task :default => :test
12
12
  task :spec => :test
13
13
 
14
14
  require 'sdoc'
15
+ require 'sdoc/merge'
15
16
  require 'rdoc/task'
16
17
 
17
18
  rails = File.expand_path "rails"
19
+ ruby = File.expand_path "ruby"
18
20
 
19
21
  directory rails do
20
22
  sh "git clone --depth=1 https://github.com/rails/rails"
21
23
  end
22
24
 
25
+ directory ruby do
26
+ sh "git clone --depth=1 https://github.com/ruby/ruby"
27
+ end
28
+
23
29
  namespace :test do
24
- task :rails => rails
30
+ desc 'Deletes all generated test documentation'
31
+ task :reset_docs do
32
+ FileUtils.remove_dir(File.expand_path('doc'), force: true)
33
+ end
34
+
35
+ desc 'Generates test rails documentation'
36
+ task :rails => [rails, :generate_rails] do
37
+ FileUtils.mv(
38
+ File.expand_path('doc/rails'),
39
+ File.expand_path('doc/public')
40
+ )
41
+ end
25
42
 
26
- RDoc::Task.new(:rails) do |rdoc|
43
+ RDoc::Task.new(:generate_rails) do |rdoc|
27
44
  rdoc.rdoc_dir = 'doc/rails'
28
45
  rdoc.generator = 'sdoc'
29
46
  rdoc.template = 'rails'
47
+ rdoc.title = 'Ruby on Rails'
48
+ rdoc.main = 'rails/README.md'
49
+ rdoc.options << '--exclude=test'
30
50
 
31
51
  rdoc.rdoc_files.include("rails/")
32
52
  end
53
+
54
+ desc 'Generates test ruby documentation'
55
+ task :ruby => [ruby, :generate_ruby] do
56
+ FileUtils.mv(
57
+ File.expand_path('doc/ruby'),
58
+ File.expand_path('doc/public')
59
+ )
60
+ end
61
+
62
+ RDoc::Task.new(:generate_ruby) do |rdoc|
63
+ rdoc.rdoc_dir = 'doc/ruby'
64
+ rdoc.generator = 'sdoc'
65
+ rdoc.template = 'rails'
66
+ rdoc.title = 'Ruby'
67
+ rdoc.main = 'ruby/README.md'
68
+
69
+ rdoc.rdoc_files.include("ruby/")
70
+ end
71
+
72
+ desc 'Generates merged test documentation'
73
+ task :merged => [rails, :generate_rails, ruby, :generate_ruby, :merge]
74
+
75
+ task :merge do
76
+ SDoc::Merge.new.merge(
77
+ [
78
+ '--title', 'Rails + Ruby',
79
+ '--op', 'doc/public',
80
+ '--names', 'rails, ruby',
81
+ 'doc/rails', 'doc/ruby'
82
+ ]
83
+ )
84
+ end
33
85
  end
data/config.ru CHANGED
@@ -5,7 +5,7 @@
5
5
  #
6
6
  require 'bundler/setup'
7
7
 
8
- root = "doc/rails"
8
+ root = "doc/public"
9
9
  unless Dir.exists?(root)
10
10
  puts <<~MESSAGE
11
11
  Could not find any docs in #{root}.
@@ -16,12 +16,12 @@ unless Dir.exists?(root)
16
16
  end
17
17
 
18
18
  use Rack::Static,
19
- :urls => ["/files", "/images", "/js", "/css", "/panel", "/i", "/classes"],
19
+ :urls => ["/files", "/images", "/js", "/css", "/panel", "/i", "/classes", "/ruby", "/rails"],
20
20
  :root => root
21
21
  run lambda { |env|
22
22
  [
23
23
  200,
24
- {
24
+ {
25
25
  'Content-Type' => 'text/html',
26
26
  'Cache-Control' => 'public, max-age=86400'
27
27
  },
@@ -17,23 +17,6 @@
17
17
  <script src="<%= rel_prefix %>/js/searcher.js" type="text/javascript" charset="utf-8" data-turbolinks-track="reload"></script>
18
18
  <script src="<%= rel_prefix %>/panel/tree.js" type="text/javascript" charset="utf-8" data-turbolinks-track="reload"></script>
19
19
  <script src="<%= rel_prefix %>/js/searchdoc.js" type="text/javascript" charset="utf-8" data-turbolinks-track="reload"></script>
20
- <script type="text/javascript" charset="utf-8">
21
- document.addEventListener("turbolinks:load", function() {
22
- // Only initialize panel if not yet initialized
23
- if(!$('#panel .tree ul li').length) {
24
- $('#links').hide();
25
- var panel = new Searchdoc.Panel($('#panel'), search_data, tree, '<%= rel_prefix %>/');
26
- $('#search').focus();
27
- var s = window.location.search.match(/\?q=([^&]+)/);
28
- if (s) {
29
- s = decodeURIComponent(s[1]).replace(/\+/g, ' ');
30
- if (s.length > 0) {
31
- $('#search').val(s);
32
- panel.search(s, true);
33
- }
34
- }
35
- panel.toggle(<%= tree_keys %>);
36
- }
37
- })
38
- </script>
39
20
 
21
+ <meta name="data-rel-prefix" content="<%= rel_prefix %>/">
22
+ <meta name="data-tree-keys" content='<%= tree_keys %>'>
@@ -1,8 +1,8 @@
1
1
  <input type="checkbox" id="hamburger" class="panel_checkbox">
2
2
  <label class="panel_mobile_button" for="hamburger"><span></span> Menu</label>
3
- <div class="panel panel_tree" id="panel" data-turbolinks-permanent>
3
+ <nav class="panel panel_tree" id="panel" data-turbolinks-permanent>
4
4
  <div class="header">
5
- <input type="text" placeholder="Search for a class, method, ..." autosave="searchdoc" results="10" id="search" autocomplete="off" tabindex="-1" />
5
+ <input type="text" placeholder="Search (/) for a class, method, ..." autosave="searchdoc" results="10" id="search" autocomplete="off" tabindex="-1" />
6
6
  <label class="panel_mobile_button_close" for="hamburger"><span></span> Close</label>
7
7
  </div>
8
8
  <div class="tree">
@@ -14,4 +14,4 @@
14
14
  </ul>
15
15
  </div>
16
16
  <a href="links.html" id="links">index</a>
17
- </div>
17
+ </nav>
@@ -18,6 +18,8 @@
18
18
  </head>
19
19
 
20
20
  <body>
21
+ <a class="sr-only sr-only-focusable" href="#content" data-turbolinks="false">Skip to Content</a>
22
+ <a class="sr-only sr-only-focusable" href="#search" data-turbolinks="false">Skip to Search</a>
21
23
 
22
24
  <%= include_template '_panel.rhtml' %>
23
25
 
@@ -45,8 +47,8 @@
45
47
  </ul>
46
48
  </div>
47
49
 
48
- <div id="bodyContent">
50
+ <main id="bodyContent">
49
51
  <%= include_template '_context.rhtml', {:context => klass, :rel_prefix => rel_prefix} %>
50
- </div>
52
+ </main>
51
53
  </body>
52
54
  </html>
@@ -8,6 +8,8 @@
8
8
  </head>
9
9
 
10
10
  <body>
11
+ <a class="sr-only sr-only-focusable" href="#content" data-turbolinks="false">Skip to Content</a>
12
+ <a class="sr-only sr-only-focusable" href="#search" data-turbolinks="false">Skip to Search</a>
11
13
 
12
14
  <%= include_template '_panel.rhtml' %>
13
15
 
@@ -32,8 +34,8 @@
32
34
  </ul>
33
35
  </div>
34
36
 
35
- <div id="bodyContent">
37
+ <main id="bodyContent">
36
38
  <%= include_template '_context.rhtml', {:context => file, :rel_prefix => rel_prefix} %>
37
- </div>
39
+ </main>
38
40
  </body>
39
41
  </html>
@@ -8,6 +8,8 @@
8
8
  </head>
9
9
 
10
10
  <body>
11
+ <a class="sr-only sr-only-focusable" href="#content" data-turbolinks="false">Skip to Content</a>
12
+ <a class="sr-only sr-only-focusable" href="#search" data-turbolinks="false">Skip to Search</a>
11
13
 
12
14
  <%= include_template '_panel.rhtml' %>
13
15
 
@@ -24,9 +26,8 @@
24
26
  </ul>
25
27
  </div>
26
28
 
27
- <div id="bodyContent">
29
+ <main id="bodyContent">
28
30
  <%= include_template '_context.rhtml', {:context => index } %>
29
- </div>
31
+ </main>
30
32
  </body>
31
33
  </html>
32
-
@@ -31,10 +31,6 @@ h1 a, h2 a, .banner a {
31
31
  color: #fff;
32
32
  }
33
33
 
34
- h1 a:hover, h2 a:hover {
35
- color: #fff;
36
- }
37
-
38
34
  p {
39
35
  margin-bottom: 1em;
40
36
  text-align: justify;
@@ -378,3 +374,32 @@ p code {
378
374
  margin-bottom: 1px;
379
375
  padding: 0 5px;
380
376
  }
377
+
378
+ .sr-only {
379
+ position: absolute;
380
+ width: 1px;
381
+ height: 1px;
382
+ padding: 0;
383
+ overflow: hidden;
384
+ clip: rect(0,0,0,0);
385
+ white-space: nowrap;
386
+ border: 0;
387
+ }
388
+ .sr-only-focusable:active,
389
+ .sr-only-focusable:focus {
390
+ position: fixed;
391
+ top: 10%;
392
+ width: auto;
393
+ height: auto;
394
+ overflow: visible;
395
+ clip: auto;
396
+ white-space: normal;
397
+ padding: 2rem;
398
+ border: 4px solid #990000;
399
+ border-radius: 1rem;
400
+ box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 15%) !important;
401
+ left: 40%;
402
+ z-index: 100;
403
+ background: #fff;
404
+ font-size: 2rem;
405
+ }
@@ -98,7 +98,7 @@
98
98
  left: -100%;
99
99
  width: 100%;
100
100
  bottom: 0;
101
- visibility: hidden;
101
+ visibility: hidden;
102
102
  }
103
103
 
104
104
  .panel_checkbox:checked ~ .panel {
@@ -113,7 +113,7 @@
113
113
  }
114
114
  }
115
115
 
116
- .panel_tree .results,
116
+ .panel_tree .result,
117
117
  .panel_results .tree
118
118
  {
119
119
  display: none;
@@ -13,7 +13,6 @@ table, caption, tbody, tfoot, thead, tr, th, td {
13
13
  margin: 0;
14
14
  padding: 0;
15
15
  border: 0;
16
- outline: 0;
17
16
  font-size: 100%;
18
17
  vertical-align: baseline;
19
18
  background: transparent;
@@ -27,6 +27,23 @@ document.addEventListener("turbolinks:load", function() {
27
27
  });
28
28
  });
29
29
 
30
+ document.addEventListener("turbolinks:load", function() {
31
+ // Only initialize panel if not yet initialized
32
+ if(!$('#panel .tree ul li').length) {
33
+ $('#links').hide();
34
+ var panel = new Searchdoc.Panel($('#panel'), search_data, tree, $('meta[name="data-rel-prefix"]').attr("content"));
35
+ var s = window.location.search.match(/\?q=([^&]+)/);
36
+ if (s) {
37
+ s = decodeURIComponent(s[1]).replace(/\+/g, ' ');
38
+ if (s.length > 0) {
39
+ $('#search').val(s);
40
+ panel.search(s, true);
41
+ }
42
+ }
43
+ panel.toggle(JSON.parse($('meta[name="data-tree-keys"]').attr("content")));
44
+ }
45
+ });
46
+
30
47
  // Keep scroll position for panel
31
48
  (function() {
32
49
  var scrollTop = 0;
@@ -32,10 +32,6 @@ Searchdoc.Navigation = new function() {
32
32
  case 74: // j
33
33
  case 75: // k
34
34
  case 76: // l
35
- case 67: // c - dvorak
36
- case 72: // h
37
- case 84: // t
38
- case 78: // n
39
35
  this.clearMoveTimeout();
40
36
  break;
41
37
  }
@@ -43,15 +39,14 @@ Searchdoc.Navigation = new function() {
43
39
 
44
40
  this.onkeydown = function(e) {
45
41
  if (!this.navigationActive) return;
42
+
46
43
  switch (e.keyCode) {
47
44
  case 37: //Event.KEY_LEFT:
48
45
  case 74: // j (qwerty)
49
- case 72: // h (dvorak)
50
46
  if (this.moveLeft()) e.preventDefault();
51
47
  break;
52
48
  case 38: //Event.KEY_UP:
53
49
  case 73: // i (qwerty)
54
- case 67: // c (dvorak)
55
50
  if (e.keyCode == 38 || e.ctrlKey) {
56
51
  if (this.moveUp()) e.preventDefault();
57
52
  this.startMoveTimeout(false);
@@ -59,28 +54,31 @@ Searchdoc.Navigation = new function() {
59
54
  break;
60
55
  case 39: //Event.KEY_RIGHT:
61
56
  case 76: // l (qwerty)
62
- case 78: // n (dvorak)
63
57
  if (this.moveRight()) e.preventDefault();
64
58
  break;
65
59
  case 40: //Event.KEY_DOWN:
66
60
  case 75: // k (qwerty)
67
- case 84: // t (dvorak)
68
61
  if (e.keyCode == 40 || e.ctrlKey) {
69
62
  if (this.moveDown()) e.preventDefault();
70
63
  this.startMoveTimeout(true);
71
64
  }
72
65
  break;
73
- case 9: //Event.KEY_TAB:
74
66
  case 13: //Event.KEY_RETURN:
67
+ if(e.target.dataset["turbolinks"]) { break; }
75
68
  if (this.$current) this.select(this.$current);
76
69
  break;
77
- case 83: // s (qwerty)
78
- case 79: // o (dvorak)
70
+ case 83: // s (qwerty) - Focuses search
79
71
  if (e.ctrlKey) {
80
72
  $('#search').focus();
81
73
  e.preventDefault();
82
74
  }
83
75
  break;
76
+ case 191: // / - Search by pressing "/"
77
+ if( !$('#search').is(":focus") ) {
78
+ $('#search').focus();
79
+ e.preventDefault();
80
+ }
81
+ break;
84
82
  }
85
83
  if (e.ctrlKey && e.shiftKey) this.select(this.$current);
86
84
  };
@@ -481,4 +479,3 @@ Searchdoc.Tree.prototype = $.extend({}, Searchdoc.Navigation, new function() {
481
479
  return 5 + 18 * level + 'px';
482
480
  }
483
481
  });
484
-
@@ -44,8 +44,8 @@
44
44
  <% end %>
45
45
  </ul>
46
46
  </div>
47
- <div id="bodyContent">
47
+ <main id="bodyContent">
48
48
  <%= include_template '_context.rhtml', {:context => klass, :rel_prefix => rel_prefix} %>
49
- </div>
49
+ </main>
50
50
  </body>
51
51
  </html>
@@ -21,8 +21,8 @@
21
21
  </ul>
22
22
  </div>
23
23
 
24
- <div id="bodyContent">
24
+ <main id="bodyContent">
25
25
  <%= include_template '_context.rhtml', {:context => file, :rel_prefix => rel_prefix} %>
26
- </div>
26
+ </main>
27
27
  </body>
28
28
  </html>
@@ -13,7 +13,6 @@ table, caption, tbody, tfoot, thead, tr, th, td {
13
13
  margin: 0;
14
14
  padding: 0;
15
15
  border: 0;
16
- outline: 0;
17
16
  font-size: 100%;
18
17
  vertical-align: baseline;
19
18
  background: transparent;
@@ -32,10 +32,6 @@ Searchdoc.Navigation = new function() {
32
32
  case 74: // j
33
33
  case 75: // k
34
34
  case 76: // l
35
- case 67: // c - dvorak
36
- case 72: // h
37
- case 84: // t
38
- case 78: // n
39
35
  this.clearMoveTimeout();
40
36
  break;
41
37
  }
@@ -46,12 +42,10 @@ Searchdoc.Navigation = new function() {
46
42
  switch (e.keyCode) {
47
43
  case 37: //Event.KEY_LEFT:
48
44
  case 74: // j (qwerty)
49
- case 72: // h (dvorak)
50
45
  if (this.moveLeft()) e.preventDefault();
51
46
  break;
52
47
  case 38: //Event.KEY_UP:
53
48
  case 73: // i (qwerty)
54
- case 67: // c (dvorak)
55
49
  if (e.keyCode == 38 || e.ctrlKey) {
56
50
  if (this.moveUp()) e.preventDefault();
57
51
  this.startMoveTimeout(false);
@@ -59,23 +53,19 @@ Searchdoc.Navigation = new function() {
59
53
  break;
60
54
  case 39: //Event.KEY_RIGHT:
61
55
  case 76: // l (qwerty)
62
- case 78: // n (dvorak)
63
56
  if (this.moveRight()) e.preventDefault();
64
57
  break;
65
58
  case 40: //Event.KEY_DOWN:
66
59
  case 75: // k (qwerty)
67
- case 84: // t (dvorak)
68
60
  if (e.keyCode == 40 || e.ctrlKey) {
69
61
  if (this.moveDown()) e.preventDefault();
70
62
  this.startMoveTimeout(true);
71
63
  }
72
64
  break;
73
- case 9: //Event.KEY_TAB:
74
65
  case 13: //Event.KEY_RETURN:
75
66
  if (this.$current) this.select(this.$current);
76
67
  break;
77
68
  case 83: // s (qwerty)
78
- case 79: // o (dvorak)
79
69
  if (e.ctrlKey) {
80
70
  $('#search').focus();
81
71
  e.preventDefault();
data/lib/sdoc/merge.rb CHANGED
@@ -3,11 +3,7 @@ require 'pathname'
3
3
  require 'fileutils'
4
4
  require 'json'
5
5
 
6
- require 'sdoc/templatable'
7
-
8
6
  class SDoc::Merge
9
- include SDoc::Templatable
10
-
11
7
  FLAG_FILE = "created.rid"
12
8
 
13
9
  def initialize()
@@ -20,9 +16,6 @@ class SDoc::Merge
20
16
 
21
17
  def merge(options)
22
18
  parse_options options
23
-
24
- @outputdir = Pathname.new( @op_dir )
25
-
26
19
  check_directories
27
20
  setup_output_dir
28
21
  setup_names
@@ -30,7 +23,7 @@ class SDoc::Merge
30
23
  copy_docs if @urls.empty?
31
24
  merge_search_index
32
25
  merge_tree
33
- generate_index_file
26
+ copy_index_file
34
27
  end
35
28
 
36
29
  def parse_options(options)
@@ -56,7 +49,6 @@ class SDoc::Merge
56
49
  end
57
50
  end
58
51
  opts.parse! options
59
- @template_dir = Pathname.new(RDoc::Options.new.template_dir_for 'merge')
60
52
  @directories = options.dup
61
53
  end
62
54
 
@@ -70,7 +62,7 @@ class SDoc::Merge
70
62
  subtree = JSON.parse(data, :max_nesting => 0)
71
63
  item = [
72
64
  name,
73
- url + '/' + extract_index_path(dir),
65
+ url + '/index.html',
74
66
  '',
75
67
  append_path(subtree, url)
76
68
  ]
@@ -137,24 +129,8 @@ class SDoc::Merge
137
129
  end
138
130
  end
139
131
 
140
- def extract_index_path dir
141
- filename = File.join dir, 'index.html'
142
- content = File.open(filename) { |f| f.read }
143
- match = content.match(/<frame\s+src="([^"]+)"\s+name="docwin"/mi)
144
- if match
145
- match[1]
146
- else
147
- ''
148
- end
149
- end
150
-
151
- def generate_index_file
152
- templatefile = @template_dir + 'index.rhtml'
153
- outfile = @outputdir + 'index.html'
154
- url = @urls.empty? ? @names[0] : @urls[0]
155
- index_path = url + '/' + extract_index_path(@directories[0])
156
-
157
- render_template templatefile, binding(), outfile
132
+ def copy_index_file
133
+ FileUtils.cp File.join(@directories[0], 'index.html'), @op_dir
158
134
  end
159
135
 
160
136
  def setup_names
@@ -178,6 +154,7 @@ class SDoc::Merge
178
154
  FileUtils.cp_r File.join(dir, item), File.join(@op_dir, name, item), :preserve => true
179
155
  end
180
156
  end
157
+ FileUtils.cp File.join(dir, 'index.html'), File.join(@op_dir, name)
181
158
  end
182
159
  end
183
160
 
data/lib/sdoc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SDoc
2
- VERSION = '2.1.0'
2
+ VERSION = '2.2.0'
3
3
  end
data/netlify.toml ADDED
@@ -0,0 +1,39 @@
1
+ [build]
2
+ command = "rake install && sdoc -o doc/public -T rails -f sdoc"
3
+ publish = "doc/public"
4
+
5
+ [build.processing]
6
+ skip_processing = false
7
+ [build.processing.css]
8
+ bundle = true
9
+ minify = true
10
+ [build.processing.js]
11
+ bundle = true
12
+ minify = true
13
+ [build.processing.html]
14
+ pretty_urls = true
15
+ [build.processing.images]
16
+ compress = true
17
+
18
+ [[headers]]
19
+ for = "*"
20
+ [headers.values]
21
+ X-Frame-Options = "DENY"
22
+ X-XSS-Protection = "1; mode=block"
23
+ X-Content-Type-Options = "nosniff"
24
+ Content-Security-Policy = '''
25
+ object-src 'none';
26
+ worker-src 'none';
27
+ block-all-mixed-content;
28
+ upgrade-insecure-requests;'''
29
+ Strict-Transport-Security = "max-age=15552000; includeSubDomains"
30
+ Referrer-Policy = "no-referrer-when-downgrade"
31
+ Cache-Control = "public, max-age=604800, s-max-age=604800"
32
+
33
+ [[headers]]
34
+ for = "/"
35
+
36
+ [[headers]]
37
+ for = "/*.(png|jpg|js|css|svg|woff|ttf|eot|ico|woff2)"
38
+ [headers.values]
39
+ Cache-Control = "public, max-age=31536000, s-max-age=31536000"
data/spec/helpers_spec.rb CHANGED
@@ -19,14 +19,14 @@ describe SDoc::Helpers do
19
19
  ]
20
20
 
21
21
  strings.each do |(html, stripped)|
22
- @helpers.strip_tags(html).must_equal stripped
22
+ _(@helpers.strip_tags(html)).must_equal stripped
23
23
  end
24
24
  end
25
25
  end
26
26
 
27
27
  describe "#truncate" do
28
28
  it "should truncate the given text around a given length" do
29
- @helpers.truncate("Hello world", length: 5).must_equal "Hello."
29
+ _(@helpers.truncate("Hello world", length: 5)).must_equal "Hello."
30
30
  end
31
31
  end
32
32
  end
@@ -8,12 +8,12 @@ describe RDoc::Generator::SDoc do
8
8
  end
9
9
 
10
10
  it "should find sdoc generator" do
11
- RDoc::RDoc::GENERATORS.must_include 'sdoc'
11
+ _(RDoc::RDoc::GENERATORS).must_include 'sdoc'
12
12
  end
13
13
 
14
14
  it "should use sdoc generator" do
15
- @options.generator.must_equal RDoc::Generator::SDoc
16
- @options.generator_name.must_equal 'sdoc'
15
+ _(@options.generator).must_equal RDoc::Generator::SDoc
16
+ _(@options.generator_name).must_equal 'sdoc'
17
17
  end
18
18
 
19
19
  it "should parse github option" do
@@ -23,8 +23,8 @@ describe RDoc::Generator::SDoc do
23
23
  @parser.parse %w[--github]
24
24
  end
25
25
 
26
- err.wont_match(/^invalid options/)
27
- @options.github.must_equal true
26
+ _(err).wont_match(/^invalid options/)
27
+ _(@options.github).must_equal true
28
28
  end
29
29
 
30
30
  it "should parse github short-hand option" do
@@ -34,15 +34,15 @@ describe RDoc::Generator::SDoc do
34
34
  @parser.parse %w[-g]
35
35
  end
36
36
 
37
- err.wont_match(/^invalid options/)
38
- @options.github.must_equal true
37
+ _(err).wont_match(/^invalid options/)
38
+ _(@options.github).must_equal true
39
39
  end
40
40
 
41
41
  it "should display SDoc version on -v or --version" do
42
42
  out_full = `./bin/sdoc --version`
43
43
  out_short = `./bin/sdoc -v`
44
44
 
45
- out_short.strip.must_equal SDoc::VERSION
46
- out_full.strip.must_equal SDoc::VERSION
45
+ _(out_short.strip).must_equal SDoc::VERSION
46
+ _(out_full.strip).must_equal SDoc::VERSION
47
47
  end
48
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sdoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Kolesnikov
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-03-31 00:00:00.000000000 Z
14
+ date: 2021-05-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rdoc
@@ -50,8 +50,8 @@ extensions: []
50
50
  extra_rdoc_files:
51
51
  - README.md
52
52
  files:
53
+ - ".github/workflows/test.yml"
53
54
  - ".gitignore"
54
- - ".travis.yml"
55
55
  - CHANGELOG.md
56
56
  - Gemfile
57
57
  - LICENSE
@@ -61,7 +61,6 @@ files:
61
61
  - bin/sdoc-merge
62
62
  - config.ru
63
63
  - lib/rdoc/discover.rb
64
- - lib/rdoc/generator/template/merge/index.rhtml
65
64
  - lib/rdoc/generator/template/rails/_context.rhtml
66
65
  - lib/rdoc/generator/template/rails/_head.rhtml
67
66
  - lib/rdoc/generator/template/rails/_panel.rhtml
@@ -113,6 +112,7 @@ files:
113
112
  - lib/sdoc/merge.rb
114
113
  - lib/sdoc/templatable.rb
115
114
  - lib/sdoc/version.rb
115
+ - netlify.toml
116
116
  - sdoc.gemspec
117
117
  - spec/helpers_spec.rb
118
118
  - spec/rdoc_generator_spec.rb
data/.travis.yml DELETED
@@ -1,31 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- before_install:
4
- - gem update --system || gem update --system 2.7.8
5
- - gem install bundler || gem install bundler -v 1.17.3
6
- rvm:
7
- - 1.9.3
8
- - 2.0.0
9
- - 2.1.0
10
- - 2.2.10
11
- - 2.3.7
12
- - 2.4.4
13
- - 2.5.1
14
- - 2.6.0
15
- - ruby-head
16
- - jruby-head
17
- matrix:
18
- allow_failures:
19
- - env: rdoc=master
20
- - rvm: jruby-head
21
- include:
22
- - { rvm: 2.2.10, env: rdoc=master }
23
- - { rvm: 2.3.7, env: rdoc=master }
24
- - { rvm: 2.4.4, env: rdoc=master }
25
- - { rvm: 2.5.1, env: rdoc=master }
26
- - { rvm: 2.6.0, env: rdoc=master }
27
- - { rvm: ruby-head, env: rdoc=master }
28
- - { rvm: jruby-head, env: rdoc=master }
29
- notifications:
30
- email:
31
- - mail@zzak.io
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <title><%= @title %></title>
6
- <meta name="viewport" content="width=device-width,initial-scale=1">
7
- </head>
8
- <frameset cols="300,*" frameborder="1" border="1" bordercolor="#999999" framespacing="1">
9
- <frame src="panel/index.html" title="Search" name="panel" />
10
- <frame src="<%= index_path %>" name="docwin" />
11
- </frameset>
12
- </html>